Расширение приложений SAPUI5

Я попытался ознакомиться с расширением приложений SAPUI5. Для этого я использовал splitapp в папке test-resources/sap/m/demokit

Как указано в Руководстве разработчика — Расширение приложений SAPUI5, вам нужно только создать Component.js для проекта пользовательского приложения. Теперь есть 2 вопроса:

  1. Как вы можете загрузить расширенное приложение без index.html?
  2. Как вы решаете проблемы с относительным путем (например, внутри функции createContent)?

Мое текущее решение состоит в том, чтобы скопировать index.html из splitapp, вставить его в splitapp-ext и изменить все пути... но это решение не кажется очень модульный:

оригинальный index.html (разделенное приложение):

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv='X-UA-Compatible' content='IE=edge' />
    <meta charset="UTF-8">

    <title>'sap.m.SplitApp' Demo Application</title>

    <script id='sap-ui-bootstrap' type='text/javascript'
        src='../lib/openui5/resources/sap-ui-core.js'
            data-sap-ui-theme='sap_bluecrystal'
            data-sap-ui-libs='sap.m'
            data-sap-ui-resourceroots='{
                "res": "./",
                "sap.ui.demo.splitapp" : "./",
                "view" : "./view",
                "model" : "./model",
                "util" : "./util"
        }' >
    </script>

    <link rel="stylesheet" type="text/css" href="css/style.css">

    <script>    
        new sap.m.Shell("Shell", {
            title : "sap.m splitapp",
            showLogout : false,
            app : new sap.ui.core.ComponentContainer({
                name : 'sap.ui.demo.splitapp'
            }),
            homeIcon : {
                'phone' : 'img/57_iPhone_Desktop_Launch.png',
                'phone@2' : 'img/114_iPhone-Retina_Web_Clip.png',
                'tablet' : 'img/72_iPad_Desktop_Launch.png',
                'tablet@2' : 'img/144_iPad_Retina_Web_Clip.png',
                'favicon' : 'img/favicon.ico',
                'precomposed': false
            }
        }).placeAt('content');
    </script>

</head>
<body class='sapUiBody' id="content">
</body>
</html>

измененный index.html (splitapp-ext):

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv='X-UA-Compatible' content='IE=edge' />
    <meta charset="UTF-8">

    <title>'sap.m.SplitApp' Demo Application</title>

    <script id='sap-ui-bootstrap' type='text/javascript'
        src='../lib/openui5/resources/sap-ui-core.js'
            data-sap-ui-theme='sap_bluecrystal'
            data-sap-ui-libs='sap.m'
            data-sap-ui-resourceroots='{
                "res": "../splitapp",
                "sap.ui.demo.splitapp" : "../splitapp",
                "view" : "../splitapp/view",
                "model" : "../splitapp/model",
                "util" : "../splitapp/util"
        }' >
    </script>

    <link rel="stylesheet" type="text/css" href="../splitapp/css/style.css">

    <script>    
        new sap.m.Shell("Shell", {
            title : "sap.m splitapp",
            showLogout : false,
            app : new sap.ui.core.ComponentContainer({
                name : 'sap.ui.demo.splitapp'
            }),
            homeIcon : {
                'phone' : 'img/57_iPhone_Desktop_Launch.png',
                'phone@2' : 'img/114_iPhone-Retina_Web_Clip.png',
                'tablet' : 'img/72_iPad_Desktop_Launch.png',
                'tablet@2' : 'img/144_iPad_Retina_Web_Clip.png',
                'favicon' : 'img/favicon.ico',
                'precomposed': false
            }
        }).placeAt('content');
    </script>

</head>
<body class='sapUiBody' id="content">
</body>
</html> 

Для 2. вопроса у меня нет модульного решения. Анонимная функция createContent внутри Component.js splitapp определяет относительный путь к JSON-моделям. Модели не могут быть найдены внутри приложения splitapp-ext. Единственный способ, который я нашел, это изменить Component.js:

createContent : function () {
    // create root view
    var oView = sap.ui.view({
        id : "app",
        viewName : "view.App",
        type : "JS",
        viewData : { component : this }
    });

    // --> WORKAROUND: add the module path to the JSON-paths
    var rootPath = jQuery.sap.getModulePath("sap.ui.demo.splitapp");

    // set navigation model
    // load the global data model
    var oJSONDataModel = new sap.ui.model.json.JSONModel(rootPath + "/model/data.json");
    oView.setModel(oJSONDataModel);

    // load the global image source model
    var oImgModel = new sap.ui.model.json.JSONModel(rootPath + "/model/img.json");
    oView.setModel(oImgModel, "img");

    // done
    return oView;
}

Есть ли лучший способ расширить приложение SAPUI5?


person Rene Kaesler    schedule 26.03.2015    source источник


Ответы (2)


Вы можете попробовать расширение приложения с помощью SAP Web IDE. Вы можете найти пробные ссылки на SAP SCN. Вся идея подхода, основанного на компонентах, состоит в том, чтобы позволить запускать приложения в более широком контексте, таком как панель запуска Fiori. Если вы хотите протестировать его локально, вы можете настроить локальную песочницу панели запуска по этой ссылке: Настройте локальную панель запуска Fiori.

person May13ank    schedule 12.06.2015

Можно запустить локальную тестовую версию панели запуска (с ограничениями).

первые три результата поиска

подробная вики

Что касается второго вопроса, помните, что управление ищет модель, соответствующую пути привязки внутри себя, позже в родителях, и всплывает до ядра. Таким образом, установка модели на один вид - не лучший вариант. Вы можете установить модель непосредственно в Component.js, так как все приложение имеет доступ к нему, или только для тестирования, к ядру - sap.ui.getCore().setModel(myModel). Это пример из документации пользовательского интерфейса правильного определения Component.js с назначенными моделями (для версии 1.30, для предыдущих вы, вероятно, не будете использовать «определить»):

sap.ui.define([
   "sap/ui/core/UIComponent",
   "sap/ui/model/json/JSONModel",
   "sap/ui/model/resource/ResourceModel"
], function (UIComponent, JSONModel, ResourceModel) {
   "use strict";
   return UIComponent.extend("sap.ui.demo.wt.Component", {
      metadata : {
            manifest: "json"
      },
      init : function () {
         // call the init function of the parent
         UIComponent.prototype.init.apply(this, arguments);
         // set data model
         var oData = {
            recipient : {
               name : "World"
            }
         };
         var oModel = new JSONModel(oData);
         this.setModel(oModel);

         // set i18n model
         var i18nModel = new ResourceModel({
            bundleName : "sap.ui.demo.wt.i18n.i18n"
         });
         this.setModel(i18nModel, "i18n");
      }
   });
});

Аналогичный образец, задокументированный в openui5, вы можете найти здесь:

пример компонента и модели

person Andrew Koeller    schedule 25.06.2015