Engine SDK
Das Engine SDK stellt Typen und Schnittstellen bereit, um Extensions fĂŒr die Engine zu entwickeln.
Verwendung des SDKs
Das SDK kann ĂŒber npm bezogen werden:
npm i --save @5minds/processcube_engine_sdk
Beispiel:
import { Engine, EngineEvent, OnLoad } from '@5minds/processcube_engine_sdk';
export const onLoad: OnLoad = (engine: Engine) => {
engine.registerEventMiddleware(onEngineEvent);
};
function onEngineEvent(event: EngineEvent): Promise<void> {
return Promise.resolve();
}
Extensions in die Engine einbinden
StandardmĂ€Ăig werden Extensions aus dem Ordner ${HOME}/.processcube/engine/extensions geladen. Der Pfad lĂ€sst sich mit dem Startup-Parameter
--extensionsDir Àndern.
Sowohl beim Start ĂŒber die CLI:
processcube-engine --extensionsDir '/my/custom/extensions/dir'
Als auch beim Start als embedded Software:
await Engine.launch({
extensionsDir: '/my/custom/extensions/dir',
});
Aufbau einer Extension
Jede zu ladende Extension muss in einem eigenen Unterordner von extensionsDir liegen und mindestens eine package.json und eine nach JavaScript
transpilierte Einstiegspunkt-Datei enthalten, die in der package.json als main angegeben ist.
tree -L 2 ${HOME}/.processcube/engine/extensions
âââ extension01
â âââ index.js
â âââ package.json
âââ extension02
âââ index.js
âââ package.json
Jede Extension muss mindestens eine eigene package.json mit name, version und main enthalten.
{
"name": "extension01",
"version": "1.0.0",
"main": "index.js",
"dependencies": {
"@5minds/processcube_engine_sdk": "^3.3.0"
}
}
main muss auf eine gĂŒltige JavaScript-Datei zeigen, in welcher die Extension gehostet wird.
In der main-Datei können Extensions eine onLoad-Funktion exportieren, die von der Engine beim Laden mit einem
Engine-Objekt als Parameter aufgerufen wird. In diesem Objekt finden sich alle Engine Funktionen,
die von einer Extension genutzt werden können.
export const onLoad: OnLoad = (engine: Engine) => {
engine.registerEventMiddleware(onEngineEvent);
};
Interaktion mit der Engine
Der Engine Typ stellt Schnittstellen zur Interaktion mit der Engine bereit.
registerEventMiddleware
registerEventMiddleware erlaubt es einer Extension sich auf Log Events der Engine zu subscriben.
Der hier angegebene Callback wird dann bei jedem eingehenden Log Event ausgefĂŒhrt.
import { Engine, EngineEvent, OnLoad } from '@5minds/processcube_engine_sdk';
export const onLoad: OnLoad = (engine: Engine): void => {
engine.registerEventMiddleware(onEngineEvent);
};
function onEngineEvent(event: EngineEvent): void {
console.log(`Received event ${event.eventType}`);
}
EngineActions
Die Engine erlaubt mittels EngineActions ein Eingreifen in die ProzessausfĂŒhrung.
Eine Middleware kann eine, keine oder mehrere EngineActions zurĂŒckgeben, die dann von der Engine nacheinander ausgefĂŒhrt werden,
bevor die ProzessausfĂŒhrung fortgesetzt wird.
Eine EngineAction ist ein Datenobjekt, dass mindestens eine Id enthÀlt, die die Art der EngineAction festlegt und weitere EngineAction-spezifische Properties,
die fĂŒr die AusfĂŒhrung der EngineAction benötigt werden.
import { Engine, EngineEvent, LogEventType, OnLoad } from '@5minds/processcube_engine_sdk';
export const onLoad: OnLoad = (engine: Engine): void => {
engine.registerEventMiddleware(onEngineEvent);
};
function onEngineEvent(event: EngineEvent): void {
console.log(`Received event ${event.eventType}`);
if (event.eventType === LogEventType.OnFlowNodeExited) {
return {
id: 'ModifyTokenPayload',
tokenPayload: { result: 'token was modified' },
};
}
}
Folgende EngineActions werden derzeit unterstĂŒtzt:
ModifyTokenPayload Action
Die ModifyTokenPayload Action kann verwendet werden um den Payload des aktuellen Tokens zu verÀndern.
Daher kann die ModifyTokenPayload Action nur verwendet werden, wenn das auslösende EngineEvent zu einer FlowNode gehört.
Solche Events fangen immer mit OnFlowNode an (bspw.: OnFlowNodeEntered).
Sollte eine ModifyTokenPayload Action fĂŒr ein Event das nicht zu einer FlowNode gehört zurĂŒckgegeben wird,
wird die Action nicht ausgefĂŒhrt und ein Fehler wird gelogt.
Eine ModifyTokenPayload Action besteht aus 2 Eigenschaften:
- Die
id, die immer ModifyTokenPayload entspricht
- Die
tokenPayload, der den payload des aktuellen Tokens der entsprechenden FlowNode ersetzt.
{
id: 'ModifyTokenPayload',
tokenPayload: {example: 'token payload'},
}
Werden mehrere ModifyTokenPayload Actions zurĂŒckgegeben, ĂŒberschreibt der letzte TokenPayload immer die Vorherigen.
WeiterfĂŒhrende Links