Generische Filiale

Die Generische Filiale ist eine frei konfigurierbare Universalschnittstelle für den Datenimport und -export.

Generische Filiale allgemein:
• individualisierbar, flexibel
• vielseitig verwendbar, einsetzbar bzw. anpassbar
• hoher Abstraktionsgrad
• Funktionen werden allgemein gehalten, um für unterschiedliche Datentypen und Datenstrukturen verwendet werden zu können

Generische Filiale (Generischer Import/Export) in Bezug auf VARIO:
• frei definierbare Datenimporte und Datenexporte (Formate: xml, csv, xls*) mit Zugriff auf Dateiverzeichnisse und optionalen Dateiaustausch über FTP und SFTP
• Intervall der automatischen Verarbeitung einstellbar
• Voraussetzung: mind. eine Webshop-Filiale (für evtl. Auftragsimport)

Das Dateiformat wird dabei vom Kunden spezifiziert, bzw. vom Partner mit dem die Daten ausgetauscht werden sollen (Schnittstellenbeschreibung). Die große Stärke dieses Konzepts ist es, dass Daten direkt passend bereitgestellt werden, damit sie in ein anderes Programm importiert werden können. Die meisten anderen Programme geben ein festes Dateiformat vor und es wird ein zusätzliches Programm bzw. ein Dienstleister benötigt, der sich um die Datenkonvertierung kümmert. Dieser Aufwand entfällt bei der VARIO (Ausnahmen: Edifact und BTE, siehe unten).

Weitere Besonderheiten sind die sehr umfangreichen Möglichkeiten der Zeitsteuerung über einfache an die natürliche Sprache angelehnte Regeln und die Möglichkeit ein sehr detailliertes Fehlermanagement zu definieren, um auf unvollständige oder fehlerhafte Daten zu reagieren.

Die Generische Filiale hat Zugriff auf alle Datenbanktabellen, daher können sämtliche Daten aus VARIO importiert bzw. exportiert werden.

Die häufigsten Anwendungsfälle sind:
• Artikeldaten
• Lagerstände
• Preislisten
• Belege (Aufträge, Lieferscheine, Rechnungen)
• Adressdaten
• Export von Bildern für Online Shops
• Logistiksysteme/Versanddienstleister

Dateiformate:
• XML
• CSV
• Excel
• Edifact (in Kooperation mit EDI4ALL)
• BTE (in Kooperation mit FEE)
• Bilder (nur als Export)

Übertragungswege:
• FTP
• SFTP
• http
• Netzlaufwerke
• Lokale Verzeichnisse

Kundeninformationen

Grundsätzlich stehen dem Kunden alle Werkzeuge zur Verfügung, die wir beim Erstellen der Konfigurationen nutzen, so dass er selbst die Mappings erstellen und bearbeiten kann, allerdings raten wir auf Grund der Mächtigkeit und Komplexität der Schnittstelle davon ab.

Da wir Anfragen mit den unterschiedlichsten Formaten bekommen können wir keine pauschalen Aussagen zu den Preisen machen. Wir benötigen vom Kunden Beispieldaten bzw. eine Spezifikation des Dateiformats, um ein individuelles Angebot erstellen zu können. Der Kunde benötigt einen
Pflegevertrag, da für die Nutzung der generischen Filiale stets die aktuellste VARIO-Version benötigt wird.

Die Kundenbetreuung erfolgt je nach Komplexität durch das Consulting oder die Entwicklung. Eine Unterstützung durch die Hotline ist bei dieser Komplexität schlicht nicht möglich. Es handelt sich somit um ein eigenständiges Projekt, dem Kunden wird ein Projektleiter zugewiesen, welcher sich um die nötigen Konfigurationen kümmert. Ist das Modul ‚Generische Filiale‘ einmal erworben, können beliebig viele dieser Universalschnittstellen genutzt werden .

Ablauf der Umsetzung

Aufgrund der vielfältigen Formate und Anforderungen werden die Anbindungen in Form individueller Projekte umgesetzt, welche grob dem folgenden Ablauf folgen:

1. Anforderungserhebung
Zunächst erarbeitet ein Projektbetreuer mit dem Kunden die Anforderungen des Projekts.
• Mit wem sollen Daten ausgetauscht werden? Wie viele Gegenstellen gibt es?
• Welche Daten sollen übertragen werden? Belege, Artikeldaten, Adressen?
• Welches Datenformat soll benutzt werden?
• Wie sollen die Daten übertragen werden?

2. Angebotserstellung
Nach der Sichtung der Beispieldaten bzw. Spezifikation des Dateiformates werden ein individuelles Angebot und ein Zeitplan erstellt.

3. Technische Umsetzung
Im Anschluss an die Auftragserteilung folgt die technische Umsetzung der Schnittstelle. Dazu werden Dateibeschreibungen erstellt welche definieren, wie die Daten von der Generischen Filiale verarbeitet werden müssen.

4. Testphase
Sobald die technische Umsetzung bereit ist folgt ein Testbetrieb, der dazu dient, eventuelle Probleme aufzudecken und die Mitarbeiter des Kunden mit der neuen Schnittstelle vertraut zu machen.

5. Live Betrieb
Nach der erfolgreichen Testphase folgt der Livebetrieb im normalen Alltagseinsatz.

6. Wartung/Pflege
Die Anbindung ist nicht in Stein gemeißelt. Sollten sich neue Anforderungen ergeben oder durch neue Programmversionen beim Geschäftspartner Änderungen erforderlich werden, so sind jederzeit
Anpassungen möglich, um darauf zu reagieren.

Fragenkatalog

Für die Erstellung eines Zeit- und Kostenplans sind einige Informationen notwendig, die mit folgendem Fragenkatalog erarbeitet werden können.

Welche Gegenstellen gibt es?

Als Gegenstelle zählt jede Firma und jedes Programm/Webdienst, mit dem Daten ausgetauscht werden sollen.

Es wird eine Liste mit allen Gegenstellen und ihren Rollen benötigt:
• Firma A (Großkunde)
• Firma B (Lieferant)
• Programm XY (Adressbuch der Telefonanlage)

Welche Daten sollen ausgetauscht werden?

An der Stelle werden für jede Gegenstelle eine Liste der Nachrichtentypen und die Richtung der Übertragung benötigt.

Firma A (Großkunde)
• Import von Bestellungen
• Export von Lieferscheinen
• Export von Rechnungen
• Export von Bestandsmeldungen

Firma B (Lieferant)
• Export von Bestellungen
• Import von Artikelbeschreibungen
• Import von Rechnungen

Programm XY (Adressbuch der Telefonanlage)
• Export der Ansprechpartner mit ihren Telefonnummern

Wie sieht das Dateiformat aus?

Um die Komplexität des Dateiformats und damit den Arbeitsaufwand bei der Umsetzung abschätzen zu können, wird für jede Nachricht (also jeden Punkt der oberen Liste) eine Beispieldatei oder eine Beschreibung des Dateiformats benötigt.

Wie werden die Daten übertragen?

Neben der Frage, welches Protokoll für die Übertragung verwendet wird, ist gegebenenfalls auch die Frage zu klären, wer den Server bereitstellt.

• Firma A (Großkunde): Es wird der FTP Server des VARIO Nutzers verwendet
• Firma B (Lieferant): Es wird der SFTP Server des Lieferanten verwendet
• Programm XY (Adressbuch der Telefonanlage): Die Daten werden auf einem Netzlaufwerk abgelegt

Beim Streckengeschäft:
Werden Reporte benötigt, um Lieferscheine/Rechnungen im Design der Partnerfirma zu drucken?

Gegebenenfalls sind noch organisatorische Punkte zu klären:
• Bereitstellung des Servers für den RS
• Einbindung der Schnittstelle in die Firmenabläufe
• Schulung der Mitarbeiter

Einrichtung

Anlegen einer neuen Filiale

Öffnen Sie den Menüpunkt ‚Filialen verwalten‚ in Ihrer VARIO unter Stammdaten – Filialen/Verkaufskanäle.

Legen Sie eine neue Filiale an und wählen den Filialtyp Webshopreplikation‚ aus, vergeben Sie eine Kurzbezeichnung und wählen die zugehörige Adresse Ihrer Filiale aus:

Filiale anlegen Generische Filiale Webshop

Wechseln Sie in den ReiterWebshop‚ und wählen Sie den WebshoptypGenerisch‚. Desweiteren müssen Sie noch eine Lager-Nr und den Lagerkreis für den Import auswählen:

Filiale Reiter Webshop Generisch Lager Import

Nach dem Speichern der Filiale müssen die entsprechenden Konfigurationen angelegt werden. Diese sind bei jedem Anwendungsfall unterschiedlich. Beim Klick auf ‚Konfiguration anlegen‘ öffnet sich der Mapping-Editor:

Mapping Editor Konfiguration anlegen

Es gibt verschiedene Konfigurationstypen, zu welchen Sie Mappings, Konstanten oder SQL’s hinterlegen können:

Mapping Typ Import Export Adressen Belege

Im Reiter ‚Ausführung‘ kann beispielsweise die Zeitsteuerung vorgenommen werden:

Mapping Zeitregeln Ausführung

Grundlagen des Mappingeditors

Das zentrale Werkzeug zum Erstellen und Bearbeiten der Mappings ist der Mappingeditor.

Mappingeditor Konfiguration XML Import

Der Mappingeditor lässt sich grob in drei Bereiche aufteilen:
• Die obere Leiste
• Den linken Teil mit den Tabs zum definieren des Mappings
• Den rechten Teil für die Hilfe und Ausgabe

Zunächst ist die obere Leiste interessant, die einige elementare Funktionen und Einstellungen enthält.

Über die ersten drei rot eingefärbten Felder werden der Name und die Art des Mappings definiert. Der Typ des Mappings und das Dateiformat sind elementar, damit der Mappingeditor die richtigen Tabs anzeigt.

Der Name hat für die Verarbeitung keine Relevanz, allerdings sollte er trotzdem sinnvoll gewählt werden, da er zum Anzeigen des Mappings in der Mappingverwaltung dient.

Das kleine rote Quadrat in der Mitte der Leiste dient zum aktivieren bzw. deaktivieren des Mappings. Deaktivierte Mappings werden vom Replikationsserver ignoriert.

Über die beiden Buttons rechts oben kann das Mapping (also die Beschreibung des Dateiformats) in eine Datei exportiert werden, um es auf das Kundensystem zu übertragen und dort mit dem zweiten Button wieder zu importieren. Diese Funktion ist ebenfalls nützlich, um vor Änderungen am Mapping ein Backup zu erstellen.

Der untere Teil des Mappingeditors ist in einen linken und einen rechten Teil unterteilt.

Standardmäßig dient der linke Teil der Definition des Mappings und der rechte Teil der Ausgabe, allerdings können die Tabs per Drag and Drop beliebig von der einen auf die andere Seite gezogen werden, um zum Beispiel das Tab mit dem Mapping und das Tab mit der Musterdatei gleichzeitig betrachten zu können.

Besonders nützlich ist das auf dem Screenshot zu sehende Tab Hilfe, welches in einem separaten Tutorial genauer beschrieben wird.
Auf der linken Seite sind die Tabs Ausführung und Übertragung für alle Mappings relevant.

Zunächst zum Tab Übertragung:

Mapping Übertragung Dateiname Verzeichnis

Hier wird definiert welche Dateien importiert bzw. exportiert werden. Beim Import kann im Feld Dateiname der * verwendet werden z. B. *.xml. Beim Export können Platzhalter für das Datum verwendet werden: z. B. export-YYYY-MM-DD-hh-mm-ss.xml

Das Verzeichnis hat zwei Funktionen: Wenn im unteren Teil eine Datenübertragung per (S)FTP gewählt wird, dann dient es als temporäres Arbeitsverzeichnis. Falls die Dateien nur lokal abgelegt werden, dann wird es als Ein-/Ausgabeverzeichnis verwendet.

Archiv: Das Archivverzeichnis dient wie der Name bereits sagt der Archivierung von importierten und exportierten Dateien, da diese normalerweise nach der Verarbeitung aus dem Arbeitsverzeichnis entfernt werden.

Fehler: Im Fehlerverzeichnis werden Dateien abgelegt, bei denen etwas schiefgegangen ist.

Wählt man in der Combobox Übertragung ein Protokoll für die Übertragung aus, dann werden im unteren Teil automatisch die passenden Eingabefelder zum Konfigurieren der Übertragung eingeblendet.

MApping Übertragung FTP

Nachdem die Ausgabe bzw. Übertragung konfiguriert ist kommen wir zum Tab Ausführung.

Mapping Zeitregeln Reihenfolge Ausführung Gruppe

In dem großen rot markierten Feld kann mit Regeln definiert werden, wann das Mapping ausgeführt werden soll. Da die Möglichkeiten zur Zeitsteuerung recht umfangreich sind werden diese in einem eigenen Tutorial genauer erläutert.

Im oberen Teil des Tabs gibt es noch zwei markierte Felder. Die Gruppe dient dazu mehrere Mappings zu gruppieren. Der Hintergrund ist, dass einige Kunden 60 oder 70 Mappings verwenden, was für einen Replikationsserver eine ziemlich große Last bedeuten würde. Daher können die Mappings in mehre Gruppen unterteilt werden und mehrere
Replikationsserver können jeweils eine Gruppe abarbeiten.

Das zweite Feld Reihenfolge bestimmt die Reihenfolge in der die Mappings abgearbeitet werden. Dadurch können Abhängigkeiten berücksichtigt werden. Z. B. das zunächst die Artikel und erst danach die Bestellungen importiert werden.

Die beiden Buttons Zeit zurücksetzen und Ausführung erzwingen dienen zur Steuerung des Replikationsservers.

Bei einem Mapping, welches nur einmal am Tag ausgeführt werden soll wird über den Button „Zeit zurücksetzen“ die Markierung, dass das Mapping bereits ausgeführt entfernt und das Mapping wird beim nächsten Durchlauf des Replikationsservers erneut verarbeitet.

Der Button Ausführung erzwingen deaktiviert einmalig die Zeitsteuerung, so dass das Mapping beim nächsten Lauf des Replikationsservers, unabhängig von Datum, Wochentag und Uhrzeit, auf jeden Fall ausgeführt wird.

