«this.getService не является функцией» при динамическом изменении заголовка SAP Fiori - PullRequest
3 голосов
/ 20 сентября 2019

Я пытаюсь динамически изменить заголовок SAP Fiori, т. Е. После запуска панели запуска и после того, как я нажму на выбранное приложение, название приложения должно измениться в зависимости от того, что я хочу.Я использую эту страницу документа в качестве руководства https://ui5.sap.com/1.54.3/docs/api//symbols/sap.ushell.ui5service.ShellUIService.html.

Внутри моего webapp/Component.js у меня есть метод setAppTitle(), который должен установить новый пользовательский заголовок для приложения и вызывается из onAfterRendering()метод webapp/view/S2Custom.controller.js.

Причина, по которой я не могу вызвать setAppTitle() напрямую из init() метода webapp/Component.js, заключается в том, что я получаю свои титры от webapp/i18n/i18n.properties, который еще не "загружен" во время Component.js 's init().

Чтобы не использовать что-то вроде setTimeout(() => this.setAppTitle(sTitle), 6000) внутри Component.js, я решил вызвать его из onAfterRendering() метода webapp/view/S2Custom.controller.js.

webapp /view / S2Custom.controller.js

onAfterRendering: function (oEvent) {
  var sComponentId = sap.ui.core.Component.getOwnerIdFor(this.getView());
  var oComponent = sap.ui.component(sComponentId);
  var i18nModel = new sap.ui.model.resource.ResourceModel({
    bundleName: "ui.s2p.srm.sc.blahblah.BlahBlahExtension.i18n.i18n"
  });
  var oResource = i18nModel.getResourceBundle();
  var sTitle = oComponent.getModel("appModel").getProperty("/sMode") === "OUTBOX" ? oResource.getText("APP_ONE") : oResource.getText("APP_TWO");
  this.getOwnerComponent().setAppTitle(sTitle);
},

webapp / Component.js

setAppTitle: function (sText) {
  var sTitle = sText;
  console.log("TEST: ", this.getService("ShellUIService")); // ERROR !!!
  try {
    this.getService("ShellUIService").then(function (oService) {
      oService.setTitle(sTitle);
    }, function (oError) {
      jQuery.sap.log.error("Cannot get ShellUIService");
    });
  } catch (err) {
    console.log("TEST - ERROR: ", err);
  }
},

Проблема в методе setAppTitle() - консоль выдает ошибку:

this.getService не является функцией.

Итак, я вошел в свой manifest.json

"sap.ui5": {
  "_version": "1.2.0",
  "services": {
    "ShellUIService": {
      "factoryName": "sap.ushell.ui5service.ShellUIService"
    }
  },
  "dependencies": {
    "minUI5Version": "1.28.5",
    "libs": {}
  },

Я заметил, что в веб-среде IDE Свойство "services"не допускается ошибка в строке, которая содержит "services": {.

Можете ли вы сказать мне, что вызывает эту проблему?Я уже пытался вызвать this.getService("ShellUIService") один внутри Component.js init() метода, к сожалению, та же ошибка

this.getService не является функцией.

1 Ответ

1 голос
/ 20 сентября 2019

Вы должны использовать старую версию UI5. API component.getService доступно только с 1.37.0:

sapui5 sap.ui.core.Component#getService

Вы можете проверитьтекущую версию, введя sap.ui.version в консоли браузера.


О сообщении об ошибке Web IDE ..

Я заметил, что в Web IDE отображаются службы Property ""не допускается ошибка в строке, которая содержит "services": {.

  1. Если возможно, обновите ресурсы UI5 до одной из поддерживаемых в настоящее время версий .
  2. За исключением корня _version, удалите все остальные _version s в sap.app, sap.ui5 и т. Д.
  3. Установите корень _version что-то выше, чем 1.3.0 в соответствии с таблицей Выпуск AppDescriptor и версия SAPUI5 .
  4. Перезагрузить веб-IDE.
...