Arbeitsstatus propagieren

Ereignisaktion - Kurzfassung

Zweck: Versucht den einem Manifest gerade hinzugefügten Arbeitsstatus auch den als Manifestpositionen enthaltenen Sendungen hinzuzufügen.

images/download/attachments/177912357/image-2024-9-18_15-4-48-version-1-modificationdate-1726664687470-api-v2.png

Die Ereignisaktion Arbeitsstatus propagieren dient dazu, den einem Geschäftstransaktionsobjekt vom Typ "Manifest" (s. Manifeste) gerade hinzugefügten Arbeitsstatus auch den als Manifestpositionen enthaltenen Sendungen hinzuzufügen.

WICHTIG◄ Die "Propagation" funktioniert nur innerhalb einer Ereignisbehandlung, die durch das entsprechende Arbeitsstatus-Ereignis (s. Arbeitsstatus (Ereignisse)) ausgelöst wird. Sofern dieselbe Ereignisbehandlung unterschiedliche Arbeitsstatus propagieren soll, müssen die entsprechenden Ereignisse explizit als Auslöser konfiguriert sein. Es gibt allerdings keine Möglichkeit pauschal "alle" Arbeitsstatus über die Ereignisaktion Arbeitsstatus propagieren an die Sendungen eines Manifests weiterzugeben.

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg ACHTUNGimages/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg Innerhalb eines Arbeitsstatus-Ereignisses (s. Arbeitsstatus (Ereignisse)) ist der gerade hinzugefügte Arbeitsstatus zwar schon im Feld "Aktueller Arbeitsstatus" (currentWorkingstate) des Bezugsobjekts gesetzt. Allerdings wird dieser Eintrag nur gespeichert, wenn die Transaktion erfolgreich abgeschlossen wird. Das Auftreten eines Fehlers oder Ausführen einer Abbrechen bewirkt dagegen einen Rollback. Scheitert die "Propagation" des Arbeitsstatus, weil dieser mindestens einer der im Manifest enthaltenen Sendungen aufgrund von Restriktionen aus anwendbaren Arbeitsstatus-Transformationen nicht hinzugefügt werden kann, scheitert also auch der Arbeitsstatuswechsel für das Manifest und alle anderen enthaltenen Sendungen.

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg ACHTUNGimages/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg Soweit die Ereignisaktion Arbeitsstatus propagieren im Zuge der Propagation lesend oder schreibend auf Sendungen bzw. deren Arbeitsstatus-Einträge zugreifen muss, geschieht dies ohne jegliche Rücksicht auf Berechtigungen bzw. Zugriffsbeschränkungen.

Konfiguration

Die Ereignisaktion kann nur mit einem Manifest (s. Manifeste) als Bezugsobjekt sinnvoll eingesetzt werden. Die Propagation des Arbeitsstatus funktioniert nur mit einem Arbeitsstatus-Ereignis (s. Arbeitsstatus (Ereignisse)) als Auslöser (s. o.).

images/download/attachments/177912357/image-2024-9-18_15-5-40-version-1-modificationdate-1726664739949-api-v2.png

images/download/attachments/177912357/image-2024-9-18_15-8-38-version-1-modificationdate-1726664917860-api-v2.png

Der Parameter Grund sieht per Standard die Direkteingabe (links im Screenshot) eines statischen Texts vor, der im Zuge der Propagation dem Feld "Grund" (reason) im Arbeitsstatus-Objekt erscheint, wenn dieser einer Sendung zugeordnet wird.

Alternativ kann per Klick auf den grauen Pfeil links unten ein Wertauflöser definiert werden, um einen Textwert für dasselbe Feld dynamisch zuzuweisen. Das Beispiel rechts im Screenshot (oben) zeigt, wie über einen Objekt-Feld-Wertauflöser der "Grund" aus dem "Aktuellen Arbeitsstatus" des Manifests (Feld currentWorkingstate.reason) für alle Sendungen übernommen werden kann. Der "Grund" wird nicht automatisch propagiert, wenn kein Text angegeben oder kein Wertauflöser konfiguriert wird!

