Hauptmenü

Teile von Checklisten als erledigt setzen

Begonnen von Frank Niethardt, 06.09.2024 15:28:43

⏪ vorheriges - nächstes ⏩

Frank Niethardt

Hallo,

ich habe den Fall, dass ich in einer Checkliste quasi mehrere Zweige aufspanne. Wenn ich am Anfang eines Zweigs sage, der wird nicht benötigt, wie kann ich dann die restlichen Sub-Elemente dieses Zweigs als implizit erledigt markieren? Workflow Rules?

Viele Grüße
Frank

Benedikt Geißler

Hallo Frank,

hier ist ein Weg, wie ein bestimmter Wert innerhalb eines Checklisten DFs mit einem neuen Wert versehen werden kann – hier anhand des mitgelieferten DFs MobileProcessingChecklist020.

Zunächst muss der aktuelle Wert in einer Variable zwischengespeichert werden:
Variable setzen: dfChecklist →
<KIX_TICKET_DynamicField_MobileProcessingChecklist020_ObjectValue_0>

Das "_ObjectValue_0" ist hier wichtig, da DFs üblicherweise ein Array von Werten bilden – hier soll der Rohwert des ersten Elements verwendet werden.

Mit einer MacroAction "Dynamisches Feld setzen" und einem jq-Filter in der Variable kann jetzt eine Wertersetzung vorgenommen werden:
DF setzen: MobileProcessingChecklist020 →
${dfChecklist|jq([.[] :: select(.id != "100"), (select(.id == "100") :: .value = "OK")])}
Der jq-Filter parst das JSON und kann bestimmte Selektoren darüber legen. Genauere Doku dazu gibt es bei https://jqlang.github.io/jq/manual/
Zu beachten ist, dass "|" innerhalb des JQ-Filters durch "::" ersetzt werden muss, ansonsten kommt der Variablenfilter durcheinander. Außerdem rfen keine geschweiften Klammern vorkommen, denn das vermischt sich sonst auch mit der Variablenreferenzierung.

Eine kurze Erläuterung zu dem obigen jq-Filter noch:
  • Iteriere über das Array und wende zwei verschiedene Filter an, daher die Klammerung und das Komma:
    • die mit der ID ungleich 100 bleiben unverändert
    • bei denen mit der ID 100 wird der Unterwert value auf "OK" gesetzt
  • Die Ergebnisse der beiden Filter werden wieder kombiniert, sodass im Resultat nur der eine Unterwert value auf OK gesetzt wird.

Hier gibt es auch noch eine Spielwiese mit obigem Beispiel und Vorher-/Nachher-Vorschau: https://jqplay.org/s/6wS5zO4WQKEDbTA

Screenshot dazu:


Bildschirmfoto vom 2024-10-16 15-36-36.png

Viele Grüße
Benedikt

Frank Niethardt

Hallo Benedikt,

mir geht es ja darum, dass eine Checkliste dann "erledigt" ist, wenn alle Felder ausgefüllt, bzw. mit entsprechenden Werten belegt sind. In meinem Beispiel werden Nutzerkonten erstellt. Erstmal normaler Nutzer und dann unter Umständen Admin-Accounts

[] Nutzeraccount
  - Name [...]
  - Gruppen [...]
[] Admin-Account
  - Name [...]
  - Gruppen [...]

Wenn ich jetzt bei Admin-Account auswähle "nicht benötigt", dann ist das ja im Sinne der Checkliste abgehakt. Allerdings sind die beiden Felder untendrunter eben noch offen. Eigentlich müssten diese Felder dann aber nicht mehr herangezogen werden.
In diesem Beispiel sind es ein Textfeld und eine Textarea, aber es könnten unter Umständen auch Auswahlfelder sein.

Wo ich mir das gerade durch den Kopf gehen lasse, müssten die Felder nicht ausgefüllt werden, sondern direkt als gültig betrachtet werden, alternativ aus der Liste der zu zählenden Einträge rausfallen.

Ich hoffe, ich hab mich einigermaßen verständlich ausgedrückt.

Viele Grüße
Frank

Benedikt Geißler

Hallo Frank,

hier ist noch ein Beispiel mit jqplay, in dem auch zusätzlich alle Unterwerte mit "OK" versehen werden: https://jqplay.org/s/TXFbDYOYysnjynM

Screenshot dazu:
Bildschirmfoto vom 2024-10-28 12-38-32.png

Es ist also lediglich eine Frage des JQ-Filters. In der MacroAction müsste dementsprechend verwendet werden:
${dfChecklist|jq([.[] :: select(.id != "100"), (select(.id == "100") :: .value = "OK" :: .sub[].value = "OK")])}
Für jede weitere Unterebene müsste wiederum ergänzt werden: " :: .sub[].sub[].value = "OK" usw.

Viele Grüße
Benedikt