扩展应用程序描述符文件和无效数据源

Extended application descriptor file and invalid datasource

我有两个申请:

hrportalcore 具有命名空间 de.example.core 并且还维护了 dataSources。 (manifest.json 中的sap.app.dataSources)。数据源是:

[...]
"HRPOJavaLeave": {
   "uri": "<path>",
   "type": "OData",
   "settings": {
       "annotations": [],
       "odataVersion": "2.0",
       "localUri": ""
   }
}
[...]

数据源在扩展应用程序中可以正常使用,但控制台出现以下错误:

说数据源有错误,但是可以用(奇怪?)。

另一件事是,Component-preload.js 文件一次从错误的位置加载。该应用程序可以正常运行,但如前所述,它曾从错误的位置加载过一次?

我的 hrportalrequestleave 的 manifest.json 在扩展部分看起来像 (sap.ui5.extends):

[...]
"extends": {
    "component": "de.example.core",
    "extensions": {}
},
[...]

父项在 neo-app.json 中正确定义为 /parent 以显示给 hrportalcore。

jQuery.sap.declare("de.example.request.leave.Component");

// use the load function for getting the optimized preload file if present
if (!jQuery.sap.isDeclared("de.example.core.Component")) {
    sap.ui.component.load({
        name: "de.example.core",
        // Use the below URL to run the extended application when SAP-delivered application is deployed on cloud
        url: jQuery.sap.getModulePath("de.example.request.leave") + "/parent"
            // we use a URL relative to our own component
            // extension application is deployed with customer namespace
    });
}

this.de.example.core.Component.extend("de.example.request.leave.Component", {
    metadata: {
        manifest: "json"
    }
});

这一切都发生在HANA云平台的Fiori Launchpad

日志中的错误

"Error in application dependency de.example.core.Component: No descriptor was found"

表明 manifest.json 包含对 "de.example.core.Component" 的依赖,而不是 "de.example.core"。根据您的代码片段, "extends" 依赖项是正确的。你有其他依赖吗?

后端的 AppIndex 计算依赖项的传递闭包,如果找不到具有该 ID 的安装,则会在客户端创建并记录上述错误。

如果您的 manifest.json 看起来不错,但过去可能包含错误的依赖项,那么可能需要重新 运行 AppIndex(或将其安排为常规 运行).

尽管存在配置错误,但应用程序仍能正常运行,这是由您在上面显示的代码引起的。它从显式计算的 URL 显式加载 de.example.core 组件。但在那一步之前,框架已经根据 manifest.json 中的信息尝试加载它,并且缺少有关显式 URL 的信息。

顺便说一句:计算 URL 的代码表明,即使在修复 manifest.json 之后,AppIndex 也可能找不到该组件,因为它似乎存储在 [= 的子包中31=] 应用程序。不确定 AppIndex 是否可以处理这个(它可以处理嵌套组件,如果它们被列为顶级 manifest.json 中的嵌入式组件,但我不确定它是否识别依赖项部分中的此类嵌入式组件。作为结果它可能会尝试加载嵌入式组件,尽管它已经与封闭组件一起加载了。

解决方案

manifest.json of hrportalcore:始终使用您在 applicationVersion [=43= 中部署在 HCP 上的 up-to-date 版本]:

{
    "_version": "1.2.0",
    "sap.app": {
        "_version": "1.2.0",
        "applicationVersion": {
            "version": "1.6.2"
        },
...

manifest.json of hrportalrequestleave(扩展项目):如上所述,请始终使用您在 applicationVersion 属性.

未找到数据源?!

如果您有扩展项目(如 hrportalrequestleave < hrportalcore),那么两个应用程序的 manifest.json 将像 jQuery.extend(...) 一样合并。所有属性,除了 sap.app 树,因为它真正描述了应用程序并且不能从父扩展复制。

现在,当您使用来自父扩展的 dataSource 时,将找不到它。这对您来说意味着,您必须在扩展项目 manifest.json.

中定义 sap.app.dataSources