Skip to Content
EngineErweiterungenNotification Handler

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

MethodeEreignisAnwendungsfall
onProcessStartedProzessinstanz gestartetLogging, Audit-Trail
onProcessEndedProzessinstanz erfolgreich beendetBenachrichtigungen, Cleanup
onProcessErrorProzessinstanz mit Fehler beendetAlerting, Incident-Management
onUserTaskWaitingUser Task wartet auf BearbeitungE-Mail-Benachrichtigung, Push-Notification
onUserTaskFinishedUser Task abgeschlossenLogging, 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

ExtensionZweck
Notification HandlerReagieren auf Engine-Events innerhalb der Engine
RabbitMQEvents an externe Systeme weiterleiten
MonitoringMetriken aggregieren und exportieren