HINWEIS◄ Das Arbeitsstatus-Objekt enthält neben dem "Grund" (reason) auch das Feld "Realisierungszeit" (realization), das den Zeitpunkt angeben soll, zu dem der Arbeitsstatus wirksam wurde. Im Zuge der Propagation wird diesem - analog zum interaktiven Hinzufügen eines Arbeitsstatus per Ribbon - automatisch die aktuelle Systemzeit zugewiesen. Die wahlfreie Zuordnung einer Zeitangabe ist hier nicht vorgesehen.

Beispiel

Bei ausgewählten Arbeitsstatus-Wechseln für Manifeste ("Freigegeben", "In Zustellung", "Storniert") soll der hinzugefügte Arbeitsstatus an alle enthaltenen Sendungen propagiert werden, sofern mindestens eine Sendung darunter ist, deren aktueller Arbeitsstatus vom hinzugefügten abweicht.

Als Hinweis auf den "Verursacher" der Statusänderung soll für die im Zuge der Propagation erstellten Arbeitsstatus (für Sendungen) der Name der Rolle aus dem Kontext der Sitzung im Feld "Grund" eingetragen werden.

Konfiguration:

Als Auslösenede Ereignisse werden die gewünschten Arbeitsstatus (Ereignisse) zugeordnet.


Die Prüfende Regel stellt per Typprüfung sicher, dass als Bezugsobjekt ein Manifest anliegt.


Die Aktionen bei bestandener Regel werden wie rechts gezeigt konfiguriert:

  • Innerhalb einer Wenn Dann Sonst-Ereignisaktion stellt wird ein komplexes Kriterium ausgewertet, das unten ausführlicher beschrieben wird. Es trifft zu, wenn der "Aktuelle Arbeitsstatus" mindestens einer der im Manifest (Bezugsobjekt) als Positionen enthaltenen Sendungen von dem Arbeitsstatus abweicht, der dem Manifest gerade hinzugefügt wurde.

  • Im "Dann"-Zweig wird die Ereignisaktion Arbeitsstatus propagieren ausgeführt, die per Parameter Grund auf die Rolle der Session zugegriffen wird, deren Objekt-Feld "Rollenname" (roleName) als "Grund" für den Arbeitsstatus der Sendungen propagiert werden soll.

images/download/attachments/177912357/image2021-7-20_14-29-51-version-1-modificationdate-1726664640135-api-v2.png

Die Regel in der Wenn Dann Sonst-Ereignisaktion wird wie rechts abgebildet konfiguriert:

  • Die äußere Objekt-Feld-Regel soll prüfen, ob der Rückgabewert aus dem enthaltenen Regel-Listen Resolver nicht leer ist.

  • Der Regel-Listen Resolver steht am Ende einer Verkettung von Wertauflösern, in der zunächst das Bezugsobjekt in die Variable mfst gespeichert wird, damit innerhalb der Bedingung im Regel-Listen Resolver Zugriff auf das Manifest besteht. Anschließend liest der Objekt-Feld-Wertauflöser die Liste aller Manifestpositionen aus dem Feld lineItems.

  • Im Regel-Listen Resolver wird für jede Sendung (Objekt-Feld in der Manifestposition) per Objekt-Feld-Regel verglichen, ob deren Feld "Aktueller Arbeitsstatus" (currentWorkingState.workingState) vom Wert des entsprechenden Felds im Manifest (Variable mfst) abweicht. Da die Option Alle Werte als Liste nicht gesetzt ist, bricht diese Suche beim ersten Treffer ("Abweichler") ab und gibt als Wert die entsprechende Manifestposition zurück. In diesem Fall ist die äußere Objekt-Feld-Regel erfüllt ("nicht leer") und die Ereignisaktion Arbeitsstatus propagieren im "Dann"-Zweig wird ausgeführt.

ANMERKUNG◄ Ein "Sonst"-Zweig wird nicht benötigt, da nichts zu tun ist, falls der Arbeitsstatus aller enthaltenen Sendungen bereits mit dem Arbeitsstatus übereinstimmt, der dem Manifest gerade hinzugefügt wurde.

Sofern die Propagation ausgeführt wird, wird der betreffende Arbeitsstatus (inkl. "Grund") allerdings auch den Sendungen erneut zugewiesen, deren workingState schon vorher mit dem Manifest übereinstimmte.

images/download/attachments/177912357/image2021-7-20_14-51-27-version-1-modificationdate-1726664640133-api-v2.png