Watch this video for an overview on possible extensions.
Developing a plug-in involves the following steps:
- Implementing the plug-in
- Activating and configuring the plug-in

To start developing an FLP plug-in, generate an SAPUI5 freestyle application in the SAP Business Application Studio (BAS). Then delete all unsupported or unnecessary folders and files.
The next step is to define the SAPUI5 project as an FLP plug-in. This is done in the manifest.json file:
1234567891011121314151617181920212223242526272829303132
{
"_version": "1.37.0",
"sap.app": {
"id": "project1",
"type": "component",
"i18n": "i18n/i18n.properties",
"applicationVersion": {
"version": "0.0.1"
},
"title": "{{appTitle}}",
"description": "{{appDescription}}",
"resources": "resources.json",
"sourceTemplate": {
"id": "@sap/generator-fiori:basic",
"version": "1.6.7",
"toolsId": "4ef10253-5957-4a76-863b-06d7fd654689"
}
},
"sap.ui": {
"technology": "UI5",
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
}
},
"sap.flp": {
"type": "plugin"
}
}
Generally, there are no views in a plug-in. All changes to the FLP are defined by accessing the renderer of the FLP in the Component.js file. This enables the FLP to load and instantiate the plug-ins automatically during startup. A typical initial Component.js looks like this:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
sap.ui.define([
"sap/ui/core/Component",
"sap/m/Button",
"sap/m/Bar",
"sap/m/MessageToast"
], function (Component, Button, Bar, MessageToast) {
return Component.extend("project1.Component", {
metadata: {
"manifest": "json"
},
_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;
it 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 recieving
'rendererLoaded' event.");
}
};
that._oShellContainer.attachRendererCreatedEvent(
that._onRendererCreated);
}
}
return oDeferred.promise();
}
});
});In the FLP documentation on https://help.sap.com, many code snippets are available as template. A code changing the shell header looks like this:
123456789101112131415...
init: function () {
var rendererPromise = this._getRenderer();
/**
* Set header title
*/
rendererPromise.then(function (oRenderer) {
oRenderer.setHeaderTitle("SAP Education");
});
},
...
The SAP Note 3085381 – Developing SAP Fiori launchpad plug-ins with SAP Fiori Tools provides a full description of the process.
Note
Every plug-in must be defined in transaction /UI2/FLP_CONF_DEF before it can be activated via customizing.
Watch the video to see how plug-ins can be activated via customizing.