4 Kommunikationsprinzip des Verbuchers
Ablauf
Der Ablauf beim Verarbeiten einer Buchung unterscheidet sich bei den verschiedenen Schnittstellentypen nur in Bezug auf das Einlesen und Identifizieren einer Buchung. Die Buchungen selbst werden nach dem gleichen Prinzip ausgeführt.
Bei der SQL-Schnittstelle (mobile Datenerfassung) greift der Verbucher anhand des Feldes «postingcode» aus dem Buchungsdatensatz der Schnittstellentabelle (infMDE) auf die Sektion [MDE] der sibpps.ini zu und erkennt, welches Programm (laut FK-Parameter) zu rufen ist. Bei der Datei-Schnittstelle (Hänel-Software) wird der passende Buchungseintrag in der Sektion [HAENEL] über den Inhalt eines bestimmten in den jeweiligen Buchungssätzen der jeweiligen Datei(en) enthaltenen Feldes gefunden. Das jeweils gerufene Programm muss anhand der vom Verbucher gefüllten GlobalVariablen erkennen, dass eine automatische Buchung (ohne Benutzerinteraktion!) gestartet werden soll. Idealerweise sollte das Programm dann keinerlei Dialoge (auf gar keinen Fall im Eingabemodus) und auf gar keinen Fall Meldungen ausgeben. Bei der Vorbereitung eines Programms für eine automatische Buchung kann man beispielsweise eine eigene Meldungs-Funktion definieren, mit der man alle bisherigen Meldungsfunktionen des Programms ersetzt. In der eigenen Meldungsfunktion kann dann abhängig vom Aufruf des Programms (manuell oder Verbucher) entweder wie bisher eine Meldung ausgegeben werden oder die Verbucher-Fehlervariablen gefüllt und das Programm verlassen werden.
Nach getaner Arbeit (bei Erfolg und Misserfolg) muss das Programm unbedingt automatisch ordnungsgemäß beendet werden!
Kommunikation
Der Verbucher übergibt folgende GlobalVariablen (ohne Application-Handle! bzw. mit APPLHNDL_ROOT) an das jeweils gerufene Programm:
|
GV_MWI31M_xmldata
|
Typ: String
Kompletter Datensatz aus Schnittstellentabelle (infMDE) oder der Schnittstellendatei (Hänel-Software) im XML-Format. Der XML-String muss als XML-Dokument verarbeitet werden (siehe Codebeispiel) und erlaubt dann direkten Zugriff auf alle Felder der Schnittstellentabelle. Stammen die Daten aus einer Schnittstellendatei des Dateisystems, werden die Namen der jeweiligen XML-Felder aus der ersten Zeile der Schnittstellendatei gelesen.
Später sollen auch Daten innerhalb des XML-Strings verändert und an den Verbucher zurückgeliefert werden können.
|
|
GV_MWI31M_errorcode
|
Typ: Long
Sollte vom Programm im Falle eines Fehlers beim Verarbeiten der Buchung auf einen Wert <> 0 gesetzt werden. Abhängig davon wird der Status des Buchungssatzes auf 9 (Fehler) oder 1 (Erfolgreich) gesetzt. Der Fehlercode selbst wird im Feld «errorcode» des Buchungssatzes der SQL-Datenbank oder in einer Protokolldatei der Datei-Schnittstelle abgestellt.
|
|
GV_MWI31M_errortext
|
Typ: String
Muss beim Start des Programms auf “” (nix) gesetzt werden. Im Falle eines Fehlers sollte hier im Klartext eine Fehlerbeschreibung übergeben werden. Der Verbucher erkennt am Leerputzen der Variable, ob der Programmstart geklappt hat.
Der Fehlertext wird (wenn errorcode<>0) im Feld «errortext» des Buchungssatzes der SQL-Datenbank bzw. in einer Protokolldatei der Datei-Schnittstelle abgestellt.
|
|
GV_MWI31M_refcode
|
Typ: String
War ursprünglich für die Rückgabe einer Referenznummer o.ä. gedacht – wird derzeit nicht verwendet.
|
Die Globalvariablen im Code wie folgt definieren:
SCGlbVarSTRING gvsOnlineData("GV_MWI31M_xmldata");
SCGlbVarLONG gvlOnlineErrc("GV_MWI31M_errorcode");
SCGlbVarSTRING gvsOnlineErrTxt("GV_MWI31M_errortext");
Daten auslesen
Der Zugriff auf die übergebenen Daten erfolgt über die XML-Wrapperklasse ACips_xml_dom_impl xmlDoc. Dazu muss folgender Header includiert werden:
#define SIB_DLL_ACIPSXMLDOMIMPL 1
#include "ipsxmldomImpl.h" // XML-Wrapper
In der Workbench muss der Quellcode IPSXMLDOMIMPL.CPP als zusätzliche Komponente angegeben werden.
Für das Aufbereiten und Auslesen der XML-Daten kann folgender Code verwendet werden:
SCGlbVarSTRING gvsOnlineData("GV_MWI31M_xmldata");
ACips_xml_dom_impl xmlDoc;
xmlDoc.Init();
xmlDoc.LoadXml((SCString)gvsOnlineData);
scsTeil = xmlDoc.GetValueByXPath("//@itemno");
scsLager = xmlDoc.GetValueByXPath("//@fromstoreid");
scsAuftrag = xmlDoc.GetValueByXPath("//@orderno");
scsPos = xmlDoc.GetValueByXPath("//@posno");
scsMenge = xmlDoc.GetValueByXPath("//@bookquantity");
Achtung!
Die Methode „GetValueByXPath“ beseitigt alle Blanks hinter und vor dem gelesenen Wert! Werden also führende Leerzeichen benötigt, muss mit umfassenden Hochkommata gearbeitet werden. Diese Hochkommata müssen sowohl vom MDE-Programm (Erzeuger des Buchungsdatensatzes) als auch vom Anwendungsprogramm berücksichtigt werden.
Datumsformat
Alle Timestamp-Felder (Datum und Uhrzeit) der SQL-Datenbank – zum Beispiel usdate1, usdate2, etc – werden bei der Überführung in die XML-Struktur nach der Vorschrift „TT.MM.JJJJ HH:MM:SS“ formatiert.
