CSV-Datei in Master/Child-Datastore schreiben

Hallo,


wir bekommen von einem Softwarehersteller csv-Dateien mit Auftragsinformationen in folgendem Format:

HEAD;4;30134711;27-7-2020;Test;;Test;Auftrag
LINE;0;54092;1,000;193,66;Stück;0,00;
LINE;1;54096;1,000;87,85;Stück;0,00;

Pro Auftrag erhalten wir eine Datei, welche in einem gemeinsamen FTP-Ordner gespeichert werden. Der Dateiname entspricht der Auftragsnummer (im Beispiel: 4.csv)


Nun wollen wir mit Synesty diese csv-Dateien einlesen und im Datastore speichern. Der Master-Datastore soll die Auftragsköpfe, der Child-Datastore die Auftragspositionen speichern.


So soll das anschließend aussehen:

Master-Datastore

image


Child-Datastore

image


Unser Problem ist nun, dass die eindeutige Bestellinformation (Auftragsnummer) nur in der ersten Zeile steht. Im Beispiel ist dies die "4". Auf Positionsebene haben wir diese Information nicht. Uns fehlt somit die Zuordnung.

Gibt es dafür eine Lösung?

Welche Steps sind dafür notwendig?

Nutze ich den "FTP Download"-Step, dann erhalte ich eine Liste mit Kopf- und Positionsdaten gemischt, kann bei den Positionen aber keinen Bezug mehr zum Kopf herstellen.


Wir sind für jede Hilfe dankbar.


Viele Grüße

Thorsten

Hallo Thorsten,


zu diesem Problem haben wir tatsächlich schon ein nützliches Coobook: https://synesty.freshdesk.com/a/solutions/articles/11000062686?lang=de

Du musst im Prinzip die beiden Funktionen SetVariable und GetVariable verwenden. Für dein Problem könnte das Skript wie folgt aussehen:

<#if Zeilentyp == "HEAD">
${setVariable("Auftragsnummer",Auftragsnummer)}
<#else>
${getVariable("Auftragsnummer")}
</#if>

Damit schreibst du dir dann in einer Hilfsspalte an den Positionen die Auftragsnummer und kannst diese dann anschließend im DatastoreWriter als master_identifier nutzen.


Viele Grüße,

Lukas

Hallo Lukas,


perfekt!!! :-)

Vielen Dank, es hat jetzt geklappt.


Viele Grüße

Thorsten