Mehrere Mappingsets erstellen mit AddUpdateMappingset

Hallo,

arbeite grade an einem Flow, der eine große Menge an Mappingsets erstellen soll. Dabei geht es um knapp 10 Spalten, die (jeweils!) in 11 Sprachen gemappt werden sollen. Für jedes von diesen Mappingsets einen eigenen AddUpdateMappingset-Schritt benutzen, ist sehr aufwändig.


Momentan schreibe ich alle Sprachvarianten komma-getrennt in ein einzige Mappingset, da es sonst zu viel Arbeit wäre. Ein Mappingset pro Sprache wäre aber wünschenswert, da die einfacher zu pflegen und verwenden sind.



Suche einen Weg, wie ich die Mappingsets pro Sprache ohne viel Aufwand erstellen kann.

Die einfachste Lösung wär, wenn man AddUpdateMappingset eine Liste an Namen, Keys und Values übergeben könnte.

Kann mir aber auch vorstellen, die Mappingsets mit dem TextHTMLWriterMultiWriter-Step selbst zu erstellen und dann an AddUpdateMappingset übergebe.

Gibt es in der Form irgendeine Möglichkeit?

Hallo,


können Sie bitte einmal ein Beispiel zeigen (Tabelle, Mappingset), wie es aktuell aussieht und wie es in Zukunft aussehne soll. Denn ich versteht leider noch nicht ganz Ihr Problem.


Mit freundlichen Grüße,

Lukas

Klar, falls sie mal selbst reinschauen wollen, die ID des letzte Flow-Runs ist b21c9497-3922-11ea-a6d5-901b0ea49fee.


Die Daten komme aus einer Excel-Tabelle. In den Spalten liegt der Key und der dazugehörige Value-Wert in verschiedenen Sprachen. Hier nur ein Beispiel mit drei Sprachen, eigentlich handelt es sich aber um noch mehr Sprachen:

BY_BALLAST Durch Vorschaltgerät By Ballast Via voorschakelapparaat
DIMMABLE Dimmbar Dimmable Dimbaar


Daraus erstelle ich ein Mappingset namens DIM-Tech-DE,GB,NL,... :

DIMMABLE=Dimmbar,Dimmable,Dimbaar,...
BY_BALLAST=Durch Vorschaltgerät,By Ballast,Via voorschakelapparaat,...


Eigentlich würde ich gerne pro Sprache ein eigenes Mappingset erstellen, also Dim-Tech-DE, Dim-Tech-GB, Dim-Tech-NL etc.. Dazu muss ich aber auch für jede Sprache einen AddUpdateMappingset-Schritt hinzufügen. Da ich neben der Dim-Technologie auch noch Mappingsets für andere Attribute erstelle, bin ich so schnell bei mehr als 100 AddUpdateMappingset-Schritten.


Ich wünsche mir, dass man mit AddUpdateMappingset mehrere Mappingsets erstellen kann. Hier ein Beispiel, wie die Konfiguration aussehen könne (Semikolon dient als Trennzeichen):

image



Hoffe, dass ist so verständlicher.

Hallo,


danke für die Beispiele, jetzt ist auch der Groschen bei mir gefallen. Wenn es sich nur um eine Tabelle gehandelt hätte, dann wäre mein Vorschlag gewesen, dass Sie eine pro Sprache ein AddUpdateMappingset nehmen, in Ihrem fall wären es 11, aber da Sie mehrere Tabellen haben, versteh ich Ihr Problem.

Ich werde das mal mit unserer Technik besprechen, ob es da eine Lösung gibt und ich werde mich dann nochmal melden.


Viele Grüße,

Lukas

Noch eine kurze Nachfrage. Wie viele Einträge im Mappingset würden es denn werden pro Sprache pro DIM-Technologie werden?

Die Dimtechnologie hat 11 Einträge. Die Mappingsets für die anderen Atrribute sind auch in derselben Größenordnung, meist so zwischen 5-30 Einträge.

Hallo,


