Расширенный файл дескриптора приложения и недопустимый источник данных

У меня есть два приложения:

  • 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 один раз загружается не с того места. Приложение работает без проблем, но оно, как говорится, один раз загружается не с того места?

Мой manifest.json hrportalrequestleave выглядит в части расширения (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"
    }
});

Все это происходит на панели запуска Fiori облачной платформы HANA


person Matthias Günter    schedule 06.12.2016    source источник
comment
Просто для уточнения: Само приложение работает без проблем и правильно отображает ваши данные? Ваш вопрос касается только этих сообщений об ошибках в журнале консоли?   -  person    schedule 07.12.2016
comment
Да, приложение работает, да и лог консоли.   -  person Matthias Günter    schedule 07.12.2016


Ответы (2)


Решение

manifest.json hrportalcore: всегда используйте актуальную версию, которую вы развернули на своем HCP в свойстве applicationVersion:

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

manifest.json hrportalrequestleave (проект расширения): как и выше, всегда используйте актуальную версию, которую вы развернули на своем HCP в свойстве applicationVersion.

Источник данных не найден?!

Если у вас есть проект расширения (например, hrportalrequestleave ‹ hrportalcore), то manifest.json обоих приложений объединяется, как jQuery.extend(...). Все свойства, за исключением дерева sap.app, потому что оно действительно описывает приложение и не может быть скопировано из родительского расширения.

Теперь, когда вы используете dataSource из родительского расширения, оно не будет найдено. Это означает, что вы должны определить sap.app.dataSources в проекте расширения manifest.json.

person Matthias Günter    schedule 18.01.2017

Ошибка в журнале

«Ошибка в зависимости приложения de.example.core.Component: дескриптор не найден»

предполагает, что manifest.json содержит зависимость от «de.example.core.Component» вместо «de.example.core». Согласно вашим фрагментам кода, зависимость «расширяет» верна. У вас есть другие зависимости?

AppIndex в серверной части вычисляет транзитивное закрытие зависимостей, и если он не может найти установку с этим идентификатором, создается и регистрируется вышеуказанная ошибка на стороне клиента.

Если ваш manifest.json выглядит нормально, но в прошлом он мог содержать неверную зависимость, возможно, потребуется повторно запустить AppIndex (или запланировать его регулярный запуск).

Тот факт, что приложение работает, несмотря на ошибку конфигурации, вызван кодом, который вы показали выше. Он явно загружает компонент de.example.core из явно рассчитанного URL-адреса. Но до этого шага фреймворк уже пытается загрузить его, основываясь на информации в manifest.json, а там информация о явном URL-адресе отсутствует.

Кстати: код, который вычисляет URL-адрес, предполагает, что даже после исправления manifest.json AppIndex может не найти компонент, поскольку он, по-видимому, хранится в подпакете приложения de.example.request.leave. Не уверен, что AppIndex может справиться с этим (он может обрабатывать вложенные компоненты, если они перечислены как встроенные компоненты в файле manifest.json верхнего уровня, но я не уверен, распознает ли он такие встроенные компоненты в разделе зависимостей. В результате он может попытаться загрузить встроенный компонент, хотя он уже был загружен вместе с окружающим компонентом.

person codeworrior    schedule 05.01.2017
comment
Спасибо за ваш ответ. Нет, других зависимостей у меня нет. У вас есть пример того, как должно выглядеть расширение manifest.json? - person Matthias Günter; 10.01.2017