Hauptmenü

RuleSet Writeable funktioniert mit v37.1 wieder nicht mehr

Begonnen von Alexander Gensler, 16.06.2026 09:07:00

⏪ vorheriges - nächstes ⏩

Alexander Gensler

Hallo zusammen,

in den Release Notes von v37 wird gelistet, dass der RuleSet Befehl Writeable wieder funktionieren sollte. Mit v37.1 funktioniert bei mir Writeable wieder nicht mehr.

Viele Grüße
Alexander

Beatrice Müller

Hallo Alexander,

verwende bitte 'Writable'.

Viele Grüße
Beatrice

Alexander Gensler

Hallo Beatrice,

besten Dank.
Ergänzend: Nachdem ich Writable verwende, bekomme ich jetzt den nächsten Fehler im RuleSet bei 'Set DynamicFields.DFName neuerWert'.
Das Log sagt hierzu: [Error][KIXPro::Kernel::System::Workflow::RuleSet::_EvaluateCondition][1397] An error occured while evaluating the logical expression (Bareword "DynamicFields" not allowed while "strict subs" in use at (eval 3507) line 1.

Hat sich hier auch etwas an der Syntax geändert?

VG
Alexander

Beatrice Müller

Hallo Alexander,

nein, der ist geblieben.
Kannst du mir ggf. dein RuleSet zur Verfügung stellen?

VG
Beatrice

Alexander Gensler

Hallo Beatrice,

gerne. Das RuleSet ist für ein Ticket "Homeoffice-Antrag". Das Makro "GetErreichbarkeit1Jahr" (s.Bild) kontaktiert eine SQL-Datenbank und lädt unter Verwendung der E-Mail des eingeloggten Nutzers als eindeutigen Identifikator einen Datensatz mit der privaten Anschrift des Nutzers. Diese wird beim Homeoffice-Antrag als "Dienstort für das Homeoffice" hinterlegt, indem es auf die drei dynamischen Felder gesetzt wird.

Das Makro "GetArbeitszeitanteil" fragt auf gleiche Art die Stundenanzahl des Nutzenden von der Datenbank ab und setzt dies auf ein entsprechendes Dynamisches Feld (damit Vorgesetzte bei der Genehmigung wissen, ob ein Nutzer Teilzeit oder Vollzeit arbeitet und das Maximum an möglichen Homeoffice nicht überschreitet).

Das Makro "GetHomeofficedaten" fragt zu guter Letzt analog zu den anderen beiden Makros die bisherigen Homeofficedaten eines Nutzers ab, sodass (im Falle einer Verlängerung) Felder schon vorbelegt werden können.

Das RuleSet hat in dieser Form vor dem Update reibungslos funktioniert und funktioniert auf meinem Produktivserver (der noch auf v35.3 läuft) auch nach wie vor reibungslos. Nur der Testserver mit v37.1 hat jetzt die Probleme.

Hier ist einmal das RuleSet selbst:
Rule "GetDaten" on Ticket if DynamicFields.PrivateAnschrift eq ""
ExecuteMacro "GetErreichbarkeit1Jahr" as MacroResult with {"NN": 1}
    Set DynamicFields.PrivateAnschrift "${MacroResult.Data.strasse}"
    Set DynamicFields.PrivatePLZ ${MacroResult.Data.plz}
    Set DynamicFields.PrivaterOrt "${MacroResult.Data.ort}"
    If ("${MacroResult.Data.strasse}" eq "" || ${MacroResult.Data.plz} eq ""  || "${MacroResult.Data.ort}" eq "")
        Tell Warning "Fehlende Stammdaten" "Ihre Stammdaten konnten nicht geladen werden oder sind älter als 1 Jahr.<br/>Bitte führen Sie zuerst den Workflow Änderung / Aktualisierung Stammdaten durch."
        Disable Submit
        Stop
    EndIf
    ExecuteMacro "GetArbeitszeitanteil" as ZeitResult with {"NN": 1}
    Set DynamicFields.Arbeitszeitumfang "${ZeitResult.Data.Anteil}"
    If "${ZeitResult.Data.Anteil}" eq "100"
    ReadOnly DynamicFields.ArbeitstageWoche
    Else
    Writable DynamicFields.ArbeitstageWoche
    EndIf
    ExecuteMacro "GetHomeofficedaten" as HOResult with {"NN": 1}
    Set DynamicFields.BisherigeHomeofficezeiten ${HOResult.Data.Homeoffice}
End

Rule "Erstantrag" on Ticket if TR.DynamicFields.contains(HomeofficeArt,1)
    Hide DynamicFields.BisherigeHomeofficezeiten
    Stop
End

Rule "Verlaengerung" on Ticket if !Rule "Erstantrag"
    Show DynamicFields.BisherigeHomeofficezeiten
    Stop
End

Das dazugehörige RuleSet Macro "GetErreichbarkeiten1Jahr" sieht wie folgt aus, die anderen beiden Makros sind analog und unterscheiden sich nur hinsichtlich der abgefragten Datenquelle:
Makro.png

Viele Grüße
Alexander

Beatrice Müller

Hallo Alexander,

der Fehler kommt mit hoher Wahrscheinlichkeit von:
Rule "Verlaengerung"
if !Rule "Erstantrag"
Diese Konstruktion ist in KIX RuleSets typischerweise nicht erlaubt oder nicht korrekt evaluierbar.
Ersetze sie durch eine explizite Bedingung, z. B.:
Rule "Verlaengerung" on Ticket if !TR.DynamicFields.contains(HomeofficeArt,1)
    Show DynamicFields.BisherigeHomeofficezeiten
    Stop
End
oder (falls es genau zwei Typen gibt):
if TR.DynamicFields.contains(HomeofficeArt,2)
Zweite mögliche Fehlerquelle könnte diese Zeile sein:
If ("${MacroResult.Data.strasse}" eq "" || ${MacroResult.Data.plz} eq ""  || "${MacroResult.Data.ort}" eq "")Wenn plz nicht als String gequotet ist, wird daraus im Perl-Eval:
MacroResult.Data.plz eq ""und wenn MacroResult nicht sauber aufgelöst wird, kann das ebenfalls ,,Bareword"-Fehler triggern.

Das Problem entsteht nicht direkt in der Zeile, die crasht, sondern beim Übersetzen des kompletten RuleSets.
KIX baut oft eine große Evaluationsfunktion aus allen Regeln zusammen.
Wenn irgendeine Regel syntaktisch kaputt ist kann der Parser Variablen falsch auflösen und am Ende bleibt ein unquoted DynamicFields... übrig

Auch die RuleSet-Funktionalität wird steig erweitert / verbessert. Daher kann die neue Version durchaus nicht mehr so "gnädig" sein.
Hilft das weiter?

Viele Grüße
Beatrice