问题我用 yarn start 本地启动一个 SAP Fiori Elements 应用,在 Chrome 开发者工具 network 面板,观察到一个 OData metadata 请求的 url 如下: http://localhost:8080/sap/opu/odata/sap/SEPMRA_PROD_MAN/$metadata?sap-value-list=none&sap-language=EN
这个 OData 服务名称 SEPMRA_PROD_MAN ,运行时是如何决定出来的? 查看 Component.js 文件里的函数 Component._createManifestModels : 我们查看变量 mModels , 发现有三个字段: 其中 ""字段的值,来自 manifest.json 文件的 models 区域的同名字段: dataSource 的值指向 mainService ,后者的 uri 字段就是 Fiori Elements 应用运行时,发起 OData 元数据请求的 url:
在 SAP UI5 应用中,manifest.json 文件是一个重要的配置文件。它充当了应用的描述符,定义了应用的元数据、模型、服务、i18n(国际化)等等。我们可以将其看作是一个集中的配置中心,其中所有的配置都在一个地方,使得代码更容易维护,也更容易理解。 在manifest.json 文件中,dataSources 部分是非常重要的一部分,它定义了应用如何连接到后端服务。这个区域可以声明一个或者多个数据源,每一个数据源对应一个后端服务。这些服务可以是 OData 服务,也可以是其他类型的服务。 当我们在manifest.json 文件中定义了数据源后,我们可以在应用的其他部分通过这个数据源的名称来引用这个服务,而不需要记住具体的 URL。这样做的好处是,如果服务的 URL 发生变化,我们只需要在一个地方更新它,而不需要搜索整个代码库来找到所有使用这个服务的地方。 下面是一个manifest.json 文件中dataSources 区域的例子: {
"sap.app": {
"dataSources": {
"mainService": {
"uri": "/sap/opu/odata/sap/ZMAIN_SRV/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
},
"secondService": {
"uri": "/sap/opu/odata/sap/ZSECOND_SRV/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
}
}} 在上面的例子中,我们定义了两个数据源,它们的名字分别是mainService 和secondService 。每个数据源都有一个uri 属性,这个属性定义了服务的 URL。type 属性定义了服务的类型,这里我们使用的是 OData 服务。settings 对象包含了服务的其他配置,比如 OData 的版本。 定义了数据源之后,我们就可以在应用的其他部分使用这个数据源了。例如,我们可以在models 区域定义一个模型,并且将这个模型关联到一个数据源: {
"sap.ui5": {
"models": {
"": {
"dataSource": "mainService",
"preload": true
},
"secondModel": {
"dataSource": "secondService",
"preload": true
}
}
}} 在上面的例子中,我们定义了两个模型,它们分别关联到了我们之前定义的两个数据源。这样,当我们在应用中使用这两个模型时,SAP UI5 会自动的使用对应的数据源连接到后端服务。 总结总的来说,manifest.json 文件中的dataSources 区域是用来定义应用如何连接到后端服务的。它使得服务的配置集中在一个地方,使得代码更易于维护,也更易于理解。
|