Fehlermeldung mit Funktion eval

In einem Spreadsheet Mapper möchte ich auf Daten einer Shopify Bestellung zugreifen, welche als Key-Value Liste im shopifyGetOrder Step importiert werden.


Es handelt sich hier um das Attribut "note_attributes", welches im JSON der Shopify API eine Key-Value Liste ist:

"note_attributes": [
            {
                "name": "has_unpaid_orders",
                "value": ""
            },
            {
                "name": "sum_unpaid_orders",
                "value": ""
            },
            {
                "name": "unpaid_orders_limit_exceeded",
                "value": ""
            },
            {
                "name": "shipping_address_salutation",
                "value": ""
            },
            {
                "name": "shipping_address_title",
                "value": ""
            },
            {
                "name": "billing_address_salutation",
                "value": ""
            },
            {
                "name": "billing_address_title",
                "value": ""
            },
            {
                "name": "gp_nummer",
                "value": "0"
            },
            {
                "name": "invoice_number",
                "value": "123456789"
            },
            {
                "name": "sepa_owner",
                "value": ""
            },
            {
                "name": "sepa_iban",
                "value": ""
            },
            {
                "name": "sepa_bic",
                "value": ""
            }
        ]

Durch den Import Step wird diese Liste wie folgt im Datastore gespeichert:

has_unpaid_orders=,sum_unpaid_orders=,unpaid_orders_limit_exceeded=,shipping_address_salutation=,shipping_address_title=,billing_address_salutation=,billing_address_title=,gp_nummer=0,invoice_number=123456789,sepa_owner=,sepa_iban=,sepa_bic=

Im Spreadsheet greife ich wie folgt auf die Liste zu:

<#assign noteattributes = ("[" + master['note_attributes'] + "]")?eval >
	<#list noteattributes as attribute>
	<#if attribute.name == "billing_address_salutation">
		<#if attribute.value?lower_case == "mr">Herr
		<#elseif attribute.value?lower_case == "mrs">Frau
		<#elseif attribute.value?lower_case == "company">Firma
		<#elseif attribute.value?lower_case == "school">Schule
		<#elseif attribute.value?lower_case == "pubfacility">Öffentliche Einrichtung
		<#elseif attribute.value?lower_case == "other">Sonstige
		<#else>${attribute.value!}</#if>
	</#if>
	</#list>
</#if>

Diese Verarbeitung funktioniert auch, aber nur, wenn jedes Key-Value-Paar auch einen Wert hat, sobald ein leerer Wert vorkommt, erhalte ich folgende Fehlermeldung:

	error in function Scripting: (Root Causes: _MiscTemplateException: Failed to "?eval" string with this error: ---begin-message--- Syntax error in ?eval-ed string in line 1, column 21: Encountered ","(...)..., but was expecting one of: <STRING_LITERAL> <RAW_STRING> "false" "true" <INTEGER> <DECIMAL> "." "+" "-" "!" "[" "(" "{" <ID> ---end-message--- The failing expression: ==> ("[" + master['note_attributes'] + "]")?eval [in template "Col rech_anrede" at line 12, column 27] ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign noteattributes = ("[" + maste... [in template "Col rech_anrede" at line 12, column 1] ----)

Wie kann ich diese Fehlermeldung umgehen, bzw. welche Alternativen zu "eval" gäbe es?


Probieren Sie mal die Funktion parseMap(). So wie Sie schreiben, schreiben wird note_attributes als sog. Map (key-value pairs) im Datastore abgespeichert.


Beispiel:

${parseMap("has_unpaid_orders=,sum_unpaid_orders=,unpaid_orders_limit_exceeded=,shipping_address_salutation=,shipping_address_title=,billing_address_salutation=,billing_address_title=,gp_nummer=0,invoice_number=123456789,sepa_owner=,sepa_iban=,sepa_bic=", "=",",").at("invoice_number")}


Ausgabe: 123456789


Hier mal ein Test.

Hallo Synesty Sales,


ich hab das jetzt mal in ein paar betroffenen Flows und Steps eingefügt und es scheint soweit gut zu funktionieren.