Dies sind die Grundlegenden Einstellungen des Mappingeditors, die bei jedem Mapping benötigt werden. Die übrigen Tabs werden im Rahmen weitere Tutorials im jeweiligen Kontext näher erklärt.

Integrierte Hilfefunktion

Die Hilfefunktion im Mappingeditor ist dazu gedacht die Tastenkombination nachzuschlagen, die man gerade braucht oder die Details des gerade verwendeten Befehls nachzulesen.

Beim Start des Mappingeditors wird automatisch das Tab Hilfe angezeigt, in dem die verfügbaren Tastenkombinationen zu sehen sind. Über F1 kann diese grundlegende Hilfe jederzeit aufgerufen werden.

Mapping Hilfe F1 CSV Import

In den Tabs Mapping, Konstanten und SQLs stehen je nach Mappingtyp und Dateiformat Makros und ein Kontextmenü mit passenden Code Elementen zur Verfügung.

Mapping Makro CSV SQL Hilfe

Bei den Makros wird im Editor eine Kurzbezeichnung eingetippt, die durch das Drücken von Umschalt- und Leertaste durch einen größeren Codeblock ersetzt wird.

z. B. wird das Grundgerüst für die externen SQLs, welches im Screenshot zu sehen ist durch die Eingabe von SQLs und der Tastenkombination erzeugt.
Die verfügbaren Makros werden angezeigt, wenn man in das entsprechende Editorfenster klickt und F2 drückt.

Mapping Hilfe String Funktionen SQL Split

Neben den Makros gibt es noch das Kontextmenü, welches besonders bei den Importenbenötigt wird, um die String Funktionen zum Bearbeiten der importierten Daten ins Mapping einzufügen.

Drückt man beim Anklicken eines Punktes im Kontextmenü die STRG Taste, dann wird im Tab Hilfe eine Erklärung zum angeklickten Befehl angezeigt.

Export-Mappings erstellen

Der Universal Export der Generischen Filiale erlaubt es beliebige Daten aus der VARIO 8 Datenbank in Dateien der Typen XML, CSV und Excel zu exportieren.

Beim Erstellen des Mappings spielt das gewünschte Dateiformat zunächst keine Rolle für die Vorgehensweise.

Als Grundlage für den Export werden als erstes die SQLs erstellt, mit denen die benötigten Daten zusammengestellt werden. Aus dem Ergebnis der SQL Anfragen wird dann eine Rohfassung des Mappings generiert, welche im weiteren Verlauf Schritt für Schritt an die Spezifikation des Kunden angepasst wird.

Der erste Schritt ist es ein neues Mapping anzulegen und in der Kopfleiste den Typ Universal Export und das gewünschte Dateiformat auszuwählen.

Wie bereits erwähnt werden zunächst die SQLs definiert, dazu muss das Tab SQLs geöffnet werden. Als Arbeitserleichterung stehen in den Tabs Mapping, Konstanten und SQLs Makros zur Verfügung, mit denen Codeblöcke erzeugt werden können.

Die verfügbaren Makros werden angezeigt, wenn man in das entsprechende Editorfeld klickt und F2 drückt.

Export SQL Makro F2 Hilfe

Auf dem Screenshot sehen wir, dass das Makro sqls ein Grundgerüst für den Export erzeugt, daher geben wir im Editor sqls ein und drücken anschließend gleichzeitig die UMSCHALT- und die LEERTASTE. Durch die Tastenkombination wird aus dem sqls der Codeblock, der auf dem nächsten Screenshot zu sehen ist:

Export SQL Makro Grundgerüst

Analog können mit query weitere Queries für 1:n Relationen erstellt werden usw.

Die SQLs für einen Belegexport könnten folgendermaßen aussehen:

<SQLS>
<QUERY_BEK>
<SQL>
<![CDATA[
select
BEK.ID
, BEK.BELEGNR
, BEK.BELEGDATUM
, BEK.NAME1
, BEK.NAME2
, BEK.RE_NAME1
, BEK.RE_NAME2
, BEK.LS_NAME1
, BEK.LS_NAME2
from bek where bek.adressnr
where bek.adressnr = :adressnr
and bek.belegtyp in (’03‘)
and bek.belegstatus >= ‚3‘
and not exists ( select bek_mov.id
from bek_mov
where bek_mov.bek_id = bek.id
and bek_mov.repliziert_jn=’J‘)
order by bek.belegschluessel
]]>
</SQL>


<QUERY_BEP>
<SQL>
<![CDATA[
select
BEP.ARTIKELNR
, BEP.MENGE
, BEP.EINZELPREIS
from bep
where bep.bek_id = :QUERY_BEK.ID
EXECUTE BLOCK (BEK_ID Integer = :QUERY_BEK.ID)
]]>
</SQL>
</QUERY_BEP>


<SUCCESSSQL_BEK>
<SQL>
<![CDATA[
insert into BEK_MOV (bek_id, repliziert_jn) values ( :QUERY_BEK.ID ,,’J‘)
]]>
</SQL>
</SUCCESSSQL_BEK>


</QUERY_BEK>
</SQLS>

Hinweis: In diesem Tutorial geht es darum die grundlegende Vorgehensweise bei Erstellen eines Exportmappings an einem möglichst einfachen und übersichtlichen Beispiel zu erklären. Aus diesem Grund ist das Mapping auf ein paar Felder zusammen gestutzt und es handelt sich nicht um ein Referenzmapping, das in einem Kundenprojekt verwendet werden sollte.

Besonders auffällig an dem Beispiel ist, dass es sich um eine Mischung aus XML und SQL handelt. Das XML Gerüst dient dazu die SQLs zu strukturieren.

Der Knoten <SQLS> (und das dazugehörende </SQLS>) ist der Wurzelknoten, der den Anfang und das Ende der XML Datei markiert. Dazwischen können wir beliebig viele QUERY_, SUCCESSSQL_ und ERRORSQL_ Knoten erzeugen.

Die QUERY_ Knoten definieren die SQL Anfragen, die uns die Daten für den Export liefern, also ein Select oder einen Execute Block mit Rückgabewerten.

Innerhalb des QUERY_ Knotens können mehrere SQL Knoten stehen, die den auszuführenden SQL Code enthalten, aber auch weitere QUERY_ Knoten und auch SUCCESSSQL_ und ERRORSQL_ Knoten, die nach einem erfolgreichen bzw. fehlgeschlagenen Export ausgeführt werden.

Da SQL Code Sonderzeichen enthält, welche auch von XML verwendet werden muss der SQL Code zwischen den Markierungen <![CDATA[ und  ]]> stehen. Dadurch erkennt der XML Parser, dass es sich um einen Text mit Sonderzeichen handelt und nicht um fehlerhaften XML Code.

Im Beispiel wird zunächst die QUERY_BEK definiert, die die Belegköpfe ermittelt. Auf die verwendeten Filter dieser Anfrage gehen wir weiter unten ein.

Zu jedem Belegkopf benötigen wir auch die Belegpositionen, die uns die QUERY_BEP liefert. Dadurch, dass der Knoten QUERY_BEP innerhalb des Knotens QUERY_BEK definiert wird weiß der Mappingeditor, dass es sich um eine Unterabfrage bzw. 1:n Relation handelt und erzeugt später das Mapping entsprechend.

Interessant ist dabei das

where bep.bek_id = :QUERY_BEK.ID

Über :QUERY_NAME.FELDNAME können wir die Werte der übergeordneten QUERY als Parameter im SQL verwenden und damit die Verknüpfung für die 1:n Relation herstellen.

Ein Hinweis an dieser Stelle: Wird statt eines Selects ein Execute Block verwendet, dann funktioniert die  Übergabe der Werte nur bei den Parametern des Execute Blocks:

EXECUTE BLOCK (BEK_ID Integer = :QUERY_BEK.ID)

Innerhalb des Execute Blocks kann dann mit :BEK_ID gearbeitet werden, aber :QUERY_BEK.ID ist dort nicht verfügbar.

Neben den beiden QUERY_ Knoten gibt es in dem Beispiel noch den Knoten SUCCESSSQL_BEK

Die SUCESSSQL_ Knoten sind an eine QUERY gebunden und werden nach jedem erfolgreich exportierten Datensatz ausgeführt. Analog dazu gibt es auch ERRORSQL_ Knoten für den Fehlerfall.

Der Knoten SUCCESSSQL_BEK dient dazu den jeweiligen Beleg als exportiert zu markieren, in dem in der Tabelle BEK_MOV ein Eintrag erzeugt wird. Über :QUERY_BEK.ID wird wieder die Verknüpfung zum aktuellen Belegkopf hergestellt.

Durch das SuccessSQL erklärt sich auch die exists Bedingung in der QUERY_BEK, da nur die Belege exportiert werden sollen, die noch nicht in der BEK_MOV markiert wurden.

Dann wäre da in der QUERY_BEK noch der Parameter :adressnr, der uns zum nächsten Tab bringt.

Die SQLs sind häufig recht aufwendig und in vielen Fällen sehr ähnlich. Bei Belegen werden fast immer dieselben Felder benötigt und bei Preislisten sind die Ähnlichkeiten noch größer.

Um die SQLs leichter wieder verwenden zu können ohne an zahlreichen Stellen die Adress- oder Kundennummer ändern zu müssen ist es möglich diese als Parameter im Tab Konstanten zu definieren.

Export Konstanten Parameter Grundgerüst

In einem späteren Tutorial gehen wir dann noch darauf ein, wie man die SQLs zentral in einem Master Mapping pflegt und in den Ableitungen nur die Parameter anpasst.

