Erfolg und Fehler bei selber Filterfunktion in unterschiedlichen Flows

Hallo zusammen,

ich habe hier einen etwas komischen Fehler.
In zwei Flows, die später Preise in Plenty einspielen, filtere ich darauf ob ein Datum zwischen einem Start - und Enddatum liegt.
Die Funktion sieht so aus:
[..] || Aktionsstart!?number <= meta.current_timestamp?string("dd.MM.yyyy")!?number && Aktionsende!?number >= meta.current_timestamp?string("dd.MM.yyyy")
In dem Mapper vor dem Filter stehen die entsprechenden Daten in dem Format dd.MM.yyyy drinnen.

Jetzt habe ich allerdings folgendes Ergebnis. In zwei Flows die genau das selbe machen, ist der oben genannte Filter auch eingebaut, gibt aber einmal einen Fehler zurück.
Ich habe schon die Daten überprüft. Diese enthalten keine Leerzeichen und sind im exakt selben Format.
Die Fehlermeldung dazu sieht dann so aus:

Fehler beim Anwenden des Filters auf das Spreadsheet. Sie haben ?number auf eine Zeichenkette angewendet, der keine Zahl darstellt (z.B: weil sie leer ist oder Leerzeichen enthält). (Root Causes: NonNumericalException: Can't convert this string to number: "29.06.2023" The blamed expression: ==> Aktionsstart!?number [in template "RowFilterExpression Status! == 'started' || Aktionsstart!?number \u003C= meta.current_timestamp?string(\"dd.MM.yyyy\")!?number && Aktionsende!?number >= meta.current_timestamp?string(\"dd.MM.yyyy\")" at line 1, column 31] ---- FTL stack trace ("~" means nesting-related): - Failed at: #if (Status! == "started" || Aktionss... [in template "RowFilterExpression Status! == 'started' || Aktionsstart!?number \u003C= meta.current_timestamp?string(\"dd.MM.yyyy\")!?number && Aktionsende!?number >= meta.current_timestamp?string(\"dd.MM.yyyy\")" at line 1, column 1] ----)

Wie bereits erwähnt sind die Flows so gut wie identisch. Deswegen kann ich mir den Fehler auch nicht erklären.

Viele Grüße
Oliver

Was mir jetzt grade noch aufgefallen ist.

Ich wollte Preise über den entsprechenden Plenty Stepp einspielen. Jedoch sagt er mir dass die Preise nicht im richtigen Format vorliegen. Jedoch sind die Preise wie benötigt im Mapper eingetragen. Z.B. 49.99

Der Fehler tritt auch nur auf wenn ich den Input für den Plenty Stepp aus einem neu eingefügten Mapper hinzufüge. Als ich grade einen alten Mapper als Input festgelegt habe, funktionieren die Zahlen plötzlich wieder obwohl diese die gleichen sind.
Die Zahlen werden anscheinend im neuen Mapper als String festgelegt und können dann nicht über ?number umgewandelt werden. Daher dann auch die Fehler im PlentySet Stepp.

Ist das hier vielleicht ein Bug des neuen Mapper ?

Hallo Oliver,

ich glaube, der Filter hat so nie richtig funktioniert. Damit du deine Variablen vergleich kannst, muss das zuerst zu einem Datum konvertiert werden. Die ?number-Funktion funktioniert meines Wissens nach nur mit Strings, die tatsächlich eine Zahl enthalten.

Der Filter wirft nur manchmal einen Fehler, weil die Evaluierung in Freemarker „lazy“ ist. Es wird also nur so viel evaluiert wie nötig. Wenn der Ausdruck vor dem Oder true ergibt, wird dieser Datumsabgleich garnicht erst ausgeführt.
Denke, in dem fehlerfreien Flows wird diese Datumsbedingung schlichtweg nie ausgeführt, weil der erste Ausdruck immer true ist. Du kannst das ganz einfach nachprüfen, indem du einfach die beiden Ausdrücke einmal Plätze wechseln lässt und den Datumsabgleich vor das Oder packst.

Du müsstest die Strings zum date-type konvertieren und mit diesen arbeiten. Die kann man dann miteinander vergleichen oder über die datediff-Funktion von Synesty die Differenz errechnen.

Gruß
Gustav

2 „Gefällt mir“

Hallo Oliver,

dein Anwendungsfall ist mit der neuen Template-Funktion isDateBetween einfacher lösbar.
Wie sie funktioniert, wird in diesem Cookbook gezeigt:

Viele Grüße
Felix