Notification Handler
Der Notification Handler ermoeglicht es, auf Benachrichtigungen der Engine zu reagieren und eigene Logik auszufuehren.
Funktionsweise
Die Engine sendet bei bestimmten Ereignissen Notifications. Mit dem Notification Handler koennen Extensions auf diese Ereignisse subscriben.
Verfuegbare Notifications
| Methode | Ereignis | Anwendungsfall |
|---|---|---|
onProcessStarted | Prozessinstanz gestartet | Logging, Audit-Trail |
onProcessEnded | Prozessinstanz erfolgreich beendet | Benachrichtigungen, Cleanup |
onProcessError | Prozessinstanz mit Fehler beendet | Alerting, Incident-Management |
onUserTaskWaiting | User Task wartet auf Bearbeitung | E-Mail-Benachrichtigung, Push-Notification |
onUserTaskFinished | User Task abgeschlossen | Logging, naechste Schritte triggern |
Die Notifications werden über den notification-Adapter der Engine
(engineObject.notification) abonniert. Jede on…-Methode ist asynchron,
gibt eine Promise<Subscription> zurück und akzeptiert als zweites Argument
optional { subscribeOnce?, identity? }. Der Callback erhält eine EventMessage
mit u.a. processModelId, processInstanceId, flowNodeId, flowNodeName,
flowNodeInstanceId und currentToken.
Beispiel: Alle Events loggen
import { Engine } from '@5minds/processcube_engine_sdk';
export async function onLoad(engineObject: Engine) {
await engineObject.notification.onProcessStarted((message) => {
console.log('Prozess gestartet:', message.processModelId, message.processInstanceId);
});
await engineObject.notification.onProcessEnded((message) => {
console.log('Prozess beendet:', message.processModelId, message.processInstanceId);
});
await engineObject.notification.onProcessError((message) => {
console.error('Prozess-Fehler:', message.processModelId, message.processInstanceId);
});
await engineObject.notification.onUserTaskWaiting((message) => {
console.log('User Task wartet:', message.flowNodeId, message.processInstanceId);
});
await engineObject.notification.onUserTaskFinished((message) => {
console.log('User Task beendet:', message.flowNodeId, message.processInstanceId);
});
}Beispiel: E-Mail bei User Task
Die Notification-EventMessage enthält keine zugewiesenen Benutzer. Diese
werden über den User-Task selbst ermittelt — z.B. per
engineObject.userTasks.query(...) anhand der flowNodeInstanceId; das
UserTaskInstance liefert dann assignedUserIds.
import { Engine } from '@5minds/processcube_engine_sdk';
export async function onLoad(engineObject: Engine) {
await engineObject.notification.onUserTaskWaiting(async (message) => {
const { userTasks } = await engineObject.userTasks.query({
flowNodeInstanceId: message.flowNodeInstanceId,
});
const assignedUserIds = userTasks[0]?.assignedUserIds ?? [];
for (const userId of assignedUserIds) {
await sendEmail({
to: `${userId}@company.com`,
subject: `Neue Aufgabe: ${message.flowNodeName}`,
body: `Sie haben eine neue Aufgabe im Prozess ${message.processModelId}.`,
});
}
});
}Die Notification-Callbacks werden asynchron ausgefuehrt und blockieren nicht die Prozessausfuehrung. Fehler in Callbacks fuehren nicht zum Abbruch des Prozesses.
Abgrenzung zu anderen Extensions
| Extension | Zweck |
|---|---|
| Notification Handler | Reagieren auf Engine-Events innerhalb der Engine |
| RabbitMQ | Events an externe Systeme weiterleiten |
| Monitoring | Metriken aggregieren und exportieren |