====== CSV Plugin erstellen ======
Diese Beispiele finden Sie auch als Solution in Ihrem StandardTemplates Verzeichnis von Ihrem eBiss System unter:
* .\StandardTemplates\PluginSample\eBiss.PluginSample
In diesem HowTo erfahren Sie, welche Bedingungen für die Umsetzung eines CSV-PlugIns nötig sind. Hierbei gilt es vor allem auf die Struktur der Klassen (In Bezug auf Interface und Attribute) zu achten. Nachfolgend können Sie die Umsetzung anhand einer ORDER nachvollziehen.
Beispielhaft ist also folgende ORDER.CSV mit einem Header und n Positionen gegeben:
SampleOrder;1;test01.txt;2016-09-01 12:10:00;Recipient_123;Sender_4711;DocNumber_2
001;1;123456780;0.88;20
001;2;999999999;0.99;10
SampleOrder;2;test02.txt;2016-09-01 13:07:00;Recipient_123;Sender_4711;DocNumber_3
001;1;999999991;0.22;30
001;2;999999992;0.33;33
Um ein PlugIn für die oben gezeigte Struktur abzubilden, müssen gewisse Voraussetzungen für den Code eingehalten werden, da ansonsten der SDF-Writer letztlich nicht korrekt damit umgehen kann.
Beginnen wir mit der Klasse **SampleOrderDocument**, welche aus dem Interface **IMapObjectRoot** abgeleitet wird.
Innerhalb des Codes besteht das PlugIn immer aus einem Header, und aus einer Liste von Positionen.
Via. dem MapExternalName Attribut können Sie ggfs. Abweichende Namen für den Trigger anpassen.
using System.ComponentModel;
using System.Collections.Generic;
using eBiss.Api;
public class SampleOrderDocument : IMapObjectRoot
{
[MapExternalName("SampleOrder")]
[MapTrigger]
public SampleOrder Header;
}
Innerhalb der Header-Klasse wird nun nicht mehr der Verweis auf das **MapObjectRoot** Interface benötigt, stattdessen erfolgt nun ein Verweis auf das **MapObjectItem**. Letztlich wird eine Liste von Positionen erwartet, die nacheinander durchlaufen werden.
public class SampleOrder : IMapObjectItem
{
[MapFrameDocumentNumber]
public string AuftragsNummer;
[MapFrameValue(MapFrameKeys.ContainerizationFilename)]
public string ContainerisationFilename;
[MapFrameDocumentDate, MapFormat("dd.MM.yyyy")]
public DateTime AuftragsDatum;
[MapFrameDocumentRecipient]
public string LieferantenNummer;
[MapFrameDocumentSender]
public string HerstellerNummer;
public string LieferantenAuftragsNummer;
[MapExternalName("001")]
public List Positionen;
}
Über die [[transformation:mappings:objektdefinition:attribute|]] können Schnittstellenspezifische Informationen abgebildet werden. So legen Sie unter anderem die maximale Länge des Wertes fest oder ob die Entität als required deklariert werden soll, wo die Dokumetennummer steht, etc.
public class SamplePosition : IMapObjectItem
{
public int Pos;
[MapSize(20)]
public string Ean;
public double EK;
public int Menge;
}
===== 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|