getVariable/setVariable in JSONReader

Hallo Team, immer wieder bekomme ich Errors, wenn ich diese Funktionen in einem JSONReader-Step einsetzen will. Dann muß ich es immer über ein <#assign> realisieren - das ist zwar möglich, aber ich habe mich so an diese Variablen-Funktionen gewöhnt, daß ich da immer nicht dran denke und dann alles ändern muß. Gibt es einen Grund, warum ihr das ausgerechnet da nicht ermöglicht? In anderen parsingTemplates, z.B. APICall usw., funktioniert das ausgezeichnet, nur hier nicht.


Danke und Gruß,


Micha

podcomm e-commerce management

Hallo Micha,


die getVariable und setVariable Template Funktion haben wir eingeführt, um bei mehrfacher Ausführung eines Freemarker Templates innerhalb eines Steps eine Art "globalen" Speicher zur Verfügung zu stellen. Bei APICall können so Werte Call übergreifend (beim parsen der Response, im parsingTemplate) und im Mapper Step zeilenübergreifend Werte gespeichert bzw. verwendet werden. Das wäre mit der Freemarker Direktive <#assign> nicht möglich, da der Wert nur "lokal" während der Verarbeitung des FM Templates zur Verfügung steht. Wenn es möglich, solltest du immer <#assign> verwenden und die getVariable/setVariable Funktion nur in den beiden genannte Spezialfällen verwenden.


Im JSONReader wird das transformationTemplate nur einmal verwendet, um die Input Datei in das Output Spreadsheet zu "transformieren". Deshalb können in diesem Step alle Werte über <#assign> gespeichert werden. Die getVariable/setVariable Funktion ist nicht notwendig.


Viele Grüße

Torsten

Hallo Torsten,

danke für die Erklärung. Bei meinen Versuchen hat es mit assign aber nicht geklappt. Die Datenquelle ist ein Mapper, in dem zeilenweise JSON-Responses stehen - für jede EAN eine Zeile. Die schleuse ich dann durch den JSONReader-Step. Der eigentlich simple Task, für jede entstehende row die Zeilennummer hochzuzählen und als Spalteninhalt eintragen zu lassen, schlägt fehl, weil der Wert nicht hochgezählt werden kann - mit "assign" hat er in der zweiten Zeile offenbar vergessen, daß es schon einen Wert gibt, der hochgezählt werden soll. Dafür müßte ich also mit setVariable arbeiten, was aber ja nicht funktioniert.


Gruß Micha

Du möchtest im Ausgabe Spreadsheet hochzählende Zeilennummern haben?


Dann packe nach dem JSONReader noch einen Mapper und packe noch eine Spalte dazu, wo du ${_rowNumber!} ausgibst.







Das Input-Spreadsheets mit den JSON Responses könnte so aussehen:



Der JSONReader dafür wäre so: