====== Beispiel für Integration via Dateiaustausch mit CSV Dateien und unterschiedlichen Zeilentypen ====== Sie finden das Beispiel unter StandardTemplates\PluginSample\FlatFile.Sample. Im folgenden Beispiel wird der Klassenaufbau eines ORDER-Objekts für eine Integration mit CSV Dateien und fünf unterschiedlichen Zeilentypen dargestellt.\\ Die Zeilentypen stehen in der ersten Spalte der jeweiligen Zeile und lauten: - 100((= Kopfinformationen)) - 200((= die Positionen)) Die Klasse **ORDER** implementiert die Schnittstelle **IMapObjectRoot**. Da Mappingobjekte als Baumstruktur aufgebaut sind, bildet die Schnittstelle **IMapObjectRoot** die oberste Instanz dieser Baumstruktur. Die Variablen, welche mit dem Schlüsselwort **public** innerhalb der Klasse deklariert sind, werden als Segmente innerhalb der Objektbaumstruktur als Datenelemente dargestellt.\\ Die Klasse **Kopf** beinhaltet die Kopf-Informationen der ORDERS und implementiert die Schnittstelle **IMapObjectItem**. Diese darf nur einmal je Datei vorkommen. Die Klasse **Position: ** bildet hier die Items-Liste des ORDERS-Objektes ab. Sie implementiert ebenfalls die Schnittstelle **IMapObjectItem**, welche die Objekte der Item-Liste repräsentiert. Diese können im sog. **Arraylist Items** der Klasse **Position** mehrfach enthalten sein, während die Kopf nur einmal vorhanden sind. {{:images:sign_warning.png?nolink|}}**Hinweis:** Für die Automatisierte Verarbeitung bzw. Erkennung von Entitätstypen sind entsprechende Einstellungen in den [[prozessdefinition:repositorien:start]] zu tätigen. ===== Lesekomponenten Einstellung ===== {{:images:sign_warning.png?nolink|}}**Hinweis:** Das Verarbeiten von CSV-Dateien mit Zeilentypen erfordert eine spezifische Einstellung der Lesekomponente vom Entitätstyp. Die Wesentlichen Parameter sind hier: ^Parametername ^ Wert^ |Separator|Semicolon| |RecordTagPosition|0| |StartAtLine|1| ===== Beispiel C# Code ===== {{:images:sign_warning.png?nolink|}}**Hinweis:** using eBiss.Api; namespace Pranke.CSV.Sample { public class ORDER: IMapObjectRoot { [MapTrigger,Description("Kopf"),MapExternalName("100")] public Kopf Kopf; } public class Kopf: IMapObjectItem { [MapSize(40)] public String Lieferadresse; [MapSize(25)] public String ContactPerson; [MapSize(10)] public String CustomerRef; [MapSize(3)] public String CurrencyCode; [MapSize(4)] public String Year; [MapSize(2)] public String Month; [MapSize(2)] public String Day; [MapSize(35)] public String Text1; [MapSize(35)] public String Text2; [MapListType(typeof(Position)),Description("Position"),MapExternalName("200"),MapRequired] public ArrayList Position; } public class Position: IMapObjectItem { [Description("Pos.-Number"),MapSize(3)] public String Number; [Description("ext. Articlenumber"),MapSize(15)] public String Articlenumber; [MapSize(10)] public String Amount; [MapSize(11)] public String Price; [Description("Note1"),MapSize(13)] public String Note1; [MapSize(35)] public String Note2; } } ===== Beispiel CSV Datei Inhalt ===== 100Karlstraße 16b | D-76133 Karlsruhe Pranke 4711K EUR20181 1 Text1 Text2 2001 4711 10 10.4 Note1 Note2 2002 4712 22 9.87 Note1 Note2 ===== Example XML file content ===== <100 Debitorennummer=1 Lieferadresse="Karlstraße 16b | D-76133 Karlsruhe" ContactPerson="Pranke" CustomerRef="4711K" CurrencyCode="EUR" Year="2018" Month="1" Day="1" Text1="Text1" Text2="Text2"> <200 Articlenumber="4711" Number="1" Amount="10" Price="10.4" Note1="Note1" Note2="Note2" > <200 Articlenumber="4712" Number="2" Amount="22" Price="9.87" Note1="Note1" Note2="Note2" > ===== Alternatives Beispiel ===== Ein alternatives Beispiel findet sich unter [[howtos:plugins:csvplugin|]].