präsentation webservices
DESCRIPTION
Webservices Vortrag. Gehalten auf dem deutschen iDempiere Community TreffenTRANSCRIPT
evenos Consulting GmbH 1
Webservices in iDempiere
Jan Thielemann
evenos Consulting GmbH 2
Inhalt
Was sind Webservices?
Webservices in iDempiere aktivieren
ModelADService
CompositeInterface
Webservices erstellen
Webservices testen/benutzen
Konzepte zur Nutzung von Webservices in iDempiere
evenos Consulting GmbH 3
Was sind Webservices?
Ein Webservice oder Webdienst ist eine Softwareanwendung, die über ein Netzwerk für die direkte Maschine-zu-Maschine-
Interaktion bereitgestellt wird
evenos Consulting GmbH 4
Webservices in iDempiere aktivieren
Die Webservice in iDempiere sollten standardmäßig aktiviert sein. In älteren Versionen kann jedoch eine nachträgliche Aktivierung erforderlich sein. Dies kann auf zwei Arten erfolgen Felix Web Console (– http://server:8080/osgi/system/console/bundles– Bundle suchen– Bundle starten
OSGi Console– ss für Liste der Bundles– Bundle in Liste finden– start <Bundle-Nr>
evenos Consulting GmbH 5
ModelADService
Generischer Webservice mit verschiedenen Funktionen– setDocAction • Den Status eines Dokuments ändern• Workflows werden nicht ausgeführt!
– RunProcess• Einen Prozess starten• Prozess kann Dokument Workflow sein
– GetList• Liste der Einträge einer Referenz (Table oder List)
– CreateData• Datensätze anlegen
– UpdateData• Datensätze updaten
– DeleteData• Datensätze löschen
– ReadData• Einzelnen Datensatz anhand der RecordID auslesen
– QueryData• Datensätze anhand von Input-Feldern oder Filter finden
Es wird immer nur genau ein Aufruf ausgeführt
Validatorn und Model-Hooks bei createData, updateData und deleteData
evenos Consulting GmbH 6
CompositeInterfaceZusammenfassen mehrerer ModelADService-Aufrufe in einem einzigen CompositeInterface-Aufruf
Liste der Aufrufe = operations
Einzelner Aufruf = operation
Jede Operation hat ein pre- und postCommit Tag
Jede Operation hat einen TargetPort– createData– readData– updateData– deleteData– runProcess– setDocAction– createUpdateData
createData, readData, updateData, deleteData und createUpdateData benötigen <ModelCRUD>
setDocAction benötigt <ModelSetDocAction>
runProcess benötigt <ModelRunProcess>
Nicht jeder ModelADService-Aufruf funktioniert
evenos Consulting GmbH 7
Webservices erstellen
Hilfe unter http://www.adempiere.com/Adempiere_Web_Services
Fenster: Web Service Security
Kopfdaten– Search Key → serviceType– Web Service → ModelADService oder CompositeInterface– Web Service Method → Gewünschte Methode (create-, read- und queryData, runProcess, etc.)– Table → Optionale Tabelle des Webservices, wichtig wenn Felder ein- bzw. zurückgegeben werden sollen
Web Service Parameters– Je nach Webservice unterschiedlich– Typische Parameter:• tableName/TableName• recordID/RecordID• filter/Filter• action/Action
Web Service Access– Rollen, die diesen Webservice nutzen dürfen
evenos Consulting GmbH 8
Webservices erstellen
Die folgenden Tabs sind nur sichtbar, wenn in den Kopfdaten eine Tabelle ausgewählt wurde
Web Service Field Input– Hier werden Felder definiert, die per Aufruf übergeben werden (z. B. Name und Suchschlüssel bei
createData)– Spaltenname (kann aus allen Spalten der Tabelle ausgesucht werden oder Freitext)– Referenz der Spalte (String, Integer, Date, etc.)– Identifier (?)– Allow Null Value (?)– Identifier Logic (?)
Web Service Field Output– Hier werden Felder definiert, die der Webservice zurück gibt– Spaltenname (kann aus allen Spalten der Tabelle ausgesucht werden oder Freitext)
evenos Consulting GmbH 9
iDempiere Webservices nutzen das SOAP-Protokoll
Tool zum Testen: SoapUI (http://www.soapui.org)
Übersicht der Endpunkte unter http://myserver/ADInterface/services
ModelADService Endpunkt: http://myserver/ADInterface/services/ModelADService?wsdl
CompositeInterface Endpunkt: http://myserver/ADInterface/services/compositeInterface?wsdl
Webservices testen/benutzen
evenos Consulting GmbH 10
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://idempiere.org/ADInterface/1_0"> <soapenv:Header/> <soapenv:Body> <_0:setDocAction> <_0:ModelSetDocActionRequest> <_0:ModelSetDocAction> <_0:serviceType>iDempiereDocAction</_0:serviceType> <_0:tableName>C_Order</_0:tableName> <_0:recordID>1000000</_0:recordID> <_0:docAction>VO</_0:docAction> </_0:ModelSetDocAction> <_0:ADLoginRequest> <_0:user>WebService</_0:user> <_0:pass>MYPASSWORD</_0:pass> <_0:lang>191</_0:lang> <_0:ClientID>11</_0:ClientID> <_0:RoleID>50004</_0:RoleID> <_0:OrgID>11</_0:OrgID> <_0:WarehouseID>103</_0:WarehouseID> <_0:stage>0</_0:stage> </_0:ADLoginRequest> </_0:ModelSetDocActionRequest> </_0:setDocAction> </soapenv:Body></soapenv:Envelope>
Webservices testen/benutzenDocument Action
evenos Consulting GmbH 11
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://idempiere.org/ADInterface/1_0"> <soapenv:Header/> <soapenv:Body> <_0:getList> <_0:ModelGetListRequest> <_0:ModelGetList> <_0:serviceType>iDempiereGetList</_0:serviceType> <_0:AD_Reference_ID>148</_0:AD_Reference_ID> <_0:Filter>Name like 'Prepay%'</_0:Filter> </_0:ModelGetList> <_0:ADLoginRequest> <_0:user>WebService</_0:user> <_0:pass>MYPASSWORD</_0:pass> <_0:lang>191</_0:lang> <_0:ClientID>11</_0:ClientID> <_0:RoleID>50004</_0:RoleID> <_0:OrgID>11</_0:OrgID> <_0:WarehouseID>103</_0:WarehouseID> <_0:stage>0</_0:stage> </_0:ADLoginRequest> </_0:ModelGetListRequest> </_0:getList> </soapenv:Body></soapenv:Envelope>
Webservices testen/benutzenReferenz-Liste
evenos Consulting GmbH 12
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://idempiere.org/ADInterface/1_0"> <soapenv:Header/> <soapenv:Body> <_0:queryData> <_0:ModelCRUDRequest> <_0:ModelCRUD> <_0:serviceType>iDempiereQueryData</_0:serviceType> <_0:TableName>M_Product</_0:TableName> <_0:RecordID>0</_0:RecordID> <_0:Filter>name like 'Aza%'</_0:Filter> <_0:Action>Read</_0:Action> </_0:ModelCRUD> <_0:ADLoginRequest> <_0:user>WebService</_0:user> <_0:pass>MYPASSWORD</_0:pass> <_0:lang>191</_0:lang> <_0:ClientID>11</_0:ClientID> <_0:RoleID>50004</_0:RoleID> <_0:OrgID>11</_0:OrgID> <_0:WarehouseID>103</_0:WarehouseID> <_0:stage>0</_0:stage> </_0:ADLoginRequest> </_0:ModelCRUDRequest> </_0:queryData> </soapenv:Body></soapenv:Envelope>
Webservices testen/benutzenDaten Abfragen
evenos Consulting GmbH 13
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://idempiere.org/ADInterface/1_0"> <soapenv:Header/> <soapenv:Body> <_0:queryData> <_0:ModelCRUDRequest> <_0:ModelCRUD> <_0:serviceType>iDempiereQueryData</_0:serviceType> <_0:TableName>M_Product</_0:TableName> <_0:RecordID>0</_0:RecordID> <_0:Action>Read</_0:Action> <_0:DataRow> <_0:field column="Name" > <_0:val>Assembly Area</_0:val> <!--Hier muss der exakte Name stehen, Wildcards funktionieren nicht--> </_0:field> </_0:DataRow> </_0:ModelCRUD> <_0:ADLoginRequest> <_0:user>WebService</_0:user> <_0:pass>MYPASSWORD</_0:pass> <_0:lang>191</_0:lang> <_0:ClientID>11</_0:ClientID> <_0:RoleID>50004</_0:RoleID> <_0:OrgID>11</_0:OrgID> <_0:WarehouseID>103</_0:WarehouseID> <_0:stage>0</_0:stage> </_0:ADLoginRequest> </_0:ModelCRUDRequest> </_0:queryData> </soapenv:Body></soapenv:Envelope>
Webservices testen/benutzenDaten Abfragen
evenos Consulting GmbH 14
Konzepte zur Nutzung von Webservices in iDempiere
Daten direkt anlegen (ggf. mehrere Calls)– Fehler bei unterbrochener Übertragung (bei mehreren Calls)– Geeignet um einzelne Einträge zu erstellen/ändern/löschen
Daten direkt mittels Composite Webservice anlegen– Kein Fehler bei unterbrochener Übertragung– Geeignet um verschachtelte Einträge (z. B. Geschäftspartner) zu erstellen/ändern/löschen
Daten in Importtabelle schreiben– Einfaches Anlegen von Datensätzen– Ermöglicht Batch-Verarbeitung– Importprozess kann über Webservice, Scheduler oder manuell gestartet werden
evenos Consulting GmbH 15
Danke für eure Aufmerksamkeit
Noch Fragen? Schick mir eine Mail an [email protected]