BPC Plugins entwickeln
Diese Seite beschreibt BPC Plugins.
Definition
Ein Plugin ist eine (ExtJS-)Komponente, die dafür ausgelegt ist, an diversen vorab definierten Stellen (Hooks) eingebunden zu werden.
Die Zuordnung von Plugin zum Verwendungsort ist dabei Aufgabe des BPC und kann nicht vom Plugin beeinflusst werden.
Die Darstellung des Plugins am Verwendungsort (Hook) ist vom Hook abhängig.
Dieser ist eine Sub-Klasse von Ext.Container
und kann selbst über sein "Layout" bestimmen.
Lifecycle
Wird im BPC ein Modul bzw. eine Modulkomponente erzeugt, die ein Plugin-Hook enthält, dann wird zu diesem Zeitpunkt die Plugin-Konfiguration dieses Moduls (plugin_configuration
) abgerufen.
Alle dort konfigurierten Plugins werden dann über die createPlugin-Funktion an dem PluginInterface erzeugt (zunächst als ExtJS Konfiguration; das eigentliche Erzeugen geschieht dann implizit im Hook-Container).
Dabei wird an das Plugin über das pluginConfiguration-Attribut ein Objekt mit Informationen über den Hook, den Modul-Kontext und optionaler Plugin-Konfiguration übergeben.
Die Plugin-Komponenten bestehen so lange, bis diese explizit vom Hook entfernt werden oder der Hook selbst entfernt wird.
Ext.define("demo.PluginInterface", {
extend : "BpcCommon.plugin.Interface",
inheritableStatics : {
NAME : "Demo Plugin",
COMPONENT_XTYPE : "demoPluginComponent",
PLUGIN_ID : "demo_plugin",
DEFAULT_CONFIGURATION : {
pluginMessage : "Messgage from the demo plugin"
}
}
});
Das Plugin Interface leitet(extend) von der Klasse BpcCommon.plugin.Interface
ab.
Dadurch wird dieses vom BPC als Plugin erkannt.
Folgende Attribute sollten gesetzt werden:
-
NAME
: Der Name, der dem Benutzer in der Oberfläche angeboten wird. -
COMPONENT_XTYPE
: Referenz auf den alias der ExtJS Komponente, die gerendert werden soll. -
PLUGIN_ID
: Eineindeutige ID für das Plugin -
DEFAULT_CONFIGURATION
(optional): Standard Konfigurationsobjekt, die in der Oberfläche eingesehen und bearbeitet werden kann.
Ext.define("demo.Plugin", {
extend : "Ext.Component",
alias : "widget.demoPluginComponent",
html : "Default Message",
initComponent : function () {
this.callParent();
/*
Prüfung, ob eine Plugin konfiguration gesetzt wurde und diese eine pluginMessage enthält
* Trifft dies zu wird die pluginMessage als HTML dargestellt
* Ist die s nicht der Fall wird das default HTML("Default Message") aus der Klasse dargestellt
* */
if (Ext.isDefined(this.pluginConfiguration) && Ext.isDefined(this.pluginConfiguration.configuration.pluginMessage)) {
const htmlString = `<p>${ this.pluginConfiguration.configuration.pluginMessage} </p> `;
this.setHtml(htmlString);
}
}
});
Das Attribut alias
setzt sich aus "widget." und dem aus dem PluginInterface referenzierten COMPONENT_XTYPE
zusammen. In diesem Fall "widget.demoPluginComponent".
In der initComponent
methode kann unter dem Attribut this.pluginConfiguration.configuration
auf die Konfiguration des Plugins zugegriffen werden.
Initial entspricht diese der DEFAULT_CONFIGURATION
aus de, Plugin Interface. Diese kann jedoch in der Oberfläche bearbeitet werden (siehe Plugin konfiguration).
So erstellte Plugins werden vom BPC automatisch erkannt und können Plugin-Fähigen Modulen (diese benötigen mindestens ein Hook) über die Konfiguration zugeordnet werden.
Hook bereitstellen
Damit ein Modul Plugins "empfangen" kann, muss dieses mindestens ein Hook bereitstellen. Diese müssen die HookContainer-Klasse erweitern und können an beliebigen Stellen im Modul, wie normale ExtJS Container eingesetzt werden. Dabei sollte es jedoch für jede "Stelle" ein eigenen Hook geben, da sonst die Zuordnung der Plugins problematisch ist. Die Hooks stehen dann am Modul für die Plugin-Zuweisung zur Verfügung.
Ext.define("demo.PluginHook", {
extend : "BpcCommon.plugin.HookContainer",
alias : "widget.demoPluginHook",
layout : {
type : "hbox",
align : "stretch"
},
inheritableStatics : {
NAME : "Demo Hook",
HOOK_ID : "demo_hook",
MODULE : "demo"
},
context : {
moduleId : "demo"
}
});