error_handling-engine-1.0.0.tgz
Die tgz-Datei muss wie eine zip-Datei entpackt werden.
Im entpackten Ordner befindet sich eine Installationsdatei, die ausgeführt werden muss:
install.sh
(linux)
install.bat
(windows)Nach der Ausführung der Installationsdatei kann die tgz-Datei und das enpackte Verzeichnis wieder gelöscht werden.
Die tgz-Datei muss wie eine zip-Datei entpackt und in das Verzeichnis:
<user>/.atlas/engine/extensions/
kopieren werden.Der Verzeichnisname
package
muss inerror_handling
umbenannt werden.Sollten die Verzeichnisse
/.atlas/engine/extensions/
noch nicht existieren, so müssen diese vorher angelegt werden.Die tgz-Datei darf beim Ausführen des Studios nicht in das oben genannte Verzeichnis liegen.
Vor einer Aktualisierung muss das Extension-Verzeichnis gelöscht werden.
Note Für diese Engine-Extension können die Studio-Extensions
error_handling
undcustom_service_tasks
verwendet werden!
Aktuell kann jeder External Task fehlerhaft anhalten und muss durch einen Mitarbeiter, nach händischen eingreifen in die Prozesskette (Problembehebung), wieder neugestartet werden.
Hierzu wird aktuell der Prozess in Teilprozessen aufgeteilt (hierdurch kann der Teilprozess neugestartet werden), bzw. durch angebundene Fehler-Events an die External Tasks im Workflow.
Durch die Aufteilung in Teilprozessen müssen Daten zwischengespeichert werden.
Die Prozessinstanzen sind darüber hinaus schwerer lesbar/nachvollziehbar.
Für jeden Prozess kann im Studio ein weiterer Prozess zur Behandlung von Fehlern definiert werden, den sognannten Fehlerbehandlungsprozess.
In Falle eines Fehlers startet dieser Fehlerbehandlungsprozess automatisch, sofern der Fehler nicht durch ein Error-Boundary-Event bereits behandelt wurde.
Der Fehlerbehandlungsprozess bekommt sämtliche zur Fehlerbehandlung benötigen Daten aus dem Hauptprozess per Starttoken übergeben (siehe unten).
Für diesen Fehlerbehandlungsprozess kann ein Service Task definiert werden, der den fehlerhaften Hauptprozess neustartet (
retry
).
Hierzu muss der Retry-Service-Task die Custom Property:
engine.setServiceTaskType
mit dem WertRetryProcess
zugewiesen werden.
Desweiteren muss im
PreScript
definiert werden, welche Prozessinstanz neugestartet werden soll (processInstanceIdToRetry
).Für den Neustart können die Daten des Starttokens geändert werden (
newToken
).
Der Prozess wird immer am fehlerhaften Workflowelement neugestartet.
Im Falle eines Fehlers im Parallel Gateway wird das gesamte Gateway neugestartet.
Sollten mehrere Fehler in einen Parallel Gateway ausgelöst werden, so wird der Fehlerbehandlungsprozess nur einmal gestartet.
{
"processInstanceIdWithError": "e7e27de1-8fe6-4a44-ae2a-979f578fde67",
"error": {
"name": "Error",
"message": "Failure in process: Fehler",
"stack": "Error: Failure in process: Fehler at vm.js:2:7 at vm.js:5:13 at Script.runInContext (node:vm:141:12) ...",
"category": "process"
},
"flowNodeInstances": [
{
"flowNodeInstanceId": "a2d745ff-0107-4f1a-971d-8b77a5365ec3",
"flowNodeId": "ScriptTask11",
"flowNodeName": "Error",
"flowNodeLane": "Lane",
"flowNodeType": "bpmn:ScriptTask",
"state": "error",
"previousFlowNodeInstanceId": "6d6ce497-1b1c-4278-ae7b-b999c859e7d6",
"parentProcessInstanceId": null,
"processDefinitionId": "gc134dccc-bf23-4751-a9f2-ffc82a7eca66_Definition",
"processModelId": "ge8cdbcfe-9d34-424e-a6bf-8d382a79dc0e_Process",
"processInstanceId": "e7e27de1-8fe6-4a44-ae2a-979f578fde67",
"correlationId": "52a18e0e-73ab-46b0-a06b-7bc482a3cd3f",
"ownerId": "dummy_token",
"startToken": {
"raise": true,
"number": 11
},
"endToken": {
"raise": true,
"number": 11
},
"tokens": [{
"flowNodeInstanceId": "a2d745ff-0107-4f1a-971d-8b77a5365ec3",
"type": "onEnter",
"payload": {
"raise": true,
"number": 11
}
},
{
"flowNodeInstanceId": "a2d745ff-0107-4f1a-971d-8b77a5365ec3",
"type": "onExit",
"payload": {
"raise": true,
"number": 11
}
}],
"error": {
"name": "Error"
},
"startedAt": "2023-07-10T09:59:45.062Z",
"finishedAt": "2023-07-10T09:59:45.080Z"
},
{
"flowNodeInstanceId": "286f98ff-2e7c-40ec-8dad-67d161a448ae",
"flowNodeId": "Event_12ttnn3",
"flowNodeName": null,
"flowNodeLane": "Lane",
"flowNodeType": "bpmn:BoundaryEvent",
"eventType": "errorEvent",
"state": "canceled",
"previousFlowNodeInstanceId": "a2d745ff-0107-4f1a-971d-8b77a5365ec3",
"parentProcessInstanceId": null,
"processDefinitionId": "gc134dccc-bf23-4751-a9f2-ffc82a7eca66_Definition",
"processModelId": "ge8cdbcfe-9d34-424e-a6bf-8d382a79dc0e_Process",
"processInstanceId": "e7e27de1-8fe6-4a44-ae2a-979f578fde67",
"correlationId": "52a18e0e-73ab-46b0-a06b-7bc482a3cd3f",
"ownerId": "dummy_token",
"startToken": {
"raise": true,
"number": 11
},
"endToken": {
"raise": true,
"number": 11
},
"tokens": [
{
"flowNodeInstanceId": "286f98ff-2e7c-40ec-8dad-67d161a448ae",
"type": "onEnter",
"payload": {
"raise": true,
"number": 11
}
},
{
"flowNodeInstanceId": "286f98ff-2e7c-40ec-8dad-67d161a448ae",
"type": "onExit",
"payload": {
"raise": true,
"number": 11
}
}],
"error": null,
"startedAt": "2023-07-10T09:59:45.061Z",
"finishedAt": "2023-07-10T09:59:45.086Z"
},
{
"eventName": "",
"triggerValue": null,
"flowNodeInstanceId": "6d6ce497-1b1c-4278-ae7b-b999c859e7d6",
"flowNodeId": "StartEvent_1",
"flowNodeName": "Start",
"flowNodeLane": "Lane",
"flowNodeType": "bpmn:StartEvent",
"state": "finished",
"previousFlowNodeInstanceId": null,
"parentProcessInstanceId": null,
"processDefinitionId": "gc134dccc-bf23-4751-a9f2-ffc82a7eca66_Definition",
"processModelId": "ge8cdbcfe-9d34-424e-a6bf-8d382a79dc0e_Process",
"processInstanceId": "e7e27de1-8fe6-4a44-ae2a-979f578fde67",
"correlationId": "52a18e0e-73ab-46b0-a06b-7bc482a3cd3f",
"ownerId": "dummy_token",
"startToken": {},
"endToken": {
"raise": true,
"number": 11
},
"tokens": [{
"flowNodeInstanceId": "6d6ce497-1b1c-4278-ae7b-b999c859e7d6",
"type": "onEnter",
"payload": {}
},
{
"flowNodeInstanceId": "6d6ce497-1b1c-4278-ae7b-b999c859e7d6",
"type": "onExit",
"payload": {
"raise": true,
"number": 11
}
}],
"error": null,
"startedAt": "2023-07-10T09:59:45.045Z",
"finishedAt": "2023-07-10T09:59:45.049Z"
}],
"dataObjects": {
"TestData": {
"Test1": 1
}
},
"flowNodeWithError": {
"flowNodeInstanceId": "a2d745ff-0107-4f1a-971d-8b77a5365ec3",
"startToken": {
"raise": true,
"number": 11
}
},
"processStartEventWithError": {
"flowNodeInstanceId": "6d6ce497-1b1c-4278-ae7b-b999c859e7d6",
"startToken": {}
}
}
Der Prozess wird immer am fehlerhaften Workflowelement neugestartet.
In manchen Situationen muss der Prozess vor dem fehlerhaften Workflowelement neugestartet werden, z.B. dem Startevent.
Dies ist aktuell nicht möglich.
Die Parameter des
PreScript
wurden um 2 optionale Parameter erweitertet. Entweder kann durch den ParameterflowNodeInstanceIdToRetry
oder durch den ParameterflowNodeIdToRetry
(ElementId
im Studio) definiert werden, welches Element neugestartet (retry
) werden soll ...