Урок 3. SAPUI5. SAP Web IDE. Представления (Views).
SAP Web IDE.
До сих пор мы не задумывались о системе разработки и писали все в обычном текстовом редакторе.
Но, когда растет количество проектов, их сложность, количество файлов в проекте, разумно использовать какую-нибудь систему разработки.
Вариантов всего 2:
- Eclipse — довольно старая и хорошо известная система разработки.
- SAP Web IDE — облачная система разработки от Sap. Существует локальная версия Personal Edition (https://tools.hana.ondemand.com/#sapui5)
На самом деле вариант один — SAP Web IDE. Мы будем идти в ногу со временем и выберем облачную систему разработки. По словам самого Sap: «Пакет SAPUI5 Tools for Eclipse уже несколько лет не обновляется и не будет!»
Идем на https://account.hanatrial.ondemand.com/ и регистрируем p-аккаунт.
После регистрации переходим на https://account.hanatrial.ondemand.com/cockpit#/home/overview и выбираем Europe (Rot) — Trial:
Жмем сюда:
Переходим в раздел Services:
Там ищем SAP Web IDE и нажимаем:
На следующей странице ищем ссылочку «Go to Service«.
Добро пожаловать в SAP Web IDE!
А теперь плавно перейдем от прошлого урока и реализуем программу с тремя представлениями (views). Причем одно из них будет XML View, другое Json view, а третье JavaScript view.
Но, писать код мы не будем, а сразу импортируем готовый пример в Web IDE:
В следующем окне вставляем ссылку https://github.com/kannade/views_sapui5.git и жмем Clone.
Файл index.html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | < !DOCTYPE HTML> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta charset="UTF-8"/> <title>sap.training.views</title> <script id="sap-ui-bootstrap" src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js" data-sap-ui-libs="sap.m" data-sap-ui-theme="sap_belize" data-sap-ui-compatVersion="edge" data-sap-ui-resourceroots='{"sap.training": ""}'> </script> <link rel="stylesheet" type="text/css" href="css/style.css"/> <script> var oXMLView = sap.ui.view({ id: "idXMLView", viewName: "sap.training.view.MyXMLView", type: sap.ui.core.mvc.ViewType.XML }); oXMLView.placeAt("content"); var oJSONView = sap.ui.view({ id: "idJSONView", viewName: "sap.training.view.MyJSONView", type: sap.ui.core.mvc.ViewType.JSON }); oJSONView.placeAt("content"); </script> </head> <body class="sapUiBody" id="content"> </body> </html> |
Подключили SapUI5, задали пространство имен sap.training ссылающееся на корневую папку.
Определили два представления:
- oXMLView — представление в xml.
- oJSONView — представление в json.
Файл view/MyJSONView.view.json — JSON представление
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "Type": "sap.ui.core.mvc.JSONView", "controllerName": "sap.training.controller.MyJSONView", "content": [{ "Type": "sap.m.Text", "text": "Текст из JSON view" }, { "Type": "sap.m.CheckBox", "text": "No", "select": "onCBSelect", "id": "idCheckBox" }] } |
Файл view/MyJSView.view.js — JavaScript представление
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | sap.ui.jsview("sap.training.view.MyJSView", { getControllerName: function() { return "sap.training.controller.MyJSView"; }, createContent: function(oController) { var oText = new sap.m.Text({ text: "Текст из js view" }); var oCheckBox = new sap.m.CheckBox(this.createId("idCheckBox"),{ text: "No" }); oCheckBox.attachSelect(oController.onCBSelect, oController); return [oText, oCheckBox]; } }); |
Файл view/MyXMLView.view.xml — XML представление
1 2 3 4 5 6 7 8 9 | <mvc:view controllerName="sap.training.controller.MyXMLView" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:mvc="sap.ui.core.mvc" displayBlock="true" xmlns="sap.m"> <text text="Это xml view" class="sapUiSmallMarginTop"></text> <checkbox id="idCheckBox" select="onCBSelect" text="No"></checkbox> <mvc:jsview id="idJSView" viewName="sap.training.view.MyJSView"></mvc:jsview> </mvc:view> |
Во всех трех представлениях мы добавили sap.m.Text и sap.m.Checkbox, к которому применили событие select (при постановке галочки в чекбоксе будет срабатывать событие onCBSelect из соответствующего контроллера).
В XML представлении view/MyXMLView.view.xml мы вставили JavaScript представление (sap.training.view.MyJSView — {пространство имен sap.training}/view/MyJSView.view.js)
Файл controller/MyJSONView.controller.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | sap.ui.define([ "sap/ui/core/mvc/Controller" ], function(Controller) { "use strict"; return Controller.extend("sap.training.controller.MyJSONView", { onCBSelect: function() { /*@type sap.m.CheckBox */ var oCheckBox = this.getView().byId("idCheckBox"); if (oCheckBox.getSelected()){ oCheckBox.setText("Yes"); } else { oCheckBox.setText("No"); } } }); }); |
Файл controller/MyJSView.controller.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | sap.ui.define([ "sap/ui/core/mvc/Controller" ], function(Controller) { "use strict"; return Controller.extend("sap.training.controller.MyJSView", { onCBSelect: function() { /*@type sap.m.CheckBox */ var oCheckBox = this.getView().byId("idCheckBox"); if (oCheckBox.getSelected()){ oCheckBox.setText("Yes"); } else { oCheckBox.setText("No"); } } }); }); |
Файл controller/MyXMLView.controller.js:
sap.ui.define([ "sap/ui/core/mvc/Controller" ], function(Controller) { "use strict"; return Controller.extend("sap.training.controller.MyXMLView", { onCBSelect: function() { /*@type sap.m.CheckBox */ var oCheckBox = this.getView().byId("idCheckBox"); if (oCheckBox.getSelected()){ oCheckBox.setText("Yes"); } else { oCheckBox.setText("No"); } } }); }); |
Все три контроллера идентичны!
Мы определяем метод onCBSelect.
В котором смотрим, если oCheckBox нажат, то меняем атрибут «текст».
Таким образом в одном проекте можно использовать несколько различных (XML, JS, JSON) представлений.
Это просто пример, в реальных проектах, конечно, все стараются придерживаться одного стиля и реализуют как правило XML представления.
Одна из причин, по которой разработчики выбирают XML — визуальный редактор!
Попробуйте открыть представление в визуальном редакторе:
Здорово? 🙂
Исходники можно скачать по ссылке — https://github.com/kannade/views_sapui5.