Развертывание приложения ui5 на панели запуска при использовании шаблона приложения fiori
У нас есть следующая среда разработки для Fiori:
Шлюз 7.4
Серверная часть: Sap Netweaver 7.4 SP15
Локальная веб-IDE с версией Orion 160811
У нас нет HCP, наш шлюз является локальным в нашей сети, у нас также нет веб-диспетчера или Sap Router, что означает, что мы не можем развернуть напрямую из Web IDE, и вместо этого мы должны сделать это вручную, загрузив папку к шлюзу.
Мы создали приложение с нуля в Web IDE и экспортировали его в формате zip для развертывания в панели запуска. В этом случае все прошло хорошо, мы добавили приложение в список изменений или воспользовались автономным URL, чтобы проверить его работоспособность.
Проблема заключается в том, что мы создаем приложение Fiori Worklist Template из Web IDE, а затем пытаемся развернуть его так же, как и другое приложение.
Когда мы запускаем автономный URL-адрес приложения, мы получаем следующую ошибку JavaScript:
Uncaught TypeError: Cannot read property 'createRenderer' of undefined.
Наш flpSandbox.html выглядит следующим образом (без тегов html):
<script>
window["sap-ushell-config"] = {
defaultRenderer : "fiori2",
renderers: {
fiori2: {
componentData: {
config: {
search: "hidden"
}
}
}
},
applications: {
"Notastest1-display": {
additionalInformation: "SAPUI5.Component=appnotatest",
applicationType: "URL",
url: "../",
description: "Despliegue de Notas Alumnos.",
title: "Calificaciones Mobile"
}
}
};
</script>
<script src="../test-resources/sap/ushell/bootstrap/sandbox.js" id="sap-ushell-bootstrap"></script>
<!-- Bootstrap the UI5 core library -->
<script id="sap-ui-bootstrap"
src="../resources/sap-ui-core.js"
data-sap-ui-libs="sap.ushell, sap.collaboration"
data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-compatVersion="edge"
data-sap-ui-resourceroots='{"appnotatest": "../"}'
data-sap-ui-frameOptions='allow'> // NON-SECURE setting for testing environment
</script>
<script>
sap.ui.getCore().attachInit(function() {
// initialize the ushell sandbox component
sap.ushell.Container.createRenderer().placeAt("content");
});
</script>
Наш Манифест:
{
"_version": "1.3.0",
"sap.app": {
"_version": "1.3.0",
"id": "appnotatest",
"type": "application",
"i18n": "i18n/i18n.properties",
"title": "{{appTitle}}",
"description": "{{appDescription}}",
"applicationVersion": {
"version": "1.0.0"
},
"dataSources": {
"mainService": {
"uri": "/sap/opu/odata/sap/ZNOTAS3_SRV/",
"type": "OData",
"settings": {
"odataVersion": "2.0",
"localUri": "localService/metadata.xml"
}
}
},
"sourceTemplate": {
"id": "sap.ui.ui5-template-plugin.1worklist",
"version": "1.36.2"
}
},
"sap.ui": {
"_version": "1.3.0",
"technology": "UI5",
"icons": {
"icon": "sap-icon://task",
"favIcon": "",
"phone": "",
"phone@2": "",
"tablet": "",
"tablet@2": ""
},
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
},
"supportedThemes": [
"sap_hcb",
"sap_bluecrystal"
]
},
"sap.ui5": {
"_version": "1.3.0",
"rootView": {
"viewName": "appnotatest.view.App",
"type": "XML",
"id": "app"
},
"dependencies": {
"minUI5Version": "1.36.0",
"libs": {
"sap.ui.core": {
"minVersion": "1.36.0"
},
"sap.m": {
"minVersion": "1.36.0"
},
"sap.ushell": {
"minVersion": "1.36.0"
},
"sap.collaboration": {
"minVersion": "1.36",
"lazy": true
}
}
},
"resources": {
"css": [
{
"uri": "css/style.css"
}
]
},
"contentDensities": {
"compact": true,
"cozy": true
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "appnotatest.i18n.i18n"
}
},
"": {
"dataSource": "mainService",
"settings": {
"metadataUrlParams": {
"sap-documentation": "heading"
}
}
}
},
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "appnotatest.view",
"controlId": "app",
"controlAggregation": "pages",
"bypassed": {
"target": [
"notFound"
]
},
"async": true
},
"routes": [
{
"pattern": "",
"name": "worklist",
"target": [
"worklist"
]
},
{
"pattern": "EntityAsignaturasSet/{objectId}",
"name": "object",
"target": [
"object"
]
}
],
"targets": {
"worklist": {
"viewName": "Worklist",
"viewId": "worklist",
"viewLevel": 1
},
"object": {
"viewName": "Object",
"viewId": "object",
"viewLevel": 2
},
"objectNotFound": {
"viewName": "ObjectNotFound",
"viewId": "objectNotFound"
},
"notFound": {
"viewName": "NotFound",
"viewId": "notFound"
}
}
}
}
}
И последнее, но не менее важное, это наш component.js:
sap.ui.define([
"sap/ui/core/UIComponent",
"sap/ui/Device",
"appnotatest/model/models",
"appnotatest/controller/ErrorHandler"
], function (UIComponent, Device, models, ErrorHandler) {
"use strict";
return UIComponent.extend("appnotatest.Component", {
metadata : {
manifest: "json"
},
/**
* The component is initialized by UI5 automatically during the startup of the app and calls the init method once.
* In this function, the FLP and device models are set and the router is initialized.
* @public
* @override
*/
init : function () {
// call the base component's init function
UIComponent.prototype.init.apply(this, arguments);
// initialize the error handler with the component
this._oErrorHandler = new ErrorHandler(this);
// set the device model
this.setModel(models.createDeviceModel(), "device");
// set the FLP model
this.setModel(models.createFLPModel(), "FLP");
// create the views based on the url/hash
this.getRouter().initialize();
},
/**
* The component is destroyed by UI5 automatically.
* In this method, the ErrorHandler is destroyed.
* @public
* @override
*/
destroy : function () {
this._oErrorHandler.destroy();
// call the base component's destroy function
UIComponent.prototype.destroy.apply(this, arguments);
},
/**
* This method can be called to determine whether the sapUiSizeCompact or sapUiSizeCozy
* design mode class should be set, which influences the size appearance of some controls.
* @public
* @return {string} css class, either 'sapUiSizeCompact' or 'sapUiSizeCozy' - or an empty string if no css class should be set
*/
getContentDensityClass : function() {
/*if (this._sContentDensityClass === undefined) {
// check whether FLP has already set the content density class; do nothing in this case
if (jQuery(document.body).hasClass("sapUiSizeCozy") || jQuery(document.body).hasClass("sapUiSizeCompact")) {
this._sContentDensityClass = "";
} else if (!Device.support.touch) { // apply "compact" mode if touch is not supported
this._sContentDensityClass = "sapUiSizeCompact";
} else {
// "cozy" in case of touch support; default for most sap.m controls, but needed for desktop-first controls like sap.ui.table.Table
this._sContentDensityClass = "sapUiSizeCozy";
}
}
return this._sContentDensityClass;*/
}
});
}
);
Мы пытаемся создать еще один index.html, чтобы решить проблему создания отрисовки. Мы решили ошибку, но приложение по-прежнему не работает, оно показывает только панель запуска без плитки. Имейте в виду, что когда мы тестируем приложение из локальной веб-среды разработки, сначала открывается панель запуска с плиткой приложения.
Большое спасибо за Вашу помощь.
1 ответ
Это может быть проблема, связанная с версией UI5 в вашей системе Netweaver. Чтобы проверить эту теорию, запустите приложение в Web IDE с той же версией UI5 в вашей системе Netweaver, чтобы увидеть, возникает ли та же ошибка.
Чтобы добиться этого, в Web IDE щелкните правой кнопкой мыши свой проект -> Выполнить -> Выполнить настройки... -> выберите существующую конфигурацию запуска или добавьте новую -> вкладка дополнительных настроек -> измените версию ui5 на ту же, что работает в вашей системе Netweaver -> сохранить и запустить.
Если вы столкнулись с той же проблемой, скорее всего, вам нужно обновить версию UI5 в вашей системе Netweaver или попытаться обойти эту проблему в приложении UI5.