openTRANS Anbindung
Last updated
Last updated
ist ein offener XML-Standard entwickelt auf Initiative des Fraunhofer IAO zur Unterstützung des elektronischen Datenaustauschs (EDI) bei Geschäftstransaktionen zwischen Handelsunternehmen.
Im wird ein konkreter Fall beschrieben.
Im ersten Schritt wird das Konvertieren der openTRANS-ORDER Nachrichten implementiert, um Adempiere-Order zu erzeugen. Im zweiten Implementierungsschritt werden alle Methoden implementiert, die zum Produktumfeld gehören. In Folgeschritten wird der Auftrag mit seinen Positionen und das Abhandeln der Lieferavis implementiert.
Wie geschieht das Mapping der OpenTRANS-Objekte in adempiere-Objekte?
Dieser Transformation geschieht in zwei Schritten
standard JAXB-, daraus entstehen in Methode Transformer.toModel(...)
in package com.klst.opentrans
Mapping openTRANS-pojo nach adempiere-Objekte
Beispiel: diese Methode liest ein xml-openTRANS-ORDER und liefert die pojo Klasse ORDER
Die Details kann man im xsd-file nachlesen, welches sich im opentrans.jar befindet. ORDER besteht aus 1 bis n ORDER_ITEMs, die detailieter beschrieben werden:
Die openTRANS-pojos werden in folgende adempiere-Objekte abgebildet:
ORDER -> MOrder
ITEM -> MOrderLine
PRODUCT_ID -> MProduct , dabei werden bei Bedarf neue Produkte angelegt
ORDER_UNIT -> MUoM, der oben erwähnte "Six pack", oder PCE im xml-Beispiel
...
Das Abbilden von openTRANS PRODUCT in adempiere-MProduct ist einiges kompelxer als die simple Maßeinheit, denn es müssen diverse DB-Modell-Randbedingungen beachtet werden (Preise, Steuern, Lieferant, Produktkategorie, Maßeinheit).
CreateProductProcess
Abschliessend wird noch eine Prozessklasse CreateProductProcess
benötigt, die adempiere-Produkte für mehrere OpenTRANS-Order erstellt, etwa mit solcher Methode:
createProductIfNew(ORDERITEM item, int dropShipBPartner_ID) ...
CreateProductProcess
kann dann überwacht oder im Hintergrund den ersten Teil des oben beschriebenen Workflows verrichten. Unser Kunde hat sich für den überwachten Ablauf entschieden, da damit eventuelle Störungen sofort erkennbar sind. Der zuständige Mitarbeiter startet den Prozess per Mausklick und bekommt gleich ein Feedback wie viele Objekte erstellt wurden:
CreateOrderProcess
Nachdem alle Produkte für den Auftrag erstellt sind, kann mit CreateOrderProcess
der adempiere-Auftrag erstellt werden. Damit ist die Bearbeitung der openTRANS-ORDER abgeschlossen.
Der Lieferavis (in openTrans Terminologie DISPATCHNOTIFICATION), also die Ankündigung einer Lieferung hat in ADempiere kein Gegenobjekt. Am ehesten kann man DISPATCHNOTIFICATION auf einen Lieferschein abbilden. Die Lieferavis, die wir bekommen sind in einem XML-Format, das nicht ganz den Vorgaben von opentrans_2_0.xsd
entspricht. Die Unterschiede sind gering. Daher werden die Avis-Datenströme mittels AvisPipedInputStream
so angepaßt, damit sie den entsprechenden openTRANS Vorgaben entsprechen.
Für das Lieferavis gibt es zwei Prozesse:
AvisPrepareProcess
erstellt eine Kopie des XML-Avis im openTRANS 2.0 Format. Mit einer CSS-Definition kann der Nutzer die Avis Inhalte zur Kontrolle im XML-Browser (IE) lesen.
DispatchNotificationProcess
beinhaltet die eigentliche Transformation und erstellt zum Avis den entsprechenden adempiere-Lieferschein, aus dem die Rechnung generiert werden kann.