Die Definition der Parameter im Tab Konstanten ist recht simpel. Per Makro params und UMSCHALT + LEER wird das Grundgerüst erzeugt und dann so viele param Knoten definiert wie nötig. Links vom Gleichzeichen steht der Name des Parameters ohne den Doppelpunkt, also in diesem Fall ADRESSNR und rechts der Wert z. B. 100011.

Neben den selbst definierten Parametern stellt der Export auch die Parameter: vonDatum und bisDatum bereit, die einen Zeitraum der Daten festlegen und im Tutorial zum Zeitmapping genauer erklärt werden.

Nachdem die Parameter und die SQLs definiert wurden kann jetzt im Tab SQLs über den Button unten links das eigentliche Mapping generiert werden.

Ab diesem Zeitpunkt kommen die Unterschiede zwischen den Dateiformaten zum Tragen.

XML Export

Beim XML Export entspricht das Mapping weitestgehend der Datei, die erzeugt werden soll. Anstelle der Werte werden Platzhalter in der Form Query_name.Feld eingesetzt und die Knoten, die mehrfach erzeugt werden sollen bekommen als Attribut eine Query zugewiesen.

Der Screenshot zeigt die Unterschiede zwischen Mapping und der erzeugten Datei:

Export XML Ausgabe Mapping Unterschied

Im Mapping auf der linken Seite enthält der Knoten BEK das Attribut QUERY_BEK, daher wird für jeden Datensatz den die Query liefert ein BEK Knoten erzeugt. Das Attribut SUCCESSSQL_BEK weist der Anfrage das SQL zu, das für jeden erfolgreichen Datensatz ausgeführt wird. Der Wert ExternalSQL verweist darauf, dass das SQL im separaten Tab SQLs definiert wurde und nicht wie es früher bei ältern Mappings der Fall war innerhalb des Mappings.

Der exportierte Beleg hat zwei Positionen, daher wurde der Knoten BEP zweimal erzeugt.

In dem Beispiel-Mapping gibt es zwei Besonderheiten:

Zum einen den Knoten Konstante, der zeigt, dass Texte die keinem Query Feld oder Parameternamen entspricht als Konstanten ins die erzeugte Datei übernommen werden.

Ein eher seltener Fall ist die Verwendung von XML Attributen, wie es bei der Belegnummer zu sehen ist, was allerdings nicht weiter stört, da hier genau wie bei normalen XML Knoten einfach der Feldname bzw. die Konstante eingetragen wird.

Abschließend lässt sich zum XML Export sagen, dass es zwei mögliche Vorgehensweisen gibt:

Entweder nimmt man eine Beispieldatei vom Kunden und ersetzt die Musterdaten durch die Platzhalter oder man erzeugt ein Basismapping und passt dieses Schritt für Schritt an die Vorgaben des Kunden an. Wie man vorgeht ist Geschmackssache.

CSV/Excel Export

Da die Mappings für die Formate Excel und CSV bis auf ein Detail identisch macht eine Unterscheidung an dieser Stelle keinen Sinn. Aus Gründen der Lesbarkeit wird im weiteren Verlauf nur noch CSV genannt, aber alles gilt 1:1 auch für Excel.

Export CSV Mapping Ausgabe

Grundsätzlich wird das Mapping für CSV Dateien in Form einer XML Datei beschrieben.

Dabei gibt es 3 Hauptelemente:

Im Wurzelknoten CSV werden einige Grundeinstellungen für die komplette Datei festgelegt. Das Attribut Delimiter definiert das Trennzeichen, dass in der CSV Datei verwendet wird. Da Exceldateien kein Trennzeichen haben ist das Attribut dort nutzlos und kann weggelassen werden. Dies ist das Detail, dass die beiden Formate unterscheidet.

Headline definiert, ob eine Zeile mit Überschriften ausgegeben werden soll.

Quoted legt fest, ob die Werte in Anführungszeichen gesetzt werden. Mögliche Werte sind NO, SINGLE und DOUBLE für keine, einfache bzw. doppelte Anführungszeichen.

Die Recordtype Knoten sind das zweite wichtige Element über das verschiedene Datensatztypen definiert werden können, um z. B. in eine Zeile mit dem Belegkopf gefolgt von N Zeilen mit den dazugehörenden Positionen, danach dann der Kopf vom nächsten Beleg usw. auszugeben.

Eine 1:N Relation zwischen zwei Datensatztypen wie dem Belegkopf und seinen Positionen definiert man, in dem man die Recordtype Knoten in einander schachtelt.

Das dritte Element sind die Column Knoten über die die Spalten definiert werden.

Entscheidend sind hier zum einem der Knoten POSITION, der die Spaltennummer festlegt. Es können dabei sowohl Zahlen (1, 2, 3, …) verwendet werden, als auch die Excel Spaltennummerierung (A, B, C, …, Z, AA, AB, …). Da CSV Musterdateien häufig mit Excel geöffnet werden und auch oft viele leere Spaten enthalten hat sich die Excel Nummerierung bewährt.

