Template_Output_String im Mappingset verweden?

Hallo liebes Forum,

ich lasse mir in einem Schritt in einem Sytsem vorhandene Hersteller und deren IDs als Spreadsheet erstellen und forme die im nächsten Schritt per TextHTMLWriter in folgendes Format um:

MarkeX=1
MarkeY=2
MarkeZ=3

Diesen String würde ich nun gerne in einem anderen Spreadsheet als Mappingset String benutzen um dort die Marken in die entsprechenden IDs umzuwandeln.
Über das + kann ich mir auch aus den Meta-Daten den Platzhalter dafür ausgeben lassen:
${meta.TEMPLATE_OUTPUT_STRING@TextHTMLWriter_98!}
Leider scheint das nicht zu funktionieren, denn die Spalte wird nicht angepasst.

Ist es an dieser Stelle überhaupt möglich mit den Platzhaltern zu arbeiten?

Hintergrund ist, dass sich die Liste der Hersteller ändern kann und das ganze automatisiert ablaufen soll ohne dass das Mappingset nachträglich angepasst werden muss.

Beste Grüße,
Franziska

Hallo,

Entweder AddUpdateMappingSet oder KeyValueSpreadsheet

Hallo @synesty-Sales,

ich probiere es gerade mit dem AddUpdateMappingSet, allerdings komme ich hier nicht weiter. Ich verstehe leider nicht was ich wo Eintragen muss. Die Dokumentation hierzu ist mir als Anfänger leider etwas zu dürftig.

Ich habe in Step 18 mein Spreadsheat, bei dem ich das Mapping durchführen möchte. Hier habe ich in meiner Hersteller Spalte unter Mappingset das Set „HerstellerVergleich“ eingetragen.
Dieses habe ich zuvor angelegt und mit ein paar Zeilen befüllt:

MarkeX=1
MarkeY=2
MarkeZ=3

In Step 19 habe ich dann das AddUpdateMappingSet, welches als Input das vorherige Spreadsheet verwendet.
Als Name habe ich hier „HerstellerVergleich“. [Das ist ja das Set, dass ich Updaten möchte]
Als keyColumn habe ich dann meine Herstellerspalte aus Step18 [Die Spalte die gemappt werden soll] und als ValueColumn habe ich meine TEMPLATE_OUTPUT_STRING [Den Mapping String, den ich verwenden möchte]
In der Step-Vorschau wird mir nun gesagt „Existing mappingset will be updated with 43 rows: HerstellerVergleich“.

Nach durchführen des Flows wurde das MappingSet auch aktualisiert, aber nicht mit den Werten aus meinem TEMPLATE_OUTPUT_STRING. Hier wurde lediglich ein fehlender Hersteller dazugeschrieben, allerdings auch nicht korrekt:

MarkeX=1
MarkeY=2
MarkeZ=3
...
MarkeNeu=
1=

Ich verstehe wie gesagt nicht, was ich hier wo einstellen muss damit das Mappingset den Inhalt aus dem TextHTMLWriter enthält, und die Spalte Hersteller im Spreadsheet anhand dessen angepasst wird.
Vielleicht gehe ich da mit einem Logikfehler ran oder der falschen Step Reihenfolge?

Beste Grüße und ein schönes Wochenende

Das klingt absolut korrekt.

Probier mal bitte folgendes, beim erstmaligen Öffnen des Mappers.

  1. Öffne den Mapper
  2. Drücke dann auf das kleine Dreieck bei dem Grünen Knopf und wähle den Knopf mit „Ausführung aller Steps erzwingen“.

Wenn du danach in dein Mappingset String deine Variable einfügst sollte es gehen.

Gib mal bitte Bescheid, ob es geht. Wenn ja, dann machen wir uns mal Gedanken, wie wir das besser hinbekommen.

Diese Schritte sind vermutlich nicht mehr nötig, sobald die Variable im Mapper einmal eingetragen wurde.

Es sieht so aus, als grätscht hier eine Optimierung rein, die verhindert, dass der TextHTMLWriter ausgeführt wird, wenn er noch nicht mit dem Mapper verknüpft ist. Eine Art Henne-Ei-Problem. Das müssen wir mal besprechen.

Hallo @synesty-Sales,

zunächst Danke für die Hilfe.

Ich habe es wie beschrieben ausprobiert. Mapper geöffnet, Daten über den Pfeil reingeholt (mit Ausführung der vorherigen Steps), dann die Variable beim Mapping String eingesetzt und die Vorschau anzeigen lassen.
Leider wird trotzdem nicht gemappt. Ich habe auch unterschiedliche Reihenfolgen (erst Variable, dann Daten holen, etc.) ausprobiert. Allerdings ohne Erfolg.

So sieht die Vorschau vom TextHTMLWriter aus (Stepp 5):

So sind die Einstellungen in dem Spreadsheet (Step 18):

Theoretisch sollte also statt „Yazoo“ hier eine „22“ stehen.

Beide Steps befinden sich in einer anderen Gruppe. Alle Steps für die Hersteller sind in einer Gruppe und das Spreadsheet für den Abgleich ist in einer späteren Gruppe. Kann das eventuell Auswirkungen haben?

Hallo @fahrradnerz ,

a) Kannst du mal probieren aus dem Mapper „raus“ zu gehen und wieder „rein“?
b) kannst du mal in den TextHTMLWriter zum Test per Hand Yazoo=22 reinschreiben? Nur um zu vermeiden, dass evtl. Sonderzeichen / Leerzeichen etwas kaputt machen.
c) auch nur zum Test: Kannst du mal die Variable in einer Testspalte in das Wertfeld einfügen? (auch am besten dann nochmal wie in a) den Mapper verlassen und wieder rein gehen?

Kannst du Screenshots schicken, von den Dingen, die du dann siehst?

Hallo @synesty-Sales

a) Mapper verlassen und die Daten reinholen hat nicht geholfen
b) hat funktioniert, es wird jetzt 22 angezeigt. Also liegt es anscheinend an dem erstellten String

Folgendermaßen erstelle ich diesen üebr den TextHTMLWriter:

<#list spreadsheet@SpreadsheetMapper_53.getRows() as row>  
  ${row.get("manufacturers_name")!}=${row.get("manufacturers_id")!}
</#list>

Über Test c) wird mir der String folgendermaßen in der Spalte ausgegeben:
image

Fehlt hier eventuell der Zeilenumbruch?

Vielen Dank.
Das Problem sind (mit hoher Wahrscheinlichkeit) die Leerzeichen am Anfang. Die sind so quasi Teil des Keys.
image

Möglichkeiten:

a) Leerzeichen weglassen
b) Freemarker <#compress> Funktion benutzen, um diese White-Spaces zu entfernen.

Könnte ungefähr so aussehen:

<#compress><#list spreadsheet@SpreadsheetMapper_53.getRows() as row>  
  ${row.get("manufacturers_name")!}=${row.get("manufacturers_id")!}
</#list></#compress>

(evtl. könnte man compress auch in eine eigene Zeile schreiben, damit es schöner aussieht… gerade nicht sicher.

1 Like

Viele Dank! Das <#compress> hat es gerettet :+1:
Funktioniert jetzt einwandfrei.

Danke für die super Hilfe!

1 Like