SAPUI5基础知识12 - 应用程序描述符(manifest.json)

news2024/12/25 11:31:54

1. 背景

在SAPUI5中,manifest.json是一个配置文件,它包含了应用程序的所有配置信息。这个文件是SAPUI5应用程序的核心,它定义了应用程序的元数据,包括应用程序的名称、描述、版本、模型、路由等信息。

manifest.json的主要功能和用途包括:

  • 元数据:定义应用程序的基本信息,如名称、描述、版本等。
  • 模型:定义应用程序的数据模型,包括服务URL、数据类型等。
  • 路由:定义应用程序的路由信息,包括路由模式、路由路径等。
  • i18n:定义应用程序的国际化信息,包括语言、地区等。

将应用程序的配置信息抽取到manifest.json中,可以让应用程序编码与配置设置相互分离,这让应用程序更加具有灵活性。

所有SAP Fiori应用程序都是作为组件实现的,并带有一个描述符文件,这可以让这些应用程序方便地托管在SAP Fiori launchpad中。

2. 用法

一个完整的组件应包含两部分:组件控制器文件(component .js)和应用程序描述描述符文件(manifest.json)。

manifest.jsonComponent.js的关系是,Component.js是SAPUI5应用程序的入口点,它会读取manifest.json文件中的配置信息,然后根据这些信息初始化应用程序。

在SAPUI5的早期版本中,这些配置信息是直接写在Component.js文件中的,但是随着应用程序的复杂性增加,将这些配置信息抽取出来,放在一个单独的manifest.json文件中,可以使代码更加清晰,更易于管理。

SAP Fiori launchpad充当应用程序容器并实例化应用程序,而无需本地HTML文件作为引导。manifest.json描述符文件将被解析并将组件加载到当前HTML页面中。这种方式允许在同一个context中显示多个应用程序,而且每个应用都可以定义自身的设置(例如语言属性、支持的设备等)。与此同时,我们还可以使用描述符文件来加载额外的资源并实例化模型,就像我们的i18n资源包一样。

3. 练习

在上一篇博客练习的基础上,让我们封装mainfest.json文件。

3.1 创建/更新manifest.json文件

首先,让我们在webapp文件夹下,创建mainfest.json文件。

在这里插入图片描述

注意: 如果我们之前已经使用ui5 init命令初始化项目,manifest.json文件已经生成,因为使用SAPUI5工具运行应用程序是必要的。

manifest.json文件是一个json格式的配置对象,包含所有全局应用程序设置和参数。manifest文件被称为应用程序、组件和库的描述符,它存储在webapp文件夹中,并由SAPUI5读取以实例化组件。

下面是初始的mainfest.json文件的内容:

{
    "_version": "1.58.0",
    "sap.app": {
        "id": "zsapui5.test"
    }
}

让我们更新manifest.json文件内容如下:

{
    "_version": "1.58.0",
    "sap.app": {
      "id": "zsapui5.test",
      "i18n": "i18n/i18n.properties",
      "title": "{{appTitle}}",
      "description": "{{appDescription}}",
      "type": "application",
      "applicationVersion": {
        "version": "1.0.0"
      }
    },
    "sap.ui": {
      "technology": "UI5",
      "deviceTypes": {
          "desktop": true,
          "tablet": true,
          "phone": true
      }
    },
    "sap.ui5": {
      "dependencies": {
        "minUI5Version": "1.108.0",
        "libs": {
          "sap.ui.core": {},
          "sap.m": {}
        }
      },
      "models": {
        "i18n": {
          "type": "sap.ui.model.resource.ResourceModel",
          "settings": {
            "bundleName": "zsapui5.test.i18n.i18n",
            "supportedLocales": [""],
            "fallbackLocale": ""
          }
        }
      },
      "rootView": {
          "viewName": "zsapui5.test.view.App",
          "type": "XML",
          "id": "app"
      }
    }
  }

manifest.json文件中的命名空间定义了三个重要的部分:

  • sap.app: sap.app命名空间包含以下特定于应用程序的属性:
    • id(必选):应用程序组件的命名空间。ID不能超过70个字符。必须唯一,必须与组件ID/命名空间对应
    • type:定义我们想要配置的内容; 这是一个应用程序。
    • i18n:定义资源包文件的路径
    • title:应用的handlebars语法中的标题,从应用的资源包中引用。
    • description:简短的描述文本, 应用程序在handlebars语法中做了什么,引用自应用程序的资源包。
    • applicationVersion:应用程序的版本,以后可以方便地更新应用程序。
  • sap.ui: sap.ui命名空间提供了以下特定于ui的属性:
    • technology:这个值指定了UI的技术;在我们的例子中,我们使用SAPUI5
    • deviceTypes:告诉应用程序支持哪些设备: 桌面,平板,手机(默认为true)
  • sap.ui5: sap.ui5命名空间添加SAPUI5特定的配置参数,由SAPUI5自动处理。最重要的参数有:
    • rootView:如果指定这个参数,组件将自动实例化视图,并将其用作该组件的root
    • dependencies 依赖关系, 在这里我们声明应用程序中使用的UI库
    • models:在描述符的本节中,我们可以定义模型,这些模型将在应用程序启动时由SAPUI5自动实例化。这里我们可以定义了本地资源包。我们将模型的名称“i18n”定义为键,并通过命名空间指定打包文件。与前面的步骤一样,包含翻译后文本的文件存储在i18n文件夹中,并命名为i18n.properties。我们只需在文件的路径前加上应用程序的命名空间。应用程序组件文件(Component.js)中的init方法中的手动实例化将在稍后的步骤中删除。supportedLocalesfallbackLocale属性被设置为空字符串,在我们的演示应用程序中只使用一个i18n,为了简单起见,我们希望阻止浏览器加载额外的i18n_*

出于兼容性的考虑,根对象和每个部分都在内部属性_version下声明了描述符的版本号1.58.0。在描述符的未来版本中可能会添加或更改功能,版本号有助于通过读取描述符的工具识别应用程序设置。

资源包的属性在描述符中包含在两个大括号中。这不是SAPUI5数据绑定语法,而是handlebars语法中描述符中对资源包的变量引用。参考文本在本教程构建的应用程序中不可见,但可以通过SAP Fiori launchpad等应用程序容器读取。

3.2 更新index.html引导过程文件

项目的index.js文件用于创建组件加载器并加载应用程序的组件。这个自定义逻辑可以被一个叫做ComponentSupport的内置模块替换。我们可以直接在bootstrap中使用此模块,以消除自定义index.js文件的需求。

首先,需要增强index.html的主体部分。

index.html的引导脚本中,启用ComponentSupport模块。然后,我们通过div标签在body中声明我们的组件(div标签将被用作组件的容器)。这将在onInit事件执行时实例化组件。

我们将使用这个div将配置参数传递给ComponentSupport模块。为了实现这个目标,我们需要给div标签添加data-*属性,包括必须添加的data-sap-ui-component属性,该属性将div标记为组件的父元素

...
    data-sap-ui-onInit="module:sap/ui/core/ComponentSupport"
...
   <div data-sap-ui-component data-name="zsapui5.test" data-id="container" data-settings='{"id" : "test"}'>
...     

在这里插入图片描述

改动后的代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>My SAPUI5 Test</title>
    <script
    id="sap-ui-bootstrap"
    src="https://sdk.openui5.org/resources/sap-ui-core.js"
    data-sap-ui-theme="sap_horizon"
    data-sap-ui-libs="sap.m"
    data-sap-ui-compatVersion="edge"
    data-sap-ui-async="true"
    data-sap-ui-onInit="module:sap/ui/core/ComponentSupport"
    data-sap-ui-resourceroots='{
        "zsapui5.test": "./"
    }'>
    </script>
</head>
<body class="sapUiBody" id="content"></body>
    <div data-sap-ui-component data-name="zsapui5.test" data-id="container" data-settings='{"id" : "test"}'></div>
</html>

3.3 删除index.js文件

现在,我们可以删除index.js文件了,因为我们通过启用ComponentSupport模块,已经完成了index.js中的任务。
在这里插入图片描述

3.4 更新i18n.properties文件

在资源包resource boundle中,为应用程序添加文本,并添加注释,从语义上分离资源包中的文本。
在这里插入图片描述

改动后的i18n.properties文件内容如下:

# App Descriptor
appTitle=Hello World
appDescription=A simple app that explains the most important concepts of SAPUI5

# Hello Panel
showHelloButtonText=Say Hello
helloMsg=Hello {0}

3.5 更新Component.js文件

在组件的元数据部分,我们现在用属性键manifest和值json替换rootView属性。这定义了对描述符的引用,该引用将在组件实例化时自动加载和解析。

我们现在可以完全删除包含资源包的模型实例化的代码行。这是SAPUI5借助描述符中的配置项自动完成的。我们还可以删除对sap/ui/model/resource/ResourceModel和相应的形式参数ResourceModel的依赖,因为我们不会在匿名回调函数中使用它。
在这里插入图片描述

在SAPUI5之前的版本中,应用程序的其他配置设置,如服务配置、根视图和路由配置,必须添加到Component.js文件的metadata部分。从SAPUI5 1.30版本开始,建议在manifest.json中定义这些设置。基于SAPUI5旧版本创建的应用程序仍然使用Component.js文件来完成此目的 ( 这种方式仍然支持,但不再推荐 )。

改动后的Component.js文件内容如下:

sap.ui.define([
    "sap/ui/core/UIComponent",
    "sap/ui/model/json/JSONModel"
], function (UIComponent,JSONModel) {
    "use strict";

    return UIComponent.extend("zsapui5.test.Component", {
        metadata: {
            "interfaces": ["sap.ui.core.IAsyncContentCreation"],
            "manifest": "json"
        },

        init() {
            //call  the init function of the parent
            UIComponent.prototype.init.apply(this, arguments);

            //set data model
            const oData = {
                recipient : {
                    name: "World"
                }
            };
            const oModel = new JSONModel(oData);
            this.setModel(oModel);
        }
    });
});

3.4 运行

运行改动后的程序,效果如下:
在这里插入图片描述

应用程序的运行结果和之前相同,但在代码层级,我们通过mainfest.json文件,对应用程序的代码进行的重构,完成了配置与编码的分离。

4. 小结

本文介绍了SAPUI5中mainfest.json的概念和封装方式,并通过一个示例展示了其用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1907676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用Vue3创建在线三维模型展示?

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 代码相关的技术博客 代码应用场景介绍 本段代码使用 RoughJS 库在 HTML5 Canvas 上创建了手绘风格的图像&#xff0c;展示了 RoughJS 库的强大功能&#xff0c;可用于创建具有有机手绘外观的图形。 代码基本…

2024已过半,还没试过在vue3中使用ioc容器吗?

Vue3 已经非常强大和灵活了&#xff0c;为什么还要引入 IOC 容器呢&#xff1f;IOC 容器离不开 Class&#xff0c;那么我们就从 Class 谈起 Class的应用场景 一提起 Class&#xff0c;大家一定会想到这是 Vue 官方不再推荐的代码范式。其实&#xff0c;更确切的说&#xff0c…

基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

二次元转向SLG,B站游戏的破圈之困

文 | 螳螂观察 作者 | 夏至 2023年是B站游戏的滑铁卢&#xff0c;尽管这年B站的游戏营收还有40多亿&#xff0c;但相比去年大幅下降了20%&#xff0c;整整少了10亿&#xff0c;这是过去5年来的最大跌幅&#xff0c;也是陈睿接管B站游戏业务一年以来&#xff0c;在鼻子上碰的第…

[每周一更]-(第104期):Go中使用Makefile的经验

文章目录 1. 项目结构2. Makefile的基础知识什么是 Makefile 3. Go项目的Makefile示例4. 详细解释每个Makefile目标5. 使用Makefile执行常见任务 在Go项目中&#xff0c;使用Makefile可以简化和自动化常见的开发和部署任务&#xff0c;如编译、测试、格式化和清理。深入认识及实…

opencv 鱼眼图像的矫正(动态参数调整)

一&#xff1a;棋盘校准参数说明(内参) 棋盘校准的方法及代码很多&#xff0c;参见其他连接 1&#xff1a;内参矩阵 2&#xff1a;畸变系数 针对鱼眼相机此处是4个参数&#xff0c;在其校准代码中也可以知道&#xff0c;其通常的定义如下&#xff1a; data.camera_mat np.e…

Jenkins 强制杀job

有时候有的jenkins job运行时间太长&#xff0c;在jenkins界面点击x按钮进行abort&#xff0c;会失败&#xff1a; 这时候点击&#xff1a; “Click here to forcibly terminate running steps” 会进一步kill 任务&#xff0c;但是也还是有杀不掉的可能性。 终极武器是jenkin…

降Compose十八掌之『飞龙在天』| Layout

公众号「稀有猿诉」 原文链接 降Compose十八掌之『飞龙在天』| Layout 页面布局是GUI应用开发的核心&#xff0c;决定着一个UI具体如何实现。今天将延着路线图来练习『降Compose十八掌』的第二招式&#xff0c;学习一下如何使用Compose中的布局来构建页面。 基础骨架 基…

