Создание Web приложения с помощью фреймворка SAPUI5 (8)
Продолжая тему последней заметки, хочу обратить ваше внимание на еще один вариант подключения OData сервиса к SAPUI5 приложению, а также продемонстрировать использование контрола, который может помочь сделать ожидание пользователя от созерцания выполняемого запроса в backend систему, если можно так сказать, несколько "интерактивнее".
Manifest.json
В структуре проекта SAP WebIDE есть незаметный файл, играющий довольно значительную роль в настройке работы вашего приложения. Наименование этого файла - manifest.json
См. Descriptor for Applications, Components, and Libraries
Чтобы определить путь до OData сервиса, вызов которого требуется выполнить, в области имен sap.ui необходимо определить атрибут dataSources
"dataSources": {
"zdemo_app": {
"uri": "/sap/opu/odata/SAP/ZDEMO_APP1_SRV/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
}
Чтение manifest.json из контроллера
Исходный код контроллера для чтения нужного мне атрибута manifest.json
onInit: function() {
var sServiceUrl = this.getOwnerComponent().getMetadata().getManifestEntry("sap.app").dataSources["zdemo_app"].uri;
var OdataModel = new sap.ui.model.odata.v2.ODataModel(sServiceUrl);
var oModel = new sap.ui.model.json.JSONModel();
var sPath = "/PersonSet";
OdataModel.read(sPath, {
success: function(oData, response) {
oModel.setData(oData);
}
});
this.getView().setModel(oModel, "person");
}
См. getOwnerComponent
Деплоим, запускаем
BusyDialog
Период времени в течение которого выполняется загрузка данных OData сервиса можно обыграть для пользователя, используя элемент BusyDialog.
Исходный код контроллера изменится следующим образом:
onInit:function (){
this._oBusyDialog = new sap.ui.core.BusyIndicator.show(0);
var sServiceUrl = this.getOwnerComponent().getMetadata().getManifestEntry("sap.app").dataSources["zdemo_app"].uri;
var OdataModel = new sap.ui.model.odata.v2.ODataModel(sServiceUrl);
var oModel = new sap.ui.model.json.JSONModel();
var sPath = "/PersonSet";
OdataModel.read(sPath, {
success: function(oData, response) {
if (this._oBusyDialog) {
sap.ui.core.BusyIndicator.hide();
}
oModel.setData(oData);
}.bind(this)
});
this.getView().setModel(oModel, "person");
}
Деплоим, запускаем
В момент выполнения загрузки появится так называемый "бизи" индикатор