Kaufmännische Software für Handel, Handwerk und Produktionsbetriebe
Die optionale XML-Schnittstelle in der Warenwirtschaft EULANDA® kann zum einen XML-Daten über einen Dialog im- bzw. exportieren zum anderen aber auch programmatisch z.B. über VbScript oder PascalScript angesteuert werden.
Die XML-Schnittstelle dient zum Austausch von EULANDA®-Anwendern untereinander aber auch zum Import bzw. Export von und nach Fremdsystemen. So ist es über die XML-Schnittstelle möglich Artikelstammdaten oder Bereiche davon mit einem anderen EULANDA®-Anwendern auszutauschen oder beispielsweise Kundenaufträge aus einem EULANDA®-System als Eingangs-Bestellung in ein anderes EULANDA®-System zu überführen und so Warenflüsse und Verrechnungen von verschiedenen Firmen untereinander abzubilden (=Intercompany-Verrechnungen).
Die XML-Schnittstelle bietet aber auch eine einfache Möglichkeit die Artikelbestände an einen Internet-Shop oder ein eCommerce-System zu übertragen und Aufträge aus einem Shop-System zu übernehmen. Eine XML-Datei kann hierzu eine beliebige Anzahl von Aufträgen in einer Datei enthalten aber auch alle damit verknüpften Datenobjekte wie beispielsweise Adressen die mit dem Auftragskopf verknüpft sind oder die Zahlungsbedingungen, die mit einer Adresse verknüpft sind.
Um einen automatisierten XML-Import zu erleichtern, kann EULANDA® mit einem
Kommandozeilenparameter aufgerufen und dazu angewiesen werden eine
EULANDA.XML
-Datei einzulesen und sich nach dem Import selbst wieder zu beenden.
Die meisten der Informationen und Beispiele setzen mindestens die Version EULANDA® 2010 Rev. 4.1 voraus.
Die Ein- und Ausgabedatei heißt standardmäßig EULANDA.XML
und beginnt
immer mit dem Root-Namen EULANDA
sowie einem METADATA
-Knoten. Die
eigentlichen Daten werden in Listenobjekten verpackt und enthalten dann
jeweils die diesen Listen zugeordneten Objekte. Innerhalb der Objekte werden
dann die nativen Feldnamen der EULANDA®-Tabellen verwendet.
<?xml version="1.0" encoding="WINDOWS-1252"?>
<EULANDA>
<METADATA>
<VERSION>1.1</VERSION>
<GENERATOR>EULANDA</GENERATOR>
<DATEFORMAT>ISO8601</DATEFORMAT>
<FLOATFORMAT>US</FLOATFORMAT>
<FIELDNAMES>NATIVE</FIELDNAMES>
<DATE>2011-04-13T14:05:12</DATE>
<PCNAME>MusterPC</PCNAME>
<USERNAME>Mustermann</USERNAME>
<DATABASEVERSION>4.69</DATABASEVERSION>
</METADATA>
<LISTENOBJEKT>
<OBJEKT>
</OBJEKT>
</LISTENOBJEKT>
.
.
.
</EULANDA>
Werden immer in Großbuchstaben dargestellt.
Fließkommawerte, wie Beträge, werden im Format #.## angegeben. Der
Dezimalpunkt wird also als Trenner zwischen dem ganzzahligen und dem
gebrochenen Teil des Betrags verwendet. 1000er-Trennungen sind nicht
zulässig. Im METADATA
-Bereich wird derzeit nur das Format
US
unterstützt.
Datumswerte werden im Format YYYY-MM-DD und die Zeit im Format HH:MM:SS dargestellt. Wird in einem Feld Datum und Zeit dargestellt so werden diese beiden Felder mit dem Buchstaben T getrennt, also YYYY-MM-DDTHH:MM:SS. Im METADATA-Bereich wird derzeit nur das Datumsformat ISO8601 unterstützt.
Mehrzeilige Texte können einfache HTML-Tags für Fettdruck, Unterstreichung usw. enthalten. Ebenso können mehrere Sprachabschnitte, die in eckigen Klammern stehen voneinander getrennt angegeben sein. In den Klammern wird die ISO-Kennung des Sprachabschnittes angegeben. Dies kann zum Beispiel [EN] für Englisch sein. Die ISO-Kennung wird stets in einer eigenen Zeile angegeben.
Eingebettete Bilder werden in BASE64 kodiert und im Format JPEG verwendet.
Wird die XML-Datei über die Oberfläche unter Zubehör
und dort unter
XML-Schnittstelle
importiert oder exportiert so lautet der Dateiname stets
EULANDA.XML
und die Datei wird auf das Desktop abgelegt.
Wird die XML-Datei über die Kommandozeile verarbeitet so lautet der Name
ebenfalls EULANDA.XML
wird aber immer im Laufwerk C:\
erwartet.
Lediglich bei programmatischen Aufrufen über ein Script kann der Dateiname frei gewählt werden.
Zur Zeit werden folgende Listenobjekte bzw. Objekte unterstützt, wobei
die Objekte wie Artikel dann innerhalb einer Liste beliebig oft wiederholt
werden können. Ein Objekt kann in der EULANDA®-Datenbank nur angelegt werden,
wenn eventuell abhängige Objekte bereits in der Zieldatenbank existieren oder diese in der XML-Datei mit
enthalten sind. So kann zum Beispiel ein Artikel der eine Warengruppe
enthält nur importiert werden, wenn die betreffende Warengruppe in den
Konstanten in der Tabelle KonWG
auch existiert order wenn diese im Objekt
KonWG
der selben XML-Datei mit übertragen wurde.
Gleiches gilt für Aufträge die in den Positionen Artikel enthalten. Wird beispielsweise in einem Auftragspositions-Objekt ein Artikel aufgeführt, der aber nicht im Zielsystem existiert muss dieser Artikel in jedem Fall im Objekt Artikel enthalten sein. Fehlen Unterobjekte wird der XML-Import mit einer Fehlermeldung beendet.
Achtung
XML-Tags oder Feldnamen die nicht definiert oder beschrieben sind, müssen
vom System welches die Daten importiert ignoriert werden.
Die folgende Beschreibung der Objekt und Feldnamen stellt nur einen Auszug dar. Einige der Objekte wie zum Beispiel das SHOP- oder LAGER-TAG können nur über das EULANDA® Script-Interface exportiert werden. Ebenso gibt es Objekte und auch Felder, die nicht importiert werden können, wie zum Beispiel Steuerfelder oder berechnete Felder.
NATIVESunterstützt, was bedeutet, dass die Feldnamen in der XML-Datei die nativen Feldnamen der EULANDA®-Datenbank sind.
(eindeutiger Import-Schlüssel: NAME [ID.ALIAS] )
(eindeutiger Import-Schlüssel: ERLOESGR [ERLOESGR.ALIAS] )
(eindeutiger Import-Schlüssel: GR [GR.ALIAS] )
(eindeutiger Import-Schlüssel: NAME [ID.ALIAS] )
(eindeutiger Import-Schlüssel: IBAN [ID.ALIAS] )
(eindeutiger Import-Schlüssel: MATCH [ID.ALIAS] )
(eindeutiger Import-Schlüssel: ARTNUMMER [ID.ALIAS] )
(Das LAGER-Tag ist optional)
(Der JUMBO-Tag ist optional und gibt eine Stückliste an)
(Wenn ein JUMBO Im SHOP-Tag als Masterartikeldefiniert ist, bedeutet es, dass die Gesamtstückliste aus vielen Dimensionen zusammengesetzt werden muss. Also aus allen verfügbaren Dimensionen, die in allen Masterartikeln des Sets vorkommen. Hierbei sind gleiche Dimensionen (z.B. Farben) zusammenzufassen. Wird zum Jumboartikel im SHOP-Tag eine andere Auswahl der Dimensionswerte angegeben (z.B. weniger Farben), so darf dieser Stücklistenartikel nur in den damit begrenzten Dimensionen erstellt werden.)
(Enthält eine Liste von Merkmalen (Katalogen) in denen der Artikel enthalten ist. Optional)
(Das SHOP-Tag ist optional)
(eindeutiger Import-Schlüssel: Die Kopfnummer (=Auftragsnummer) wird beim Import neu vergeben
Die Rechnungsadresse wird mit ADRESSEID.ALIAS und die Lieferadresse mit LADRESSEID.ALIAS verknüpft )
(eindeutiger Import-Schlüssel: POSNUMMER, der Artikel wird mit ARTIKELID.ALIAS verknüpft )
(eindeutiger Import-Schlüssel: Die Kopfnummer (=Angebotsnummer) wird beim Import neu vergeben
Die Rechnungsadresse wird mit ADRESSEID.ALIAS und die Lieferadresse mit LADRESSEID.ALIAS verknüpft )
(eindeutiger Import-Schlüssel: POSNUMMER, der Artikel wird mit ARTIKELID.ALIAS verknüpft )
Die aktuellen Feldnamen erhalten Sie, indem Sie eine aktuelle Version von
EULANDA® installieren und dort unter Zubehör
mit der XML-Schnittstelle
beispielsweise einen Auftrag nach XML exportieren. Zusätzlich finden Sie
unter Systemverwaltung
das Modul SQL-Designer
, mit dem Sie die
komplette Struktur der EULANDA®-Datenbank inkl. aller Datentypen anzeigen zu
lassen sowie beliebige SQL-Querys (=SQL Abfragen) starten können. Die zu
dieser EULANDA®-Version gültige Datenbankversion (s. METADATA)
finden Sie innerhalb von EULANDA® unter Hilfe und dort unter
Systemverwaltung. Die dritte Ziffer ist die Datenbankversion (Beispiel: 4.0.69.5687),
währen die erste Ziffer die Hauptnummer der Programmversion ist. Zur
Programmversion 4.0.69.5687 ist also die
Datenbankversion 4.69.
Intern werden die Tabellen von EULANDA® mittels einer
numerischen ID verknüpft. Um externe erstellte Daten jedoch importieren zu
können, muss pro Tabelle ein eindeutiger sprechender Schlüssel
verwendet werden. Der Feldname dieses Schlüssels ist am Objektnamen unter
Datentypen
aufgeführt.
Wird beim Import auf einen abhängigen Datensatz verwiesen, dies wäre der Fall wenn im Auftragskopf auf eine Adresse verwiesen wird, so müssen diese Datensätze zusätzlich über ein ID-System verknüpft werden. Der Name des ID-Alias wird mit einem Punkt getrennt und muss immer dem Inhalt des sprechenden Schlüssels entsprechen. Wie der Feldname des Alias heißen muss finden Sie in der Datentypenbeschreibung wieder oben im Dokument.
Wird also zum Beispiel eine Adresse angelegt die als Feld MATCH
den Wert
"MUELLER" hat und wird ein Auftrag mit angegeben, der als Rechnungsadresse
eben auf diesen verweist, so muss die Adresse zusätzlich das Feld ID.ALIAS
mit Wert "MUELLER" enthalten und der Auftragskopf das Feld ADRESSEID.ALIAS
mit
ebenfalls dem Wert "MUELLER".
Das folgende Beispiel zeigt eine einfache XML-Datei, die zwei Artikel
ohne weitere Unterstrukturen enthält. Also auf keine weiteren Erlösgruppen
oder Warengruppen Bezug nimmt. In diesem Fall müssen im Zielsystem bei einem
Import weder diese Gruppen in den Konstanten existieren noch muss eine der
Listen KonErloeskontoListe
bzw. KonWGListe
in der XML-Datei angegeben
werden. Es wurden bewusst nur wenige Felder importiert, wobei das Feld
ARTNUMMER
sowie das Feld ID.ALIAS
bei Artikelübertragungen immer angegeben werden
müssen, obwohl deren Inhalte identisch ist. Ohne das Füllen des Feldes ID.ALIAS
kann Aktualisierung beim Import nicht erfolgen. Interne Verweise z.B.
von Auftragspositionen, verweisen ebenfalls auf dieses Feld.
Der Langtext
wurde umgebrochen um diesen in der Webseite bei
entsprechender Formatierung darstellen zu können. Die importfähige
Beispieldatei kann alternativ
geladen und auch in einer
EULANDA®-Demo-Version über die XML-Schnittstelle importiert werden.
<?xml version="1.0" encoding="WINDOWS-1252"?>
<EULANDA>
<METADATA>
<VERSION>1.1</VERSION>
<GENERATOR>EULANDA</GENERATOR>
<DATEFORMAT>ISO8601</DATEFORMAT>
<FLOATFORMAT>US</FLOATFORMAT>
<FIELDNAMES>NATIVE</FIELDNAMES>
<DATE>2011-04-13</DATE>
<PCNAME>MusterPC</PCNAME>
<USERNAME>Mustermann</USERNAME>
<DATABASEVERSION>4.69</DATABASEVERSION>
</METADATA>
<ARTIKELLISTE>
<ARTIKEL>
<ID.ALIAS>2100</ID.ALIAS>
<ARTNUMMER>2100</ARTNUMMER>
<ARTMATCH>EUL PROFESSIONAL</ARTMATCH>
<BRUTTOFLG>0</BRUTTOFLG>
<VK>450</VK>
<KURZTEXT1>EULANDA Professional</KURZTEXT1>
<LANGTEXT>EULANDA Professional beinhaltet im Grundsystem folgende Module:
Verwaltung der Stamm- und Bewegungsdaten, Staffelpreise, kundenspezifische
Preislisten, Rückstandsverwaltung, Informationssystem, Mahnwesen,
Textsystem, Formulargenerator und verschiedene Standard-Schnittstellen.
Das Grundsystem enthält eine Ein-Benutzerlizenz,
sowie eine Mandantenlizenz für eine Datenbank und das Sprachpaket Deutsch
als Bediener- und die Korrespondenzsprache.
</LANGTEXT>
</ARTIKEL>
<ARTIKEL>
<ID.ALIAS>2301</ID.ALIAS>
<ARTNUMMER>2301</ARTNUMMER>
<ARTMATCH>EUL USER 01</ARTMATCH>
<BRUTTOFLG>0</BRUTTOFLG>
<VK>450</VK>
<KURZTEXT1>Benutzererweiterung</KURZTEXT1>
<LANGTEXT>Benutzererweiterung</LANGTEXT>
</ARTIKEL>
</ARTIKELLISTE>
</EULANDA>
Das Feld VK
ist in der Datenbank von EULANDA® mehrdeutig und kann einen
Netto- oder Bruttowert des Verkaufspreises enthalten. Der Preistyp wird über
das Feld BRUTTOFLG
angegeben. Hat dies den Wert 0
, so ist es ein Nettowert,
also ohne MwSt. Hat das Feld BRUTTOFLG
hingegen den Wert 1
, so handelt es
sich beim Feld VK
um einen Bruttopreis, also einen Wert inkl. MwSt.
Hierdurch können brutto oder nettogenaue Preise übertragen werden, je
nachdem was für den Anwender wichtiger ist.
Das folgende Beispiel enthält minimale Angaben, um einen Auftrag über die XML-Schnittstelle in der EULANDA® Warenwirtschaft anlegen zu können. Hierbei wird komplett auf die bereits gespeicherten Stammdaten zurückgegriffen. Im Beispiel werden als Rechnungsadresse die Firma "SCHMERZ" als existierende Adresse inkl. einer gültigen Zahlungsbedingung erwartet sowie der Artikel "2100" erwartet. Entsprechend kompakt fällt die XML-Datei aus. Alle fehlenden Feldwerte im Auftrag werden automatisch durch die Stammdaten ergänzt. Die Beispieldatei kann alternativ geladen werden.
<?xml version="1.0" encoding="WINDOWS-1252"?>
<EULANDA>
<METADATA>
<VERSION>1.1</VERSION>
<GENERATOR>EULANDA</GENERATOR>
<DATEFORMAT>ISO8601</DATEFORMAT>
<FLOATFORMAT>US</FLOATFORMAT>
<FIELDNAMES>NATIVE</FIELDNAMES>
<DATE>2011-04-13</DATE>
<PCNAME>MusterPC</PCNAME>
<USERNAME>Mustermann</USERNAME>
<DATABASEVERSION>4.69</DATABASEVERSION>
</METADATA>
<AUFTRAGLISTE>
<AUFTRAG>
<ADRESSEID.ALIAS>SCHMERZ</ADRESSEID.ALIAS>
<DATUM>2011-03-29T10:36:10</DATUM>
<AUFTRAGPOSLISTE>
<AUFTRAGPOS>
<ARTIKELID.ALIAS>2100</ARTIKELID.ALIAS>
<POSNUMMER>1</POSNUMMER>
<MENGE>1</MENGE>
</AUFTRAGPOS>
</AUFTRAGPOSLISTE>
</AUFTRAG>
</AUFTRAGLISTE>
</EULANDA>
Dieses Beispiel überträgt also keinen Neukunden, sondern bezieht sich auf einen bereits existierenden Kunden im Kundenstamm. Damit ein solcher Auftrag später in eine Rechnung übertragen werden kann ist es wichtig, dass diese Adresse im Stamm auch ein hinterlegtes Zahlungsziel besitzt.
Das folgende Beispiel enthält eine XML-Datei zur Anlage eines Auftrags in
einer EULANDA® Warenwirtschaft, bei der sich z.B. über ein SHOP-System ein
neuer Kunde registriert hat. Dieser Adresssatz wird als Adresse
-Objekt in der
AdresseListe
übergeben. Bei der Auftragsposition wird jedoch wie im
Beispiel zuvor komplett auf
einen existierenden Artikel im Artikelstamm zugegriffen. Alle fehlenden Feldwerte der Position werden aus dem
Artikelstamm ergänzt. Dies Beispieldatei
kann alternativ geladen werden.
<EULANDA>
<METADATA>
<VERSION>1.1</VERSION>
<GENERATOR>EULANDA</GENERATOR>
<DATEFORMAT>ISO8601</DATEFORMAT>
<FLOATFORMAT>US</FLOATFORMAT>
<FIELDNAMES>NATIVE</FIELDNAMES>
<DATE>2011-04-13</DATE>
<PCNAME>MUSTERPC</PCNAME>
<USERNAME>MUSTERMANN</USERNAME>
<DATABASEVERSION>4.69</DATABASEVERSION>
</METADATA>
<ADRESSELISTE>
<ADRESSE>
<ID.ALIAS>SCHMERZ</ID.ALIAS>
<MATCH>SCHMERZ</MATCH>
<NAME1>""</NAME1>
<NAME2>Firma</NAME2>
<NAME3>Autohaus Schmerz</NAME3>
<NAME4>""</NAME4>
<STRASSE>Quietschweg 32</STRASSE>
<LAND>D</LAND>
<PLZ>38644</PLZ>
<ORT>Schlidder</ORT>
<TEL>02345-32434</TEL>
<FAX>02345-32405</FAX>
</ADRESSE>
</ADRESSELISTE>
<AUFTRAGLISTE>
<AUFTRAG>
<ADRESSEID.ALIAS>SCHMERZ</ADRESSEID.ALIAS>
<AUFTRAGPOSLISTE>
<AUFTRAGPOS>
<ARTIKELID.ALIAS>2100</ARTIKELID.ALIAS>
<POSNUMMER>1</POSNUMMER>
<VKRAB>350</VKRAB>
<MENGE>1</MENGE>
</AUFTRAGPOS>
</AUFTRAGPOSLISTE>
</AUFTRAG>
</AUFTRAGLISTE>
</EULANDA>
Im obigen Beispiel wurde der Stammdatenpreis von 350,00 EUR als VkRAB
übertragen. VKRab
ist der rabattierte Einzelpreis. Enthält der Stammdatenartikel
2100
beispielsweise einen Verkaufspreis von 450,00 EUR, so hat der in der XML-Datei
angegebene Positionsbetrag Vorrang und die Differenz von 100,00 EUR würde als
Zeilenrabatt ausgewiesen werden. Der angegebene Preis bezieht sich immer auf die
Preiseinheit, also im Normalfall auf 1 Stück. Möchte man immer den im
Artikelstamm hinterlegen Preis verwenden, so lässt man das Feld VkRAB
einfach
weg.
Wird beim Anlegen eines neuen Kunden kein Zahlungsziel mit angegeben, so
kann ein solcher Auftrag nicht direkt in eine Rechnung umgewandelt werden. Es
ist somit empfehlenswert ein Zahlungsziel mit anzugeben oder dieses ggf.
sogar mit der XML-Datei in der KonZielListe
zu übertragen.
Dieses Beispiel zeigt die Anlage eines Kunden mit einem neuen
Zahlungsziel. Für den Namen des Zahlungsziel wurde SHOP
gewählt. Dieses wird
in der XML-Datei dem Neukunden zugeordnet. Im Auftragskopf wird zusätzlich
das Feld Objekt
verwendet. Die folgende XML-Datei ist ein gutes Beispiel,
wie ein SHOP-System einen Auftrag in XML anliefern könnte, so dass EULANDA®
dieses direkt importieren kann. Dies
Beispieldatei
kann alternativ geladen werden.
<EULANDA>
<METADATA>
<VERSION>1.1</VERSION>
<GENERATOR>EULANDA</GENERATOR>
<DATEFORMAT>ISO8601</DATEFORMAT>
<FLOATFORMAT>US</FLOATFORMAT>
<FIELDNAMES>NATIVE</FIELDNAMES>
<DATE>2011-04-13</DATE>
<PCNAME>MUSTERPC</PCNAME>
<USERNAME>MUSTERMANN</USERNAME>
<DATABASEVERSION>4.69</DATABASEVERSION>
</METADATA>
<KONZIELLISTE>
<KONZIEL>
<ID.ALIAS>SHOP</ID.ALIAS>
<NAME>SHOP</NAME>
<ZIELTAGE0>15</ZIELTAGE0>
<ZIELTEXT>Zahlbar sofort rein netto ohne Abzug.</ZIELTEXT>
<ZAHLUNGSART>MISC</ZAHLUNGSART>
</KONZIEL>
</KONZIELLISTE>
<ADRESSELISTE>
<ADRESSE>
<ID.ALIAS>SCHMERZ</ID.ALIAS>
<ZIELID.ALIAS>SHOP</ZIELID.ALIAS>
<MATCH>SCHMERZ</MATCH>
<NAME1>""</NAME1>
<NAME2>Firma</NAME2>
<NAME3>Autohaus Schmerz</NAME3>
<NAME4>""</NAME4>
<STRASSE>Quietschweg 32</STRASSE>
<LAND>D</LAND>
<PLZ>38644</PLZ>
<ORT>Schlidder</ORT>
<TEL>02345-32434</TEL>
<FAX>02345-32405</FAX>
</ADRESSE>
</ADRESSELISTE>
<AUFTRAGLISTE>
<AUFTRAG>
<ADRESSEID.ALIAS>SCHMERZ</ADRESSEID.ALIAS>
<OBJEKT>SHOPBESTELLUNG</OBJEKT>
<AUFTRAGPOSLISTE>
<AUFTRAGPOS>
<ARTIKELID.ALIAS>2100</ARTIKELID.ALIAS>
<POSNUMMER>1</POSNUMMER>
<VKRAB>350</VKRAB>
<MENGE>1</MENGE>
</AUFTRAGPOS>
</AUFTRAGPOSLISTE>
</AUFTRAG>
</AUFTRAGLISTE>
</EULANDA>
Die XML-Schnittstelle kann über iScript
, also VbScript
und JScript
,
Pascal über den Berichts-Designer, die Kommandozeile oder die
Benutzeroberfläche angesteuert werden.
Bei den verschiedensten Methode wird als Parameter ein Datenbankobjektname
erwartet. Dieser lautet in den Beschreibungen DBObject
und
wird als String übergeben. Er entspricht einem Tabellennamen wird aber über
die API in Englisch angegeben um die API international zu halten.
| Datenbankobjekte | Bedeutung |
|---|---|
| * | Bezieht sich auf alle Objektnamen. Die Sternfunktion ist nicht in allen Funktionen verfügbar. Wird ein INFOBOX-Objekt angebunden, so werden entsprechende Fehlermeldungen im Debugfenster ausgegeben. |
| SALESARTICLE | Objektname für die Daten der Tabelle ARTIKEL. |
| SALESADDRESS | Objektname für de Daten der Tabelle ADRESSE. |
| SALESOFFER | Objektname für die Daten der Tabelle ANGEBOT bzw. ANGEBOTPOS. |
| SALESORDER | Objektname für die Daten der Tabelle AUFTRAG bzw. AUFTRAGPOS. |
| PROPERTY | Objektname für den Merkmalbaum in der Tabelle MERKMAL. |
Über Optionen werden über die Funktionen GetOption
und SetOption
gesetzt.
Über die einzelnen Werte lässt sich das Verhalten des gesamten XML-Objekts
bzw. eines einzelnen Datenobjekte beeinflussen. Die Optionen sind nur in
einem speziellen Kontext gültig und werden als String in Großbuchstaben
übergeben.
| Optionen | Bedeutung |
|---|---|
| SHOP | Über die Option SHOP lässt sich ein Export des SHOP-Tags erzwingen, sofern das SHOP-Plugin und damit diverse Tabellen-Erweiterungen vorhanden sind. Diese Option ist nur in Verbindung mit DBObject=SALESARTICLE zulässig. |
| STOCK | STOCK steht für Lager. Über diese Option lässt dich ein Export des LAGER-Tags erzwingen. Hierbei werden zu jedem Artikel der Lagerbestand sowie Verfügbar 1 +2 ausgegeben. Diese Option ist nur in Verbindung mit DBObject=SALESARTICLE zulässig. |
| BOM | BOM steht für BillOfMaterial. Über diese Option lassen sich beim Export die Stücklisten eines Artikels im Unter-Tag "JUMBO" ausgeben. Diese Option ist nur in Verbindung mit DBObject=SALESARTICLE zulässig. |
| ONLYEMPTYRECORDS | Diese Option erlaubt den doppelten Export eines Datenobjekts also einer weiteren oder der selben WHERE-Clause, fügt hier aber die Datensätze an den bestehenden Bestand an. Die Ausgegebenen Daten haben keinen Inhalt udn lediglich die Felder ID.ALIAS und das Schlüsselfeld. Der Sinn dieser Ausgabe ist es zum Beispiel importierenden Systemen zu zeigen, welche Datensätze noch aktuell in Verwendung sind. In einer XML-Datei kann so der Artikelstamm mit Änderungsdaten ausgegeben werden und zusätzlich alle nichtgeänderten Artikel als Leerartikel. Diese Option ist nur in Verbindung mit DBObject=SALESARTICLE zulässig. |
| PROPERTY | Über diese Option lässt sich zu jedem Artikel ein Unter-TAG erzeugen, der die Merkmalpfade in denen der Artikel enthalten ist ausgibt. Diese Option ist nur in Verbindung mit DBObject=SALESARTICLE bzw. SALESADDRESS zulässig. |
| PROPERTYROOT | Über diese Option kann angegeben werden, ab welcher Root ein Merkmalbaum ausgegeben werden soll. Wird nichts angegeben, so wird der gesamte Merkmalbaum des angegebenen Objekts ausgegeben, im anderen Fall nur ein Teilbaum. Diese Option ist nur in Verbindung mit DBObject=SALESARTICLE bzw. SALESADDRESS zulässig. |
| PROPERTYSORTCLEAN | Über diese Option kann angegeben werden, ob Merkmalnamen die Vorziffern zur Erhaltung einer Sortierung haben, beim Export extrahiert werden sollen. Aus einer "001 MeinMerkmal" würde dann "MeinMerkmal". Diese Option ist nur in Verbindung mit DBObject=SALESARTICLE bzw. SALESADDRESS zulässig. |
| OFFSET | Beim Import von Bewegungsdaten kann über OFFSET erreicht werden, dass die Kopfnummer eines Angebots in einen anderen Nummernbereich eingelesen werden soll. Hierüber können Konflikte mit bestehenden Nummern vermieden werden. Diese Option ist nur in Verbindung mit DBObject=SALESOFFER bzw. SALESORDER zulässig. |
| LANGUAGE | Über diese Option kann bestimmt werden ob nur eine bestimmte Sprache in die XML-Datei exportiert werden soll. Die Angabe erfolgt mit den ISO-Kürzeln, also EN,IT, DE usw. |
| PLAINTEXT | Über diese Option kann bestimmt werden ob HTML-Tags für Fettdruck, Unterstreichung usw. beim Export herausgefiltert werden sollen .Die Angabe erfolgt als TRUE oder FALSE. |
Dem XML-Objekt kann eine XML-Datei als String zugeweisen oder vom Dateisystem eingelesen werden. Ebenso lassen sich die XML-Daten in die SQL-Datenbank speichern, also importieren bzw. aus dieser dieser Lesen was dem exportieren entspricht.
| Ein- und Ausgabefunktionen | Bedeutung |
|---|---|
| SaveToString() | Gibt den aktuellen Inhalt des XML-Objekts im XML-Format als Text aus. |
| LoadFromString XmlString | Die Prozedur liest den in XmlString angegebenen XML-Inhalt in das XML-Objekt ein. Die zuvor im XML-Objekt enthaltenen Daten werden überschrieben. |
| SaveToFile FileName | Speichert den aktuellen Inhalt des XML-Objekts in eine XML-Datei. |
| LoadFromFile FileName | Liest eine XML-Datei in das XML-Objekt ein. Die zuvor im XML-Objekt enthaltenen Daten werden überschrieben. Die zulässigen Datenbank-Objektnamen sind zuvor beschrieben. |
| SaveToDB DBObject | Importiert die Daten des XML-Objekts in die SQL-Datenbank für das in DBObject angegebene Objekt. Die zulässigen Datenbank-Objektnamen sind zuvor beschrieben. |
| LoadFromDB DBObject, Where | Exportiert Artikel entweder über eine Where-Clause-Bedingung oder durch die vereinfachte Angabe von Artikelnummern im Parameter from/to. Über ISO kann eine zu exportierende Sprache angegeben werden. FilterHTML gibt an, ob HTML-Tags herausgefiltert werden sollen. |
Über Properties lassen sich direkt die META-Daten des XML-Objekts lesen und schreiben.
| META-Daten | Bedeutung |
|---|---|
| Version | Erlaubt das Lesen und Setzen der Versionsnummer der XML-Struktur welche im META-Tag steht. |
| Generator | Erlaubt das Lesen und Setzen des Namen des Erzeugermoduls, welcher im
Bereich des META-Tags steht. Wird die XML-Datei über das
EULANDA-Oberflächenmodul erstellt, so steht hier beispielsweise EULANDA. Entwickler sollten hier ihr Kürzel verwenden. |
| DateFormat |
Das |
| FloatFormat | Das FloatFormatgibt an, wie Kommazahlenwerte zu interpretieren sind. Zur Zeit wird lediglich USunterstützt. Hier wird das Komma als Dezimalpunkt angegeben. Tausendertrennungen sind nicht zulässig. |
| FieldNames | Über FieldNameswird angegeben wie die Feldnamen anzugeben sind. Zur Zeit ist nur die Angabe NATIVEzulässig, welche die Originalfeldnamen der SQL-Datenbank angibt. |
| Date | Gibt das Erzeugungsdatum ggf. mit Uhrzeit an, zu welchem die XML-Datei erstellt worden ist. |
| PcName | Gibt den PC-Namen an, der die XML-Datei erstellt hat. |
| UserName | Gibt den Loginnamen der Person an, die die XML-Datei erstellt hat. |
| DataBaseVersion | Gibt die Nummer der Datenbankversion der SQL-Datenbank an, die beim Export der XML-Datei verwendet wurde, bzw. die beim Import mindestens erwartet wird. |
Über die Optionen lässt sich das Verhalten des XML-Objekts im Gesamten aber auch auf einzelne Datenbankobjekte beeinflussen. Die möglichen Optionswerte und ihr Gültigkeitsbereich sind weiter vorn beschrieben.
| Optionen-Funktionen | Bedeutung |
|---|---|
| GetOption(DBObject, OptName) | Über diese Funktion lassen sich diverse Einstellungen zum
Gesamtverhalten "*" oder auf ein in DBObject angegebenes Datenbank-Objekt
abrufen. Wird ein im Kontext ungültiger OptNameangegeben und ist das InfoBox-Objekt angebunden, so werden entsprechende Fehler dort angezeigt. Gültige OptNamensind weiter oben im Dokument beschrieben. |
| SetOption DBObject, Optame, OptValue |
Über diese Funktion lassen sich diverse Einstellungen zum Gesamtverhalten
"*" oder auf ein in DBObject angegebenes Datenbank-Objekt setzen. Wird eine
im Kontext ungültige OptNameangegeben und ist das InfoBox-Objekt angebunden, so werden entsprechende Fehler dort angezeigt. Gültige OptNamensind weiter oben im Dokument beschrieben. |
Die Cursor-Funktionen erlauben ein navigieren innerhalb eines bestimmten
Knotens des XML-Objekts. Die möglichen Knotennamen DBObject
sind weiter
oben im Dokument beschrieben.
| Cursor-Funktionen | Bedeutung |
|---|---|
| RecordCount(DBObject) |
Gibt die Anzahl Datensätze zum in DBObjectangegebenen Datenbank Objekt der XML-Datei an. Die zulässigen Datenbank-Objektnamen sind zuvor beschrieben. |
| GetCursor(DBObject) | In den XML-Datenbankobjekten kann man über Cursorfunktionen navigieren. Die
Ausgabe ist der Index innerhalb eines Datenbankobjekts. Der Index hat einen
Gültigkeitsbereich von 0bis RecordCount(DBObject)-1. Der Wert -1bedeutet dass der Cursor ungültig ist (außerhalb des gültigen Bereichs oder dass es keine Records im angegebenen Datenbankobjekt gibt. |
| SetCursor DBObject, Index | Der Cursor kann innerhalb eines XML-Datenbankobjektes an eine
beliebige gültige Stelle gesetzt werden um zum Beispiel Felder der
XML-Datei zu Lesen oder zu Schreiben. Der Index hat einen
Gültigkeitsbereich von 0bis RecordCount(DBObject)-1. Der Wert -1bedeutet dass der Cursor ungültig ist (außerhalb des gültigen Bereichs oder dass es keine Records im angegebenen Datenbankobjekt gibt. |
| EOF(DBObject) |
Bei |
| MoveFirst DBObject |
Der Cursor wird auf den ersten Datensatzes innerhalb der XML-Datei und des angegebenen Datenbank-Objekts gesetzt. |
| MoveLast DBObject |
Der Cursor wird auf den letzten Datensatzes innerhalb der XML-Datei und des angegebenen Datenbank-Objekts gesetzt. |
| MoveNext DBObject | Der Cursor wird auf den nächsten Datensatz innerhalb der XML-Datei und des angegebenen Datenbank-Objekts gesetzt. |
| MovePrevious DBObject | Der Cursor wird auf den vorhergehenden Datensatz innerhalb der XML-Datei und des angegebenen Datenbank-Objekts gesetzt. |
Mit den Datenfeld-Funktionen ist es möglich einzelne Felder des aktuellen Datensatzes zu lesen oder im Wert zu verändern. Neue Felder können angefügt oder es können Felder gelöscht werden.
| Datenfeld-Funktionen | Bedeutung |
|---|---|
| GetField DBObject, FieldName | Das Feld des aktuellen Datensatzes wird ausgegeben. Der aktuelle Datensatz
wird die eine der Cursorfunktionen bestimmt. Über DBObjectwird angegeben auf welches Datenbank-Objekt sich der Befehl bezieht. Die Ausgabe ist stets ein String, so wir er in der XML-Datei enthalten ist. |
| SetField DBObject, FieldName, FieldValue |
Über SetFieldkann innerhalb der XML-Datei ein Feldwert im aktuellen Datensatz geändert werden. Der aktuelle Datensatz wird die eine der Cursorfunktionen bestimmt. Über DBObjectwird angegeben auf welches Datenbank-Objekt sich der Befehl bezieht. Der in Fieldvalue angegebenen Wert ist stets ein String und wird direkt in die XML-Datei an die entsprechende Position geschrieben. |
| FieldExists(DBObject, FieldName) | Hierüber kann geprüft werden ob ein bestimmter Feldname im aktuellen
Datensatz der XML-Datei enthalten ist. Der aktuelle Datensatz wird über eine
der Cursorfunktionen bestimmt. Über DBObjectwird angegeben auf welches Datenbank-Objekt sich der Befehl bezieht. |
| InsertField(DBObject, FieldName, FieldValue) |
Hierüber kann in den aktuellen Datensatz ein neues Feld eingefügt werden.
Der aktuelle Datensatz wird über eine der Cursorfunktionen bestimmt. Über
DBObjectwird angegeben auf welches Datenbank-Objekt sich der Befehl bezieht. Der in FieldValueangegebenen Wert ist stets ein String und wird direkt in die XML-Datei an die entsprechende Position geschrieben. Ist das Feld bereits vorhanden, so liefert InsertFieldden Wert FALSE, im anderen Fall TRUE. |
| DeleteField DBObject, FieldName | Hierüber kann ein Feld innerhalb des aktuellen Datensatzes der XML-Datei
entfernt werden. Der aktuelle Datensatz wird über eine der Cursorfunktionen
bestimmt. Über DBObjectwird angegeben auf welches Datenbank-Objekt sich der Befehl bezieht. |
Mit den Datenfeld-Funktionen ist es möglich einzelne Felder des aktuellen Datensatzes zu lesen oder im Wert zu verändern. Neue Felder können angefügt oder es können Felder gelöscht werden.
| Datensatz-Funktionen | Bedeutung |
|---|---|
| InserRecord(DBObject, KeyValue) | Hierüber kann ein neuer Datensatz in das XML-Objekt zum angegebenen
Datenbank-Objekt angefügt werden. Der eindeutige Schlüssel zu diesem
Datensatz wird in KeyValueangegeben. Wird beispielsweise ein Artikel über das Datenbankobjekt SALESARTICLE angefügt so werden automatisch zwei Felder angefügt. Dies sind ID.ALIASund ARTNUMMER, welche mit dem Wert von KeyValuegefüllt werden. |
Die Funktionsklasse der Sonstigen-Funktionen erlaubt unter anderem das Debuggen oder die Anbindung einer Informationsausgabebox.
| Sonstige Funktionen | Bedeutung |
|---|---|
| Reinizialize | Diese Prozedur wird intern verwendet, sobald eine XML-Datei neu
eingelesen wird. Sie bewirkt eine Synchronisation der DBObjects. Über das Script-Interface muss Sie normalerweise nie aufgerufen werden. |
| Debug | Wurde eine Infobox angebunden, so kann über Debug = TRUEdie Ausgabe aller Debugtexte hierüber veranlasst werden. Die Infobox zeigt in dem Fall die an jede einzelne Funktion übergebenen Parameter sowie die Funktionsergebnisse an. Ebenso ob und wann eine Prozedur betreten oder verlassen wurde. |
| InfoBox | Dieses Property erlaubt das Lesen und Setzen eines Objekt-Pointers der auf eine InfoBox-Instanz zeigt. Ist dieser gesetzt so kann die InfoBox mit internen Ereignissen zur Journalausgabe verwendet werden. |
| MySelf | Dieses Nur-Lese-Property gibt den Objekt-Pointer der eigenen Instanz an. |
Das global instanziierte Objekt ellib
enthält alle notwendigen
Umwandlungsroutinen für Datums- Zeit-, Text-, Fließkomma-, Integer und
Booleanwerte von und nach XML. Die entsprechende Auflistung der Funktionen
finden Sie im Kapitel elLib
des
Entwicklerhandbuchs.
XML-Daten lassen sich auch programmatisch über VbScript importieren. Das folgende Beispiel importiert Artikel über ein VbScript. Sie können das Script- sowie das XML-Beispiel laden und im iScript-Editor der EULANDA®-Warenwirtschaft direkt ausprobieren. Die XML-Datei wird auf dem Desktop erwartet. Das XML-Objekt, welches über die Create-Methode des Client-Objekts instanziiert wird stellt diverse Methoden zum Import und Export von Daten im XML-Format zur Verfügung.
option explicit
dim xmlEul
set xmlEul = Client.CreateObject("XMLLIB")
xmlEul.LoadFromFile Client.Properties("FOLDER.DESKTOP") & "\ARTIKEL.XML"
xmlEul.SaveToDB "SALESARTICLE"
set XmlEul = nothing
<EULANDA> <METADATA> <VERSION>1.1</VERSION> <GENERATOR>VBSCRIPT</GENERATOR> <DATEFORMAT>ISO8601</DATEFORMAT> <FLOATFORMAT>US</FLOATFORMAT> <FIELDNAMES>NATIVE</FIELDNAMES> <DATE>2011-05-19T21:15:09</DATE> <PCNAME>PC</PCNAME> <USERNAME>USER</USERNAME> <DATABASEVERSION>4.69</DATABASEVERSION> </METADATA> <ARTIKELLISTE> <ARTIKEL> <ID.ALIAS>4711</ID.ALIAS> <ARTNUMMER>4711</ARTNUMMER> <KURZTEXT1>This is my shorttext 1</KURZTEXT1> <LANGTEXT>and this my long description</LANGTEXT> <VK>8.12</VK> </ARTIKEL> <ARTIKEL> <ID.ALIAS>0815</ID.ALIAS> <ARTNUMMER>0815</ARTNUMMER> <KURZTEXT1>This is also a shorttext</KURZTEXT1> <LANGTEXT>and by the way... also this is a long description</LANGTEXT> <VK>47.12</VK> </ARTIKEL> </ARTIKELLISTE> </EULANDA>
Microsoft Windows® stellt ein leistungsfähiges XML-Objekt zur Verfügung,
mit dem sich beliebige Daten in das EULANDA®-XML-Format umsetzen und
anschließend mit dem EULANDA®-XML-Objekt importieren lassen. In diesem
Beispiel wird eine XML-Datei mit Metadaten und einer Artikelliste, bestehend
aus zwei Artikeln erzeugt. Die XML-Struktur wird dann dem
EULANDA®-XML-Objekt zugewiesen und die Methode zum Import wird aufgerufen. Für
die Konvertierung von Datums- und Float-, Integer- und Textwerten stellt das ellib
-Objekt
alle notwendigen Methoden zur Verfügung. Das Objekt ellib
muss nicht
extra instanziiert werden, da es sich um ein globales Objekt handelt. Dieses
komplette Beispiel kann als
VBS-Datei geladen werden.
option explicit
main
sub AddElement(xmlDoc, root, ElementName, ElementValue)
dim element
set element = xmlDoc.CreateElement(ElementName)
root.appendChild(element)
root.lastChild.text = ElementValue
end sub
sub main
dim xmlEul, xmlDoc, metadata, root, artikelliste, artikel
set xmlEul = Client.CreateObject("XMLLIB")
set xmlDoc = Client.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False
xmlDoc.loadXML "<?xml version=""1.0"" encoding=""WINDOWS-1252""?>" & vbcrlf &_
"<EULANDA></EULANDA>"
set root = xmlDoc.documentElement
set metadata = xmldoc.createNode(1,"METADATA", "")
root.appendChild(metadata)
AddElement xmlDoc, metadata, "VERSION", "1.1"
AddElement xmlDoc, metadata, "GENERATOR", "Test"
AddElement xmlDoc, metadata, "DATEFORMAT", "ISO8601"
AddElement xmlDoc, metadata, "FLOATFORMAT", "US"
AddElement xmlDoc, metadata, "FIELDNAMES", "NATIVE"
AddElement xmlDoc, metadata, "DATE", ellib.DateTimeToXmlStr(Date+Time)
AddElement xmlDoc, metadata, "PCNAME", "PC"
AddElement xmlDoc, metadata, "USERNAME", "USER"
AddElement xmlDoc, metadata, "DATABASEVERSION", "4.69"
set artikelListe = xmldoc.createNode(1,"ARTIKELLISTE", "")
root.appendChild(artikelliste)
set artikel = xmldoc.createNode(1,"ARTIKEL", "")
artikelliste.appendChild(artikel)
AddElement xmlDoc, artikel, "ID.ALIAS", "4711"
AddElement xmlDoc, artikel, "ARTNUMMER", "4711"
AddElement xmlDoc, artikel, "KURZTEXT1", "Mein Kurztext zu 4711"
AddElement xmlDoc, artikel, "LANGTEXT", "Mein Langtext zu 4711"
AddElement xmlDoc, artikel, "VK", ellib.FloatToXmlStr(47.23)
set artikel = xmldoc.createNode(1,"ARTIKEL", "")
artikelliste.appendChild(artikel)
AddElement xmlDoc, artikel, "ID.ALIAS", "0815"
AddElement xmlDoc, artikel, "ARTNUMMER", "0815"
AddElement xmlDoc, artikel, "KURZTEXT1", "Mein Kurztext zu 0815"
AddElement xmlDoc, artikel, "LANGTEXT", "Mein Langtext zu 0815"
AddElement xmlDoc, artikel, "VK", ellib.FloatToXmlStr(66.65)
xmlEul.LoadFromXml XmlDoc.DocumentElement.xml
xmlEul.SaveToDB "SALESARTICLE"
set artikel = nothing
set artikelliste = nothing
set metadata = nothing
set root = nothing
set xmlDoc = nothing
set xmlEul = nothing
end sub
EULANDA® lässt sich auch über die Kommandozeile mit Parametern starten und so aufrufen, dass eine XML-Datei importiert werden kann. Hierdurch lassen sich einfache Systeme erstellen, die zum Beispiel über einen Postfachscanner XML-Dateien extrahieren lassen und über eine einfache Batchsteuerung in EULANDA® importieren lassen.
Hierzu müssen der Mandant und der
Dateiname der XML-Datei angegeben werden. Der Mandant wird mit dem Parameter
-m
gefolgt vom Mandantennamen in doppelten Anführungszeichen angegeben. Der
Mandantenname ist der Menüeintrag im Startmenü. Der zweite Parameter
lautet -xml
und gibt den Namen der XML-Datei an. Der Dateiname muss
vollständig mit Pfadangabe und ebenfalls in doppelten Anführungszeichen
angegeben werden.
"C:\Programme\EULANDA Software GmbH\Eulanda\eulanda.exe" -m "Lokal" -xml "C:\Users\Marc\Artikel.xml"
Bei einem erfolgreichen Import wird die Datei automatisch umbenannt in "AlterName(2).XML". "AlterName" steht für den angegebenen Dateinamen. Die in Klammern angegebene Nummer wird automatisch hochgezählt, so dass mehrere Importdateien auf diese Weise archiviert werden können.
Unter Zubehör
befindet sich das Modul zur XML-Schnittstelle. Über dieses
Modul lassen sich XML-Dateien im- und exportieren. Die XML-Datei muss
beim Import fest den Namen EULANDA.XML
haben und auf dem Desktop gespeichert
sein. Unter diesem Namen und in diesem Ort würde auch der Export einer
XML-Datei über die Oberfläche erfolgen.
In der Auswahlbox gibt man an, welche Hauptobjekte importiert werden
sollen. Falls die XML-Datei in einen anderen Mandanten "importiert" werden
soll, lässt sich die UDL-Datei des Mandanten über die Schaltfläche mit den
Pünktchen auswählen. Die Schaltfläche prüfen
zeigt in einer Übersicht die zu
importierenden Daten an.

Der Berichtsdesigner verfügt über den Befehl DataAsXML
, der es erlaubt
Hauptobjekte wie zum Beispiel einen oder mehrere Aufträge in XML zu
exportieren. Der XML-Text kann dann einer Stringliste zugewiesen und
anschließend gespeichert werden.
Auf diese Weise lässt sich zum Beispiel der aktuell gedruckte Auftrag
parallel als XML-Datei exportieren. Man würde das Script im Bericht
Auftragsbestätigung
an die Methode DetailAfterPrint
des Detailbandes einfügen.
Alternativ kann im Berichts-Designer auch eingebettetes VbScript über den
Befehl ExecuteScript
verwendet werden, so dass hier die selben Methoden wie
im VbScript-Interface verwendet werden können.
Gültige Tabellennamen für die DataAsXML
-Funktion sind:
Procedure DetailAfterPrint
var
Xml, ResultMsg : String;
Sl : TStringList;
begin
Sl := TStringlist.Create;
if DataAsXml(Report, 'SALESORDER', 'KopfNummer='+AuftragsKopf['KopfNummer'], '', false, Xml, ResultMsg) then
begin
Sl.Text := Xml;
Sl.SaveToFile(DesktopDir+'\Test.xml');
end else ShowMessage(ResultMsg);
Sl.Free;
end;

Die XML-Schnittstelle ist ein optionales Modul das zum einen eine Oberfläche zum Import und Export von den wichtigsten Stamm- und Bewegungsdaten enthält und zum anderen programmatisch sowie von einer Kommandozeile aus angesteuert werden kann. Über iScripts lässt sich das XML-Objekt in VbScript und JScript ansteuern und in EULANDA® einbetten. Zusätzlich stehen die wichtigsten Funktionen auch im Berichts-Designer zur Verfügung, so dass man Formulare realisieren kann, die zum Beispiel eine Auftragsbestätigung ausdrucken und gleichzeitig einen XML-Export in der Formularscriptsprache Pascal erzeugen. Zusätzlich kann EULANDA® über einen XML-Parameter aufgerufen werden und so zum Beispiel Aufträge aus einem SHOP-System importieren.
Das optionale Modul zum verwalten von Dokumenten erlaubt es verschiedene Bilder und andere Dokumente zu einem Artikel zu verwalten. In Verbindung mit dem SHOP-Modul lassen sich diese Bilder zum SHOP-Server übertragen.
Die SHOP-Schnittstelle ist ebenfalls optional. Sie setzt jedoch die XML-Schnittstelle sowie die Dokumentenverwaltung als Modul voraus. Mit der SHOP-Schnittstelle lassen sich zum einem Artikel weitere Felder in einer eigenen Maske hinzufügen. Diese Felder sind in der XML-Schnittstelle als SHOP-Tag unterhalb des ARTIKEL-Tags angegeben. Desweiteren ist in der SHOP-Schnittstelle eine Variantenverwaltung enthalten, die es erlaubt Produkte mit verschiedenen Farben, Größen usw. anzulegen. Neben den Verwaltungsbildschirmen enthält die SHOP-Schnittstelle einen FTP-Client, der Bilder über das FTP-Protokoll übertragen kann, Artikel über HTTP-versenden und Aufträge über HTTP abholen kann.