hast du schon mal darüber nachgedacht den Datastore zu verwenden. Im Datastore kannst du dann die Folder nutzen um deine Technologien zu managen und in den Spalten die verschiedenen Sprachen um dann letztendlich per Querverweis, dir immer die entsprechende Technologie-Sprache zu holen.

Wenn du aber natürlich das Mappingset verwendest um die Mappingmodi zu verwenden, da der zu mappende Wert nicht alleine steht, ist mein Vorschlag mit dem Datastore hinfällig und wir müssen uns was überlegen.


Noch eine Bemerkung am Rande. Hast du schon mitbekommen, dass es beim AddUpdateMappingset Step nun seit dem letzten Update den Modus "aktualisieren" gibt. Vielleicht löst das auch schon dein Problem.

https://docs.synesty.com/display/SSUD/Release+Notes+2020-01#ReleaseNotes2020-01-MappingsetsperFlowerweitern


Viele Grüße,

Lukas

Die Mappingmodi sind schon relevant für uns, mehrere Werte in den Feldern sind möglich.

Um beim Beispiel zu bleiben: Die Spalte DIM-TECH für ein Produkt kann auch "BY_BALLAST,DIMMABLE,..." enthalten.

Wüsste jetzt nicht, wie mir der Modus "aktualisieren" helfen könnte.


Das ist aber auch keineswegs ein dringendes Feature. Die Liste von mehreren Sprachen in einem Mappingset funktioniert ja erstmal auch. Ist nur doof, dass ich jedes Mal nach dem Anwenden des Mappingsets noch eine Sprache auswählen muss à la

{value!?split(',')[--SPRACHINDEX--]}

Stelle mir vor, dass das eigentlich relativ einfach zu lösen wäre. Es geht ja effektiv nur darum, den AddUpdateMappingSet-Step wiederholt auszuführen.

Wir werden das Thema nochmal intern besprechen, ob uns da eine Lösung einfällt. Wir können nichts versprechen, aber melden uns, sobald wir das besprochen haben.

Also wir hätten einen Lösungsvorschlag.

Hier wird ein Datastore-Ansatz benutzt in Kombination dem Mappingset-String. Das ist ein Mappingset, welches direkt im Mapper definiert werden kann, ohne dafür ein Mappingset unter Data Management anzulegen. Quasi ein "on-the-fly Mappingset".


Vorteil:

Man kann alle verschiedenen Technologie-Sprache-Kombinationen zentral in einem Datastore verwalten.
Den AddUpdateMappingset Step braucht man nicht.


1. Erstellen Sie einen Datastore. Die Spalten stellen die verschiedenen Sprachen dar.



2. Für Sie einen Mapper im Flow hinzu, der die Mappingsets pro Sprache erstellt:

hier nochmal in der Detailansicht:


Dieser Step dient dazu, die Mappingset-Strings zu erstellen. Die Gruppierung nach Spalte "datastorename" ist ein Hilfsmittel, um exact eine Zeile zu erhalten.
Der Trick, der das Mappingset erstellt Aggregatfunktion "Alle Werte auflisten". Diese fügt alle gruppierten Werte (die Key=Value Paare) hineinander. Durch den Zeilenumbruch am Ende des Wert-Feldes entsteht ein String, der wie ein Mappingset aussieht.


3. In Ihrem eigentlichen Mapper / SpreadsheetMapper , in dem Sie die Mappingsets verwenden wollen machen sie folgendes:




Dort holen Sie sich das generierte Mappingset aus dem vorherigen Hilfs-SpreadsheetMapper (Schritt 2), in der gewünschten Sprache und fügen das bei Mappingset / Mappingset String ein.

${meta.spreadsheet@SpreadsheetMapper_3.firstRow("DE")}



Die Funktion .firstRow("DE") holt sich den entsprechenden Wert aus der ersten Zeile und nutzt diesen als Mappingset.


Im Beispiel haben wir oben im Wert-Feld mal exemplarisch einen hart-codierten Wert reingeschrieben, um die Funktionsweise zu demonstrieren.


Wenn Sie Unterstützung bei der Umsetzung brauchen, dann können Sie sich gern per Ticket an den Support wenden (das wäre dann kostenpflichtig, da dies den Forensupport übersteigt).