====== 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>
<200 Articlenumber="4712" Number="2" Amount="22" Price="9.87" Note1="Note1" Note2="Note2" >
200>
100>
===== Alternatives Beispiel =====
Ein alternatives Beispiel findet sich unter [[howtos:plugins:csvplugin|]].