Hallo zusammen,
beschäftige mich grade zum erstem Mal mit eurer newMap-Funktion, scheitere aber grade daran, eine Liste mit Elementen zu befüllen.
Ich verarbeite eine JSON mit Packages und möchte für jede Position in dem Paket eine Element in einer Liste an Packpositionen haben.
{
"Paket": 123
"Positionen" [
{"Pos": 1,......},
{"Pos": 2,......}
]
}
Ich orientiere mich an eurem Beispiel
<#compress><#assign m =
newMap({
"id": "123",
"total": 123.99,
"qty": 1,
"items" : []
})
.set("description","foo bar")
>
<#assign silent>
${m["items"].add(newMap({"itemId": 1}))}
${m["items"].add(newMap({"itemId": 2}))}
</#assign>
${m.delete("description")}
${toJSON(m)}</#compress>
Nur statt die Map als Freemarker-Map zu initialisieren, befülle ich die schrittweise per Add/Set-Funktion.
<#assign package_map = newMap()>
${package_map.set("TrackingNumber", "123")}
${package_map.set("TrackingNumberReturn", "789")}
${package_map.set("items", [])}
${package_map["items"].add(newMap({"itemId": 1}))}
${package_map["items"].add(newMap({"itemId": 2}))}
Da kriege ich aber einen nichts-sagenden Fehler „Script error: null“. Wenn ich stattdessen das items-Element in der Map definiere, klappt alles.
<#assign package_map = newMap({"items" : []})>
${package_map.set("TrackingNumber", "123")}
${package_map.set("TrackingNumberReturn", "789")}
${package_map["items"].add(newMap({"itemId": 1}))}
${package_map["items"].add(newMap({"itemId": 2}))}
Aber wo liegt da der Unterschied?
P.S.: Gibt’s die Chance, dass es eine Silent-Variante von der add-Funktion geben wird? Oder muss man das True immer irgendwie in Freemarker-Skript selbst verschlucken?
Gruß
Gustav