Wichtig ist dabei, dass bei Export ausschließlich die Position als Kriterium für die Reihenfolge der Spalten genommen wird. Die Reihenfolge der Column Knoten im Mapping kann frei gewählt werden und ausgelassene Spaltennummern werden automatisch durch leere Spalten aufgefüllt. Bei mehreren leeren Spalten am Ende muss lediglich die letzte Spalte definiert werden, damit der Export erkennt wie viele leere Spalten er ausfüllen muss.

Der Knoten Databasefield gibt an was in die Datei geschrieben werden soll. Hier können entweder Verweise auf die Queries stehen oder Konstanten.

Der Knoten Name ist optional und dient dazu Überschriften für die Spalten zu definieren, falls in der Wurzel Headline auf YES gesetzt wurde. Die Überschrift macht nur in Fällen Sinn, in denen lediglich ein Datensatztyp definiert wurde.

Testen

Nachdem das Mapping erstellt wurde beginnt die Testphase. Um mit den Tests beginnen zu können müssen im Tab Ausführung die Verzeichnisse gesetzt werden, da bei einigen Tests im Hintergrund temporäre Dateien erstellt werden.

Die Testfunktionen sind im rechten Teil des Editors im den Tabs Ausgabe und Log zu finden. Das Tab Ausgabe dient dazu die generierten Dateien anzuzeigen. Bei XML Dateien wird die Datei angezeigt bei CSV und Excel Dateien gibt es die Möglichkeit zwischen der Textansicht und einer Gridansicht hin und her zu schalten.

Im Tab Log werden die Meldungen des Exports ausgegeben, wie z. B. Hinweise zu fehlerhaften SQLs.

Unten rechts sind bei beiden Tabs zwei Buttons Testen und Ausführen zu finden.

Der Button Testen gibt im Ausgabe Tab den Inhalt der zu erzeugenden Datei aus. Im Test Modus werden weder die Success- und ErrorSQLs ausgeführt noch Dateien erzeugt.

Der zweite Button Ausführen führt das komplette Mapping exakt so aus, wie es der Replikationsserver tun würde, inklusive Zeitprüfung, aller Success und ErrorSQLs, dem Erzeugen und gegebenenfalls auch Übertragen der Datei auf den (S)FTP Server. Die Funktion kann zum manuellen Ausführen von Mappings genutzt werden, allerdings ist der Hauptzweck beim Erstellen von Mappings den ständigen Wechsel zwischen Mappingeditor und Replikationsserver zu sparen.

Die Auswahlbox für das Testdatum dient zum Testen der Zeitsteuerung und zur Prüfung, ob der Zeitraum der exportierten Daten stimmt. Näheres dazu ist im Tutorial zur Zeitsteuerung zu finden.

Import-Mappings erstellen

Die Generische Filiale bietet verschiedene Importe wie den Universal Import, den BEK, BSK und ART Import an. Technisch basieren alle auf dem Universal Import und unterscheiden sich lediglich dadurch, dass einige Konstanten automatisch gesetzt werden, um die Arbeit beim Erstellen des Mappings zu erleichtern, daher wird in den Tutorials nur zwischen den Dateiformaten unterschieden, die unterschiedliche Mappings benötigen.

Da sowohl CSV als Excel Dateien die Daten in Tabellenform speichern werden beide Formate von Generischen Filiale gleich behandelt. Der einzige Unterschied ist die Definition des Trennzeichens, die bei Exceldateien überflüssig ist. Daher können die Informationen aus diesem Tutorial 1:1 bei Exceldateien angewendet werden, auch wenn im weiteren Verlauf der Einfachheit halber nur noch CSV erwähnt wird.

Import von CSV/Excel-Dateien

Grundsätzlich gibt es bei Tabellen zwei Möglichkeiten Daten einer 1:n Relation zu speichern

Bei der ersten Variante werden verschiedene Datensatztypen definiert, die am Anfang entsprechend gekennzeichnet sind.

CSV Import mit join Kopf Positionen

In dem Beispiel folgen auf einen Belegkopf die dazugehörenden Positionen und danach geht es mit dem nächsten Beleg weiter.

Die zweite Variante entspricht einem SQL Join der Tabellen

CSV Import mehrere Datensätze

In dem Beispiel werden die ersten Spalten mit den Daten des Belegkopfs bei jeder Position wiederholt.

Die Generische Filiale kann beide Varianten verarbeiten, allerdings müssen im Mapping ein paar Besonderheiten beachtet werden, damit die Daten korrekt verarbeitet werden können.

Variante 1: CSV mit mehreren Datensätzen

Dazu gehen wir ins Tab Mapping und klicken auf Mapping erstellen.

CSV Import  Mapping erstellen

Der Assistent generiert ein Grundgerüst für das Mapping.

CSV Import CSV Grundgerüst erzeugen

