Wie in einem Filter sinnig prüfen, ob Spalte vorhanden ist auf die ich prüfe?

Hi,
ich suche Know-How:

wenn ich in einem Filter den Wert einer Spalte auf einen String vergleiche

meineSpalte! == 'meinString'

dann failt mir der Filter immer, wenn es gar keine Spalte meineSpalte gibt, aber es wirft keinen Fehler/Warning.

Das selbe passiert im Spreadsheetmapper bei Prüfungen wie

<#if (foo = ‚123‘)>yay<#else>nay</#if>

Das ist kein großes Problem wenn ich einen Flow geordnet „von oben nach unten“ schreibe, dann kenn ich meine Spalten, und baue den Filter auch meist über die UI zusammen. Wenn ich aber in Legacy-Code bemerke dass mir eine Prüfung fehlt, dann schieb ich den Filter rein, und klau mir meinen Prüfterm oft von anderer Stelle, wo er schon läuft.

Wenn dann meine Spalte fehlt, wird der Filter immer fehlschlagen, und wenn ich den negativeOutput verarbeite, hab ich ein Problem.

Letztlich ist das ne Debugging-Frage, der Fehler liegt bei mir, kein Zweifel! Ich würd halt gern drauf hingewiesen werden :sweat_smile:

Idealerweise übersehe ich hier etwas internes (irgend ein Sonderzeichen), das genau die Prüfung für mich durchführt.

Sonst könnte ich mir auch ein Snippet x(var) vorstellen, dass mir den Inhalt der Spalte var zurück gibt, wenn die im Spreadsheet ist, und wenn nicht „irgendwas“ das mir ein Warning werfen wird :nerd_face:

Dann wär aber meine Frage: wie unterscheide ich eine nicht vorhandene Spalte von einer Spalte mit leerem Zellwert? Scheint unmöglich :thinking:

Hat jemand ne Idee?
Grüße Daniel

Hallo @samenhaus-admin,

versuche es mal mit

meineSpalte!?? && meineSpalte == 'meinString'

Die zwei ?? checken, ob die Spalte überhaupt existiert.

Viele Grüße
Lukas

1 „Gefällt mir“

Ha! Genau sowas hatte ich gesucht :heart_hands:
Vielen Dank Lukas!

Leider gar nicht wahr @synesty-Lukas :grimacing:

Ob meineSpalte!?? ein false gibt, weil die Spalte gar nicht existiert, oder ob meineSpalte == 'meinString' ein false ergibt, weil die Spalte nicht existiert, ist genau das selbe. In beiden Fällen wird mein Vergleich scheitern :confused:

Mapping - Transformy

Ändert also leider nichts am Ergebnis. Denke das müsste wenn im Parser geschehen, dass ihr ein Warning werft, wenn auf eine Spalte verglichen wird, die nicht existiert. Aber ist mir auch klar, dass ihr jetzt nicht in die Implementierung von Freemarker eingreift.

Verdammte Scriptsprachen :roll_eyes:

Ja gut, dann muss ich halt doch einfach verstärkt drauf achten ob meine Spalte auf die ich vergleiche, auch im Quell-Spreadsheet vorhanden ist. Schade.

Grüße Daniel

Hallo Daniel,

weiß nicht, ob dich das wirklich weiterbringt, aber mit eine bisschen eval-Trickserei kann man sowas hinkriegen.

(result['known']??)?string("true", "1/0")?eval

Das Ergebnis der Existenzprüfung mit ?? wird mittels der ?string()-Funktion für true auf den Text „true“ und für false auf den Text „1/0“ gemappt. Wenn man das ganze dann mittels ?eval als Freemarker-Skript evaluiert, wird aus „true“ wieder der entsprechende Boolean-Wert und „1/0“ wirft einen Fehler wegen der Division durch Null. Also wenn die Spalte vorhanden ist, ergibt der Ausdruck true und wenn die Spalte nicht vorhanden ist, scheitert er an dem Versuch, durch Null zu dividieren.

Habs auch nochmal in dein Transformy-Beispiel eingebaut:

Gruß
Gustav

Du bist der Hammer Gustav :muscle:
Fehler provozieren durch null-division, da muss man halt auch erst mal drauf kommen…

Ja, das scheint zu klappen, super!

Bin jetzt erst mal ne Woche off, danach bau ich das mal produktiv in einen vorhandenen Flow ein und meld mich nochmal.

Vielen Dank,
Grüße Daniel