Hauptmenü

Zeitraum zwischen zwei DateTime-DFs prüfen per RuleSet

Begonnen von Alexander Gensler, 14.01.2026 16:13:19

⏪ vorheriges - nächstes ⏩

Alexander Gensler

Hallo zusammen,

ich habe zwei DFs vom Typ Date. Das Enddatum darf maximal 3 Jahre nach dem Startdatum liegen, ansonsten soll dem Nutzer ein Fehler angezeigt werden. Mein bisheriger Ansatz ist, das über ein RuleSet mit dazugehörigem RuleSet-Macro zu lösen, leider komme ich da jedoch nicht wirklich voran und wollte mich deswegen erkundigen, ob es jemanden gibt, der das schon gelöst hat:

Das Macro ist wie folgt aufgebaut:
  • Name: PruefeDatum
  • Typ: Ticket
  • Scope: RuleSet
  • 1. Macro: VariableSetzen: Variable = Calc, Wert = ${startZeit|DateUtil.calc(+3Y)}
  • 2. Macro: Set Result: ResultVariable = Result, Wert = ${Calc} < ${endeZeit}

Aufgerufen habe ich das Macro wie folgt:
Variante 1:
Rule "TimeCheck" on Ticket
ExecuteMacro "PruefeDatum" as DatumResult with {"startZeit": ${TR.DynamicFields|JSON|jq(.[] :: select(.Name == "start") :: .Value)},"endeZeit": ${TR.DynamicFields|JSON|jq(.[] :: select(.Name == "ende") :: .Value)}}
    Set DynamicFields.DebugTextFeld "${DatumResult.Result}"
End

Variante 2:
Rule "TimeCheck" on Ticket
ExecuteMacro "PruefeDatum" as DatumResult with {"startZeit": "${TR.DynamicFields|JSON|jq(.[] :: select(.Name == "start") :: .Value)}","endeZeit": "${TR.DynamicFields|JSON|jq(.[] :: select(.Name == "ende") :: .Value)}"}
    Set DynamicFields.DebugTextFeld "${DatumResult.Result}"
End

Bei Variante 1 erhalte ich folgenden Fehler im Log:
[Wed Jan 14 16:08:58 2026][Error][Kernel::System::Automation::VariableFilter::DateUtil::_Calc][146] "DateUitl.Calc" need string with data!
Bei Variante 2 erhalte ich folgende Fehler im Log:
solange das DF noch nicht befüllt ist, hier fehlt also ggf. noch eine Option, dass das RuleSet nur ausgefüllt ist, wenn start und ende festgelegt wurden:
[Wed Jan 14 16:10:12 2026][Error][Kernel::System::Time::TimeStamp2SystemTime][385] Invalid Date '[] +3Y'!
sobald beide DFs festgelegt wurden:
[Wed Jan 14 16:10:20 2026][Error][Kernel::System::JSON::Decode][133] Decoding the JSON string failed: invalid character encountered while parsing JSON string, at character offset 16 (before "\n  "2026-01-22 00:0...") at /opt/kix/Kernel/System/JSON.pm line 131.
[Wed Jan 14 16:10:20 2026][Error][KIXPro::Kernel::System::Workflow::RuleSet::Command::DefaultCommands::Command_ExecuteMacro][819] Parameter "JSONObject" for execution of macro "PruefeDatum" is not a JSON object!


Verwendete Dokumentation:

Vielen Dank für eure Hilfe im Voraus
Alexander

Frank Niethardt

Moin Alexander,

ich hab noch nicht mit damit gearbeitet, aber bei Variante 1 könntest du doch über eine Bedingung prüfen, ob beide Felder gefüllt sind und nur dann das Calc durchführen. Dann hättest du eine Fehlermeldung weniger.

Viele Grüße
Frank

Alexander Gensler

#2
Hallo Frank,

die Fehlermeldungen, die auftreten, wenn die beiden Felder noch nicht befüllt sind habe ich bei Variante 1 weggelassen. Der angezeigte Fehler bei Variante 1 bezieht sich glaube ich darauf, dass der DF-Wert ohne Parsing als string nicht verwertbar ist.

Viele Grüße
Alexander

/edit: ungeachtet dessen hast du natürlich Recht, das gesamte RuleSet sollte noch mit if-Bedingungen befüllt werden, dass die Datumsfelder ausgefüllt sein müssen