Da CSV-Dateien wegen der besseren Lesbarkeit gerne mit Excel geöffnet werden kann die Buchstaben Spaltennummerierung von Excel auch in der Generischen Filiale verwendet werden. Bei der Anzahl der Spalten wird dann einfach der Buchstabe der letzten Spalte eingetragen anstatt nachzuzählen, dass BY Spalte 77 ist.

Über den Haken Excel Spaltennummerierung kann festgelegt werden, ob die Spalten im Mapping Numerisch oder im Excel Stil durchnummeriert werden. Beide Varianten können auch beliebig gemischt werden.

In der Tabelle werden die Kennungen der Datensätze und die jeweilige Anzahl der Spalten eintragen.

Danach wird mit dem Button Erzeugen das Mapping Gerüst generiert.

Für jeden Datensatztyp wird ein RecordType Knoten angelegt, der pro Spalte einen Column Knoten enthält.

CSV Import CSV mehrere Datensätze Grundgerüst

Als Erklärung dazu ein paar technische Hintergrund Informationen:

Der CSV Import speichert die Datei zunächst in einer Baumstruktur zwischen. Dabei wird für jeden Beleg ein Knoten angelegt, der dann wiederum die dazugehörenden Positionen als Unterknoten enthält. Nachdem der Baum eingelesen wurde werden die Daten dann Daten aus den Belegknoten in die Tabelle RWEB_BEK und die Positionen in die RWEB_BEP (Tabellen für den Webshopimport) geschrieben.

Durch die Baumstruktur ist es möglich zwischen die Referenzen zwischen beiden Tabellen herzustellen.

Die RecordType Knoten haben einige weitere Besonderheiten. Um in der Datenbank die Positionen mit dem Belegkopf zu verknüpfen muss in der RWEB_BEP.BEK_ID die ID des RWEB_BEK Datensatzes eingetragen werden.

Dies wird dem Import über das Attribut REFERENCE=“RWEB_BEP.BEK_ID = RWEB_BEK.ID“ mitgeteilt. Da der Import intern mit einem update or insert arbeitet muss ebenfalls ein Matching festgelegt werden, damit der Import feststellen, ob es ein Neuer oder ein aktualisierter Datensatz ist. Dies passiert über MATCHING=“RWEB_BEK.(EXT_REFERENZ).

Bei den Spezialimporten wie dem BEK Import entfallen das Matching und die Referenzen, da sie automatisch gesetzt werden. Notwendig sind sie lediglich beim Universal Import.

Es können auch SQLs für die Verarbeitung der Daten und zur Fehlerbehandlung in den RecordType Knoten definiert werden, aber dies wird in separaten Tutorials näher erläutert.

Variante 2: CSV-Dateien mit Join

Bei Tabellen die wie ein Join aufgebaut sind ist die Vorgehensweise zum Generieren des Grundgerüsts ähnlich.

Zunächst rufen wir den Assistenten zum Generieren des Grundgerüsts auf.

CSV Import join Mapping erzeugen

Diesmal wird nur ein Datensatz definiert und die ID des Datensatzes leer gelassen.

In dem erzeugten Mapping müssen jetzt noch von Hand die Spalten, die zur Belegposition gehören mit einem <subtable> </subtable> umschlossen werden.

CSV Import 9.png

Im Subtable Knoten müssen dann analog zum RecordType das Matching und die Referenzen eingetragen werden.

Um zu erkennen ob es sich bei einer Zeile um die nächste Position des aktuellen Belegs handelt oder um die erste Position eines neuen Belegs handelt müssen einige Spalten als KeyField markiert werden. Am besten eignen sich dafür die Belegnummer und die Positionsnummer. Wenn sich das Keyfield ändert wird ein neuer Beleg erkannt. Aus technischen Gründen muss auch bei den Positionen ein Keyfield markiert werden.

Zuordnung der Daten

Nachdem das Grundgerüst erstellt wurde und auch die Relationen definiert sind müssen nur noch die Spalten zu den Datenbankfeldern zugeordnet werden.

Die Column Knoten enthalten zwei wichtige Knoten: position definiert die Spaltennummer in der Datei. Die Reihenfolge der Column Knoten spielt keine Rolle und nicht genutzte Spalten können weggelassen werden.

Im Databasefield wird das Datenbankfeld eingetragen in das die Daten geschrieben werden sollen.

Wenn alle Felder zugeordnet sind folgt der Test des Mappings. Dazu wird im Tab Ausgabe der Button Testen geklickt.

CSV Import 10.png

Auf dem Screenshot ist das Ergebnis der Testfunktion zu sehen. Wie bereits erwähnt werden die Daten in einer Baumstruktur zwischen gespeichert. Beim Testen wird diese Baumstruktur ausgeben, ohne dass Änderungen an der Datenbank vorgenommen werden. Dadurch sieht man, was der Import in die Datenbank schreiben würde und kann die Daten entsprechend aufarbeiten.

Fehlermeldungen sind in Tab Log zu finden.