Plenty VariationpropertyIDs zu lang

Hallo @LukasK

Wir haben aktuell das Problem, dass wir eine ID in VariationpropertyIds mehr als 255 Zeichen groß ist. Somit kann synesty alle Werte darin garnicht verarbeiten. Über Parsemap script erhalten wir einen Error. Ausschließen können wir den bestimmten Wert auch nicht. Hast du eine Idee wie wir dieses Problem beheben?

grüße
Christoph

Hallo @chaumann,

alternativ zu parseMap könnt ihr auch das VariationPropertyIDsJSON als JSON verarbeiten. Da gibt es m.W.n. kein solches Limit. Die Syntax ist aber geringfügig anders.

${parseJSON(VariationPropertyIDsJSON)["ID_NUMBER"]}

statt

${parseMap(VariationPropertyIDs).at("ID_NUMBER")}

Edit: Dabei kam auch noch eine technische Frage für Synesty bei mir auf. Wie unterscheidet sich der JSON-Hash aus eurer parseMap-Funktion von dem ?eval_json-builtin?

Gruß
Gustav

2 „Gefällt mir“

Hi @gustavfriedeheim

Das hat super geklappt!! Lieben Dank!!

Ich habe jetzt noch einen Folgefehler.

@synesty-Lukas oder @gustavfriedeheim

dieser Code möchte jetzt auf die JSON Werte zurückgreifen:

<#if result[‚HasParentContent‘]?boolean && VariationPropertyIDs! !=„“>
<#assign props = parseField(VariationPropertyIDs, „MAP“, „TEXT“, „;“, „=“).asMap()>
<#list props as k, v ><#if v! !=‚‘ && k?starts_with(‚221‘)>
<P_BULLET sort=„10“>

<#list props as k, v ><#if v! !=‚‘ && k?starts_with(‚225‘)>
<P_BULLET sort=„20“>

Könnt Ihr mir erklären in welcher Form ich parsefield austauschen muss, damit die Werte richtig ausgelesen werden?

Schöne Grüße und ganz lieben Dank!!! :slight_smile:
Christoph

Hallo Christoph,

probier mal diese Zeile

durch

<#assign props = parseJSON(VariationPropertyIDsJSON) >

zu ersetzen.

VG Torsten

1 „Gefällt mir“

Hallo Christoph,

Torsten’s Antwort sollte dein Problem lösen.

Man kann dein Skript übrigens auch ohne Listen-Iteration schreiben. Das sähe wie folgt aus:

<#if props['221']?? && props['221'] != "">
<P_BULLET sort=„10“>
...
</#if>
<#if props['225']?? && props['225'] != "">
<P_BULLET sort=„20“>
...
</#if>

props['221']?? fragt ab, ob der Schlüssel 221 in dem JSON-Hash existiert.
props['221'] != '' prüft, dass der Wert zu dem Schlüssel nicht leer ist.

Dein Code funktioniert und kannst du so lassen. Aber die Iteration über die Liste ist suboptimal, da sie einfach nicht nötig ist. Statt dutzende Elemente zu fragen, ob sie das gesuchte Element sind, fragt mein Code einfach, ob das gesuchte Element existiert und prüft im Anschluss den Wert.

@synesty-Torsten: Hast du eine Antwort auf meine Frage parat oder ist der Unterschied nicht der Rede wert? :slight_smile:

Gruß
Gustav

@gustavfriedeheim: Zu deiner Frage

Die parseMap template Funktion gibt ein eigenes, von uns erstelltes Map-Objekt zurück. Das hat den Vorteil, dass wir dafür zusätzliche Funktionen bereitstellen können, also z.B. .at("key") oder .containsKeyIgnoreCase("KeY"). Diese Funktionen findest du in den Beispielen der parseMap Template Funktion.

Mit dem ?eval_json-builtin bekommst du einen internes Freemarker hash - Objekt (oder auch andere Typen wie sequences, anhängig vom JSON - String) zurück.

1 „Gefällt mir“

Danke für die Info. Die Variationen von containsKey… muss ich mir merken, die werden irgendwann sicherlich mal hilfreich sein.

1 „Gefällt mir“