成长过程,摔倒不要紧,爬起来、改过、前进

无论何时何地&#xff0c;我们都有重头再来的能力&#xff0c;这份生生不息的力量来自天之灵根&#xff1b; 学习过程会有跌倒&#xff0c;这是很正常的节奏次序&#xff0c;不能掩盖自己的过失、自欺欺人&#xff0c;这不是过失&#xff0c;摔倒了就拍拍身上的灰尘&#xff…

3 个令人惊艳的 AI 开源工具,诞生了!

大家好&#xff0c;今天继续聊聊 AI 科技圈发生的那些事。分享几个最新好玩、实用的AI工具。更多最新技术&#xff0c;文末加入我们。 LivePortrait LivePortrait&#xff1a;一款可以轻松让一幅肖像栩栩如生的工具 它可以精准操控眼睛和嘴唇动作&#xff1a; 让静态照片变为…

关于在自行封装的组件库中(使用vue-class-component)使用Vue-i18n无法正常翻译的解决办法

文章目录 介绍背景现象1解决办法 现象2原因分析解决办法 最终方案 介绍 大家或多或少都用过别人封装的组件库&#xff0c;甚至有人或者公司内有自行封装的一些公用组件库&#xff0c;而国际化翻译现在已经是各大项目中必不可少的一个插件了&#xff0c;但组件库中使用 i18n 进…

AI视频创作一条龙!达摩院“寻光”平台炸场WAIC,突破可控编辑难题

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…

基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现(6000字以上论文参考)

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

正态、威布尔、指数分布、伽马分布、对数正态分布介绍

目录 正态、威布尔、指数分布、3.1 概念介绍概率密度函数&#xff08;PDF&#xff09;累积分布函数&#xff08;CDF&#xff09;性质应用 3.2 参数及绘图参数概率密度函数&#xff08;PDF&#xff09;累积分布函数&#xff08;CDF&#xff09;绘图图像解读 3.3 指数分布拟合代码…

Java面经知识点汇总版

Java面经知识点汇总版 算法 14. 最长公共前缀&#xff08;写出来即可&#xff09; Java 计算机基础 数据库 基础 SQL SELECT first_name, last_name, salary FROM employees WHERE department Sales AND salary > (SELECT AVG(salary)FROM employeesWHERE department Sal…

阶段三:项目开发---大数据开发运行环境搭建:任务6:安装配置HBase

任务描述 知识点&#xff1a;安装配置HBase 重 点&#xff1a; 安装配置HBase 难 点&#xff1a;无 内 容&#xff1a; 本阶段任务是安装配置HBase&#xff0c;实时飞行数据是保存在HBase中的&#xff0c;因为HBase具有高效的读写能力&#xff0c;在当前项目中我们是…

网络资源模板--Android Studio 外卖点餐App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 原创外卖点餐&#xff1a;基于Android studio 实现外卖(点)订餐系统 非原创奶茶点餐&#xff1a;网络资源模板--基于 Android Studio 实现的奶茶点餐App报告 一、项目演示 网络资源模板--基于Android …

通义千问Qwen-VL-Chat大模型本地部署(一)

目录 前言 环境准备 软件安装 其它库安装启动项目 FASTAPI 小结 前言 人工智能大模型是一种能够利用大数据和神经网络来模拟人类思维和创造力的人工智能算法。它利用海量的数据和深度学习技术来理解、生成和预测新内容&#xff0c;通常情况下有数十亿乃至数百亿个参数&#xf…

关于Web开发的详细介绍

目录 一、什么是Web&#xff1f; 二、Web网站的工作流程和开发模式 &#xff08;1&#xff09;简单介绍 &#xff08;2&#xff09;工作流程 1、第一步 2、第二步 &#xff08;3&#xff09;Web网站的开发模式 1、前后端分离开发模式 ​编辑2、混合开发模式 三、开发W…

36.哀家要长脑子了!--前缀和差分

前缀和 1.一维的795. 前缀和 - AcWing题库 前缀和公式 s[i] a[1] a[2] a[3] ... a[i] 即 s[i] s[i-1] a[i] #include<iostream> using namespace std;const int N 1e5 10; int a[N], s[N];int main(){int m, n;cin >> n >> m;for(int i 1; i <…