0.22.0-feature-f57d65-lkjizk5t • Published 10 months ago

processcube.extensions.engine.error_handling v0.22.0-feature-f57d65-lkjizk5t

Weekly downloads
-
License
MIT
Repository
-
Last release
10 months ago

ErrorHandling

Installationsanleitung

Download der Extension

processcube.extensions.engine.error_handling-1.0.0.tgz

Installation der Extension (Installationsdatei)

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.

Installation der Extension (manuell)

Die tgz-Datei muss wie eine zip-Datei entpackt und in das Verzeichnis: <user>/.atlas/engine/extensions/ kopieren werden.

Der Verzeichnisname package sollte im Namen der Extension 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.

Abhängigkeiten

Note Für diese Engine-Extension können die Studio-Extensions processcube.extensions.studio.error_handling und processcube.extensions.studio.custom_service_tasks verwendet werden!

Version 1.0

Problemstellung

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.

Zielzustand

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.

npm.io npm.io

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).

npm.io

Hierzu muss der Retry-Service-Task die Custom Property: engine.setServiceTaskType mit dem Wert RetryProcess zugewiesen werden.

npm.io

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).

npm.io

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.

Beispiel Starttoken Fehlerbehandlungsprozess

{
    "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": {}
    }
}

Version 1.1

Problemstellung

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.

Zielzustand

Die Parameter des PreScript wurden um 2 optionale Parameter erweitertet. Entweder kann durch den Parameter flowNodeInstanceIdToRetry oder durch den Parameter flowNodeIdToRetry (ElementId im Studio) definiert werden, welches Element neugestartet (retry) werden soll ...

npm.io npm.io