Смена приложения в Fiori Launchpad (Hash change). Замена заголовка в Fiori Launchpad.

Привет!
Поделюсь опытом в реализации отслеживания смены приложений в Fiori Launchpad и замены заголовка окна и заголовка в Fiori Launchpad в зависимости от открытого приложения.

Отслеживание смены приложений в Fiori Launchpad (Hash change).

При переходе из одного приложения в другое иногда бывает необходимо отслеживать путь перемещения, целевую страницу и т. п.

На просторах интернета гуляет конструкция с HashChanger:

var oHashChanger = HashChanger.getInstance();
oHashChanger.init();
oHashChanger.attachEvent("hashSet", function(oEvent) {
	alert(oEvent.getParameter("newHash") + "," + oEvent.getParameter("oldHash"));
});

Но у меня что-то не заработало. Поэтому реализовал другим способом:

window.addEventListener("hashchange", function(oEvent) {
 
	//var hash = oComp._getHashFromUrl(oEvent.newURL); //в IE так не работает
	var hash = oComp._getHashFromUrl(oEvent.srcElement.location.hash);
});

где _getHashFromUrl это:

_getHashFromUrl: function(url) {
	var arr = url.split("#");
	arr = arr[1].split("?");
	return arr[0];
},

Каждый раз при смене приложения будет отрабатывать блок внутри addEventListener(«hashchange», function(oEvent), в котором мы получаем hash и можем по нему, например, сделать запрос в бэкенд и получить новый актуальный заголовок приложения.

Замена заголовка (title) в Fiori Launchpad.

Зайдем в Fiori Launchpad (https://sapui5.hana.ondemand.com/test-resources/sap/ui/demoapps/demokit/worklist/webapp/test/flpSandboxMockServer.html#Shell-home) и посмотрим на то, что мы будем пытаться менять.

title sapui5

Сам текст «Начальная страница» прописан в https://sapui5.hana.ondemand.com/resources/sap/ushell/renderers/fiori2/resources/resources_ru_RU.properties.
Можно поменять его в файле, но мы пойдем другим путем и будем его менять из плагина:

init: function() {
	var oComp = this;
	var rendererPromise = this._getRenderer();
	//var rendererExt = sap.ushell.renderers.fiori2.RendererExtensions;
	jQuery.sap.includeStyleSheet("/sap/bc/ui5_ui5/sap/Z_OUR_APP/css/style.css");
	rendererPromise.then(function(oRenderer) {
 
		//Получим хеш из url	
		var sQueryString = window.location.href.toUpperCase();
		var app = oComp._getHashFromUrl(sQueryString);
 
		//Получим модель с разными настройками шела	
		oComp._oMdl = oRenderer.shellCtrl.getModel();
 
		//Наш новый заголовок	
		var str = "Новая начальная страница";
 
		//Если загрузился Fiori Launchpad 
		if (app === "SHELL-HOME") {
			//Заголовок Fiori Launchpad  текущего окна
			oComp._oMdl.setProperty("/currentState/application/title", str);
 
			//Заголовок окна
			window.document.title = str;
		}
 
		//Поменяем заголовок в модели (там, где я его нашел :) ):
		oComp._oMdl.setProperty("/states/home/application/title", str);
		oComp._oMdl.setProperty("/states/blank-home/application/title", str);
		oComp._oMdl.setProperty("/states/embedded-home/application/title", str);
		oComp._oMdl.setProperty("/states/headerless-home/application/title", str);
		oComp._oMdl.setProperty("/states/merged-home/application/title", str);
 
		sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["home_title"] = str;
		sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["FlpSettings_entry_title"] = str;
		sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["actionHomePage"] = str;
		sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["homeBtn_tooltip"] = str;
 
		var userPref = oComp._oMdl.getProperty("/userPreferences/entries");
 
		if ((userPref instanceof Array) && (userPref.length > 0)) {
			for (var i = 0; i < userPref.length; i++) {
				if (userPref[i].entryHelpID === "flpSettingsEntry") {
					userPref[i].title = str;
				}
			}
		}
 
		oComp._oMdl.refresh(true);
 
		//Поменяем заголовок в выпадающем меню:
		if (sap.ui.getCore().byId("shellNavigationMenu")) {
			sap.ui.getCore().byId("shellNavigationMenu").getItems()[0].setTitle(str);
		}
 
		//Если перешли на другое приложение, отслеживаем изменение хеша:
		window.addEventListener("hashchange", function(oEvent) {
 
			//var hash = oComp._getHashFromUrl(oEvent.newURL); //в IE так не работает
			var hash = oComp._getHashFromUrl(oEvent.srcElement.location.hash);
 
			if (hash.toUpperCase() === "SHELL-HOME") {
				window.document.title = str;
				oComp._oMdl.setProperty("/currentState/application/title", str);
			}
 
			sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["home_title"] = str;
			sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["FlpSettings_entry_title"] = str;
			sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["actionHomePage"] = str;
			sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["homeBtn_tooltip"] = str;
		});
	});
},

Может вам пригодиться :).