Menü

XML Schnittstelle Datenbeschreibung

Zurück | Ebene zurück

Einführung

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.

Datenstruktur

Aufbau der EULANDA.XML-Datei

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>

Datentypen

Knotennamen Feldnamen

Werden immer in Großbuchstaben dargestellt.

Fließkommawerte

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.

Datums- und Zeitwerte

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

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.

Bilder

Eingebettete Bilder werden in BASE64 kodiert und im Format JPEG verwendet.

Speicherort und Dateiname der XML-Datei

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.

Datenobjekte

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.

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.

ID.Alias - Die Zuordnung beim Import

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".

Beispiele

Artikel ohne Unterstrukturen

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>

Erklärung

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.

Auftragsanlage mit existierenden Stammdaten

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.

Auftragsanlage mit einem neuen Kunden

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.

Auftragsanlage mit neuem Kunden und Zahlungsziel

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>

Sonstiges

Die XML-Schnittstelle kann über iScript, also VbScript und JScript, Pascal über den Berichts-Designer, die Kommandozeile oder die Benutzeroberfläche angesteuert werden.

VbScript

Methoden und Konstanten des XMLLIB-Objekts

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 DateFormat gibt an, wie das Datumsformat in der XML-Datei zu interpretieren ist. Zur Zeit wird lediglich das Format ISO8601 unterstützt.

FloatFormat Das FloatFormat gibt an, wie Kommazahlenwerte zu interpretieren sind. Zur Zeit wird lediglich US unterstützt. Hier wird das Komma als Dezimalpunkt angegeben. Tausendertrennungen sind nicht zulässig.
FieldNames Über FieldNames wird angegeben wie die Feldnamen anzugeben sind. Zur Zeit ist nur die Angabe NATIVE zulä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 OptName angegeben und ist das InfoBox-Objekt angebunden, so werden entsprechende Fehler dort angezeigt. Gültige OptNamen sind 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 OptName angegeben und ist das InfoBox-Objekt angebunden, so werden entsprechende Fehler dort angezeigt. Gültige OptNamen sind 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 DBObject angegebenen 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 0 bis RecordCount(DBObject)-1 . Der Wert -1 bedeutet 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 0 bis RecordCount(DBObject)-1 . Der Wert -1 bedeutet dass der Cursor ungültig ist (außerhalb des gültigen Bereichs oder dass es keine Records im angegebenen Datenbankobjekt gibt.
EOF(DBObject)

Bei EOF True ist durch die Cursoroperation der Dateianfang oder das Dateiende überschritten, der Cursor hat in dem Fall den Indexwert -1.

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 DBObject wird 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 SetField kann innerhalb der XML-Datei ein Feldwert im aktuellen Datensatz geändert werden. Der aktuelle Datensatz wird die eine der Cursorfunktionen bestimmt. Über DBObject wird 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 DBObject wird 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 DBObject wird 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. Ist das Feld bereits vorhanden, so liefert InsertField den 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 DBObject wird 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 KeyValue angegeben. Wird beispielsweise ein Artikel über das Datenbankobjekt SALESARTICLE angefügt so werden automatisch zwei Felder angefügt. Dies sind ID.ALIAS und ARTNUMMER, welche mit dem Wert von KeyValue gefü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 = TRUE die 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.

 

XML-Umwandlungsfunktionen

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.

Import von Artikeln im XML-Format

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.

VbScript-Beispiel

option explicit
dim xmlEul
set xmlEul = Client.CreateObject("XMLLIB")
xmlEul.LoadFromFile Client.Properties("FOLDER.DESKTOP") & "\ARTIKEL.XML"
xmlEul.SaveToDB "SALESARTICLE"
set XmlEul = nothing

XML-Datei

<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>

XML-Datei programmatisch erzeugen und importieren

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

Kommandozeile

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.

Bedienoberfläche

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.

XML Schnittstelle über Bedienoberfläche

Pascal im Berichts-Designer

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;

XML Export im Berichts-Designer

Weiterführende Links

XML-Schnittstelle

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.

DMS Dokumentenverwaltung

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.

SHOP-Schnittstelle

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.