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

时间:2016-12-06 16:23:32

标签: sapui5 hana-cloud-platform

我有两个应用程序:

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

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

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

可以在扩展应用程序中使用数据源而不会出现任何问题,但控制台会出现以下错误:

enter image description here

它说数据源包含错误,但它可以使用(奇怪吗?)。

另一件事是,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

2 个答案:

答案 0 :(得分:0)

日志中的错误

  

&#34;应用程序依赖项中的错误de.example.core.Component:未找到描述符&#34;

表明manifest.json包含对&#34; de.example.core.Component&#34;的依赖关系。而不是&#34; de.example.core&#34;。根据你的代码片段,&#34;扩展&#34;依赖是正确的。你有其他依赖吗?

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

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

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

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

答案 1 :(得分:0)

解决方案

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

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

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

找不到DataSource?!

如果您有扩展项目(如hrportalrequestleave&lt; hrportalcore),则两个应用程序的 manifest.json 将合并为jQuery.extend(...)。所有属性都期望sap.app树,因为它实际描述了应用程序,无法从父扩展中复制。

现在,当您使用父扩展程序中的dataSource时,将无法找到它。这意味着,您必须在扩展项目 manifest.json 中定义sap.app.dataSources