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

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

  • 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 Launchpad облачной платформы HANA

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 manifest.json обоих приложений объединяется следующим образом: jQuery.extend(...), Все свойства, ожидайте sap.app дерево, потому что оно действительно описывает приложение и не может быть скопировано из родительского расширения.

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

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

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

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

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

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

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

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

Другие вопросы по тегам