CSV Plugin erstellen

Diese Beispiele finden Sie auch als Solution in Ihrem StandardTemplates Verzeichnis von Ihrem eBiss System unter:

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<SamplePosition> Positionen;
    }

Über die Datentyp 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

Hinweis: Das Verarbeiten von CSV-Dateien mit Zeilentypen erfordert eine spezifische Einstellung der Lesekomponente vom Entitätstyp. Die Wesentlichen Parameter sind hier:

Parametername Wert
SeparatorSemicolon
RecordTagPosition0
StartAtLine1