1

我有两个应用程序:

  • hrportalcore : BaseController 的核心应用,...
  • hrportalrequestleave:从 hrportalcore 应用程序扩展的示例应用程序

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

[...]
"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 中

4

2 回答 2

1

解决方案

hrportalcore 的 manifest.jsonapplicationVersion :始终使用您在属性中部署在 HCP 上的最新版本:

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

hrportalrequestleave(扩展项目)的 manifest.json:如上,始终使用您在applicationVersion属性中部署在 HCP 上的最新版本。

找不到数据源?!

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

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

于 2017-01-18T09:16:27.833 回答
0

日志中的错误

“应用程序依赖 de.example.core.Component 中的错误:未找到描述符”

建议 manifest.json 包含对“de.example.core.Component”而不是“de.example.core”的依赖。根据您的代码片段,“扩展”依赖项是正确的。你有其他依赖吗?

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

如果您的 manifest.json 看起来不错,但过去可能包含错误的依赖项,则可能需要重新运行 AppIndex(或安排它定期运行)。

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

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

于 2017-01-05T08:37:23.450 回答