【发布时间】:2021-02-17 12:27:34
【问题描述】:
这是给:
- 自定义 Fiori Launchpad(例如修改 shell 栏或添加页脚)
- 在 NEO 环境(不是 Cloud Foundry)中工作
- 在 WebIDE 而非 Business Application Studio 中设置
其他指南包含大量过时信息,例如不再存在从“从模板新建项目”创建“Fiori Launchpad 插件”的选项
【问题讨论】:
标签: sapui5 sap-fiori sap-web-ide
这是给:
其他指南包含大量过时信息,例如不再存在从“从模板新建项目”创建“Fiori Launchpad 插件”的选项
【问题讨论】:
标签: sapui5 sap-fiori sap-web-ide
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));
}
【讨论】: