Unklare Fehlermeldungen zu ?number Error

Hallo Synesty,


gerade versuche ich einen String zu parsen und stoße auf großen Widerstand:


WARNING:4 Rows with errors, showing First 10 :
Row: 13831
{Hilf_095=Script error: You have used ?number on a string-value which is not a number (or is empty or contains spaces). Try ?trim?number or check for empty value. Error: Can't convert this string to number: "No Record found"The blamed expression:==> result['Hilf_PriceInclVAT']!?trim?number [in template "Hilf_095" at line 1, column 46]----FTL stack trace ("~" means nesting-related): - Failed at: #if result["Hilf_PriceInclVAT"]! = "N... [in template "Hilf_095" at line 1, column 1]---- : <#if result['Hilf_PriceInclVAT']! = "NaN" || result['Hilf_PriceInclVAT']!?trim?number?is_number = false > 0.01 <#else>${result['Hilf_PriceInclVAT']!}},


1. Leider kann mittels "Row: 13831" leider kein Datensatz identifiziert werden, welcher den Fehler hervor ruft. Das macht die Fehlersuche zu einem schwerwiegenden Akt.


2. Der Fehler wird in folgendem Snippet hervorgerufen:

<#if result['Hilf_PriceInclVAT']! = "NaN" || result['Hilf_PriceInclVAT']!?number?is_number = false > 0.01 <#else>${result['Hilf_PriceInclVAT']!}</#if>

Die Zahl, welche via SVERWEIS aus einem Datestore kommt, ist immer als String formatiert. Sprich, mit is_number würde immer false heraus kommen. Daher versuche ich in der IF Bedingung mit ?number in eine Zahl zu parsen, was in der Fehlermeldung oben endet. Erwartet hätte ich, dass er schlicht die Bedingung auswertet und mir entsprechende Werte zurück liefert. Wie kann hier die Bedingung gebaut werden damit keine die Warnung verborgen bleibt?


Vielen Dank für eine Rückmeldung

Die Fehlermeldung kommt, da versucht wird den String "No Record found" in eine Zahl zu wandeln (durch ?number).

Vermutlich findet der Querverweis einen Datensatz nicht. Dadurch kommt das "No Record found". Entweder der Querverweis ist noch nicht korrekt oder die Bedingung müsste angepasst werden, dass explizit "No Record found" ausgeschlossen wird.



<#if spalte! != "No Record found">



Vielen Dank für die Auskunft. Korrekt der SVERWEIS findet manchmal keinen Datensatz. Natürlich kann im zurückgelieferten Ergebnis auch etwas anderes stehen (bspw. NaN, Record not Found)


Mit der IF Abfrage versucht man ja gerade alle Eventualitäten auszuschließen und nur auf einen Fall zu reagieren. So müsste man doch alle möglichen Werte kennen, um diese zuvor auszuschließen. Dann braucht man aber wiederum die IF Abfrage nicht mehr.


Wie kann man dieses Thema lösen? Ich habe einen Wert, möchte prüfen, ob es eine Zahl ist und nur dann weiterrechnen, ohne dass die Verarbeitung Fehler wirft und nicht weiterarbeitet.


Wäre ein attempt - recover (try - catch in Freemaker) via Skript eine Idee? Im normalen Editor klappt das leider nicht. Danke!

Das folgende Skript prüft ob im Ergebnis der Spalte Hilf_PriceInclVAT ein numerischer Wert vorhanden ist. Falls ja wird das Ergebnis der Spalte ausgegeben und falls nicht wird der feste Wert 0.01 ausgegeben.


<#if isNumber(result['Hilf_PriceInclVAT'])>${result['Hilf_PriceInclVAT']!}<#else>0.01</#if>


Danke für den Snippet. Das funktioniert so. Hinzuzufügen wäre, das NaN einem nummerischen Wert entspricht. isNumber() erkennt dies auch, nur hat dann die Rundungsfunktion in Synesty ein Problem und steigt aus. Daher habe ich den Code erweitert:


<#if isNumber(result['Hilf_PriceInclVAT']) && result['Hilf_PriceInclVAT'] != "NaN" >${result['Hilf_PriceInclVAT']!}<#else>0.01</#if>

Anderenfalls würde NaN als nummerischer Wert weitergereicht:


image

Vielen Dank für den Input!!