[英]WebIDE: How to Create Shell Plugin for Fiori Launchpad?
這是為了:
其他指南包含一些過時的信息,例如不再存在的用於從“模板中的新項目”創建“Fiori Launchpad 插件”的選項
2020 更新
腳步:
.then()
所有內容都添加了用於修改 FLP 的自定義代碼。 init: function () { // call the base component's init function UIComponent.prototype.init.apply(this, arguments); var rendererPromise= this._getRenderer(); rendererPromise.then(function(oRenderer){ // var bFull= jQuery.sap.getUriParameters().get("plugin-full"); oRenderer.addHeaderItem("sap.ushell.ui.shell.ShellHeadItem", { icon:"sap-icon://add" ,tooltip:"Current Stage" },true,true); }); // var oRenderer= sap.ushell.Container.getRenderer('fiori2'); // oRenderer.addHeaderItem({icon:'sap-icon://add'},true,true); // enable routing // this.getRouter().initialize(); // set the device model // this.setModel(models.createDeviceModel(), "device"); }, _getRenderer:function(){ var that=this, oDeferred= new jQuery.Deferred(), oRenderer; that._oShellContainer= jQuery.sap.getObject("sap.ushell.Container"); if(!that._oShellContainer){ oDeferred.reject("Illegal state: shell container not available. This component must be executed in a unified shell runtime context."); } else{ oRenderer= that._oShellContainer.getRenderer(); if(oRenderer){oDeferred.resolve(oRenderer);} else{ //renderer not initialized yet, listen to rendererCreated event that._onRendererCreated= function(oEvent){ oRenderer= oEvent.getParameter('renderer'); if(oRenderer){oDeferred.resolve(oRenderer);} else{oDeferred.reject('Illegal state: shell renderer not available after receiving rendererLoaded event');} }; that._oShellContainer.attachRendererCreatedEvent(that._onRendererCreated); } } return oDeferred.promise(); }
參考:
而不是在 _getRenderer 函數中使用 jQuery,這至少在快速測試中對我有用。 使用 Promises 而不是 Deferred 和 ObjectPath(需要“sap/base/util/ObjectPath”),這是“$.sap.getObject”的推薦替代品,因為它已被棄用。
_getRenderer: function() {
return new Promise(function(fnResolve, fnReject) {
this._oShellContainer = ObjectPath.get("sap.ushell.Container");
if (!this._oShellContainer) {
fnReject(
"Illegal state: shell container not available; this component must be executed in a unified shell runtime context."
);
} else {
var oRenderer = this._oShellContainer.getRenderer();
if (oRenderer) {
fnResolve(oRenderer);
} else {
// renderer not initialized yet, listen to rendererCreated event
this._onRendererCreated = function(oEvent) {
oRenderer = oEvent.getParameter("renderer");
if (oRenderer) {
fnResolve(oRenderer);
} else {
fnReject(
"Illegal state: shell renderer not available after receiving 'rendererLoaded' event."
);
}
};
this._oShellContainer.attachRendererCreatedEvent(
this._onRendererCreated
);
}
}
}.bind(this));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.