NF1.0 WEB-Service verbessert
' Feature: ' Web Services Verbesserungen
Quelle dt. Übersetzung von NF1.0_Web_Services_Improvements
Ziel: Technische
Sponsor : Trek Global
Feature- Ticket : [ http://jira.idempiere.com/browse/IDEMPIERE-460 IDEMPIERE -460 ] entwickelt von [ [ Benutzer: Dpansheriya | Deepak Pansheriya ] ]
Github Quelle : [ https://github.com/idempiere/idempiere iDempiere ] . Geben Sie für [ https://github.com/idempiere/idempiere/tree/master/org.idempiere.webservices org.idempiere.webservices ] .
Kategorie der Technik : Middle - ware [ http://en.wikipedia.org/wiki/Web_service Web - Dienstleistungen]
Verbesserungen in Kürze:
- Hohe Dokumentenprozess
- Führen Sie Zeit - Validierung
- Prozess Feinabstimmung
- iDempiere Plug- in bereit
Entwicklung in Kürze:
- Umrechnungskurs ADempiere Web - Dienste wie iDempiere Plugin
- Kompatibel zu Version 1.0 iDempiere
- Von XFire zu CXF Rahmen migriert.
- Added Composite- Methoden für singuläre Client fordert Reduzierung der Gemeinkosten von redundanten Anrufe
- Web - Service- Plugin für generische Zugang zu jedem Modell , Prozess oder eine Aktion in iDempiere .
- Dokumentation Inhalt und Tutorial von Deepak Pansheriya bereitgestellt
- Wiki -Bearbeitung Unterstützung von [ [ Benutzer: Red1 | Red1 ] ] ([ [ Benutzer Diskussion : Red1 | Diskussion ] ] )
Contribution Accreditation
- Erster Prototyp 3E aus Polen im Jahr 2007
- Das neue Web Services -Fenster ( Ruiz )
- Suche Key ( Ruiz )
- Web Service ( Ruiz )
- Web Service -Methode ( Ruiz )
Tabelle ** ( Ruiz )
- Web -Service-Parameter ( Ruiz )
- Web-Service- Feld Input ( Ruiz )
DB ** Column Name ( Pansheriya )
- Referenz ( Pansheriya )
- Identifier ( Pansheriya )
Erlauben ** Nullwert ( Pansheriya )
- Identifier Logik ( Pansheriya )
- Web-Service- Feld Output ( Ruiz )
- Web Service Access ( Ruiz )
- Code schreiben ( HengSin )
- Web -Ressource
http://www.adempiere.com/Adempiere_Web_Services ** ( Ruiz ) http://www.adempiere.com/Adempiere_Web_Services_Security ** ( Ruiz )
Die neue Web Services-Fenster
- Aufgrund der vielen bereits erwähnten Beiträge, unsere Web - sind unsere Dienstleistungen in iDempiere
viel weiter fortgeschritten im Master-Detail- Layout mit High-Power- Betriebsführung.
- Wir werden durch das neue Feature-Request von der Spitze zu gehen. Unten ist das Hauptfenster und Tabs .
- Das wird aus dem Hauptmenü , indem Sie auf ins Leben gerufen " Web Services Security ' .
- Der erste Reiter ist ' Web Service Type ', um die Web-Services auf iDempiere erlaubt zu definieren.
- Die Web Services Plugin hat generische Implementierung für Benutzer , um Anrufe an das ERP- Server machen auf jedem Tisch , Prozess-oder Workflow-Aktionen .
- iDempiere hat sowohl Eingang und Output -Vorlagen für externe Benutzer , die Elemente ihrer XSD (XML -Schema-Definitionen ) abzubilden.
- Die neue Composite- Dienstleistungen weiter zu reduzieren Aufwand für Aufgaben die Kunden benötigen, um als einfache Aktionen wie einen Geschäftspartner zu tun ist nun ein einziger Anruf statt vieler umständlich Anrufe , wodurch die Arbeit der Entwickler und sorgen für geringere Wartungskosten in Zukunft.
Suche Key
- Die Suchschlüssel Wert Maps, um die ' serviceType ' tag in der Web-Service- Anfrage. Dies wird im folgenden Codeausschnitt gezeigt :
<web:ModelCRUD> <adin:serviceType> CreateBPartner </ adin : serviceType > <adin:TableName> C_BPartner </ adin : TableName > <adin:RecordID> 0 </ adin : RecordID > <adin:Action> CreateUpdate </ adin : Aktion> : : <web:ModelCRUD>
Web Service
- Dieses Feld zeigt den Typ des Web-Service. Wir haben jetzt sowohl 'Model - Oriented und ' Composite- ' Interfaces . Die ' ModelADService wird ebenfalls verbessert , um createUpdateData Dienst.
Web Service -Methode
- Dies ist für die Auswahl eine operative Aufgabe während der Web - Service-Implementierung .
- Jeder Web - Service-Typ hat dann die Wahl von unterschiedlichen Aufgaben.
Tabelle
- Dieses Feld wird verwendet, wenn das Web - Service-Methode muss mit einem ' Tabelle ' arbeiten.
- Zum Beispiel Neuen Datensatz erstellen , Lesen Sie vorhandene Datensätze oder Aktualisieren vorhandene Datensätze .
Web Service-Parameter
- Auf dieser Registerkarte werden die Parameter für Web-Service zu definieren.
- Parameter kann eine Konstante oder Kostenloses sein .
- Wenn es Constant dann wird der Wert von Konstante Wert -Feld verwendet wird, jede übergebene Wert von Anforderung wird ignoriert.
- Bei freies , Wert Anfrage verwendet wird.
- Beachten Sie, dass für _ID Parameter sowohl Record ID , als auch UUID Wert zu übernehmen sind.
Web Service Feld Eingabe
- Diese Registerkarte wird verwendet, um die Liste der Felder (Spalten) für Web - Service, der neue Datensatz oder aktualisiert vorhandene Datensatz erstellt definieren .
- Dieses Register steuert die Belichtung von Spalten aus dem Web - Service-Anfrage.
- Beachten Sie die neue Referenz Feld, das Überschreiben der Look-up- Typ benötigt ermöglicht .
DB Spaltenname
- Oben zeigt , wie diese verwendet werden, um den Namen der Variablen für Anfrage CTX konfigurieren.
- Dieses Feld enthält die Saitenmusters Tabelle Name verwendet.
- Mehr auf Anfrage CTX später.
Referenz
- Die Idee ist es, die Verwendung einer anderen Taste während der Look-up- Tabelle von einem anderen zu ermöglichen.
- Zum Beispiel , zu schaffen ' OrderLine ' , können wir SKU statt Product_ID .
- Dieses Feld kann somit überschreiben Referenz-Typ bei Tabelle Spalte und Bereitstellung von Referenz-Typ für ' Ctx Variable ' .
- Web -Dienst verwendet dieses Feld, um Daten - Typ von variablen zu bestimmen.
- -Referenz -Taste wird verwendet, um ' Liste ' überschreiben oder Look-up- Wert .
Identifier
- Wenn dieses Flag aktiviert ist dann aktuellen Spalte wird als Teil der Aufnahme-Taste betrachtet.
- Mehrere Spalten können als Kennung konfiguriert werden, und sie sind für den Einsatz als zusammengesetzten Schlüssel kombiniert.
- Bildschirm unten zeigt, wie' C_BPartner_ID wird als Kennung zu bestehenden Datensatz zu finden verwendet.
Erlaube Nullwert
- Wenn dieses Feld wird dann geprüft null Wert wird in einen vorhandenen Datensatz abzurufen betrachtet.
Identifier Logik
- Dieses Feld hinzufügen Unterstützung für die Identifizierung Rekord durch die Verwendung einer SQL-Anweisung.
- Vor-Bildschirm zeigt, wie ein' C_BPartner Datensatz durch 'AD_User.email identifiziert werden können.
Web Service Feld Output
- Diese Registerkarte wird verwendet, um die Liste der Werte, die in Reaktion zurückgegeben werden konfigurieren.
- Hier können Sie Spalten aus der Erstellt / Aktualisiert Rekord.
Web Service Access
- Auf dieser Registerkarte konfigurieren Sie die' Rollen, die die definierten Webservice zugreifen können.
- Es gibt zusätzliche Sicherheit, wie die Web-Service wird über dem offenen Web abgerufen.
Composite- Dienst
- Composite- Form von Web-Services in diesem iDempiere Version 1.0 eingeführt, um komplexe Operationen wie create BPARTNER , Kontakt-und Standortinformationen innerhalb einer einzigen Anfrage und in einer einzigen Transaktion zu unterstützen.
- Ein weiteres Ziel dieser deisgn ist, die Anzahl der Anrufe zwischen Client und Server zu reduzieren.
- Composite- Service ist eigentlich ein Wrapper auf der modell- orientierten Web - Service.
- Es ermöglicht , mehrere atomare ModelADService Betrieb wie kombiniert createData , UpdateData , createUpdateData , setDocAction etc in einzelne Anfrage .
- Unten ist Probe Anfrage Syntax für einen zusammengesetzten Dienst .
<web:compositeOperation> <web:CompositeModelRequest> <web:ADLoginRequest> : : < / web: ADLoginRequest > <web:serviceType> SyncOrder < / web: serviceType > <web:operations> <web:operation preCommit="false" postCommit="false"> <web:'TargetPort> createUpdateData < / web: ' TargetPort > <web:ModelCRUD> : : < / web: ModelCRUD > <web:TargetPort> createUpdateData < / web: TargetPort > < / web: Betrieb preCommit = "false" postCommit = "false" > < / web: Operationen > < / web: compositeOperation >
- Sie können einen Blick auf den hervorgehobenen Tags.
- Operationen ermöglichen , mehrere CRUD oder Betrieb runProcess Betrieb zu kombinieren.
- ' TargetPort ' angeben Betrieb Namen * ModelADService aufgerufen werden.
- Mögliche Wert für ' TargetPort sind createData , updateData , * createUpdateData , deleteData , readData , und setDocAction ' ' runProcess .
- Alle Betrieb in dieser Anfrage teilen sich ein Login-Anfrage spezifiziert und können Daten untereinander über teilen requestCtx ( @ * Variable).
- Beachten Sie, dass createUpdateData eine Verbesserung für die ModelADService in diesem Feature-Request enthalten ist.
Transaktion Steuerung
- Wir können jetzt die Feinabstimmung der Verwaltung von Daten über das Web iDempiere Service repliziert.
- Wenn wir Daten zu synchronisieren , können wir das Konzept der ' Sicher -Punkt ' .
- Wir können nicht zu re -sync tun, wenn wir erfolgreich bestanden oder erreicht einen sicheren -Punkt- Lage.
- Zum Beispiel , wenn wir Synchronisieren Auftrag , die Schaffung von 'Kundenauftrags-Header und Linie sind atomar , aber sobald wir geschaffen haben, alle OrderLines können wir sie zu retten , auch wenn wir nicht imstande sind, Komplett oder ' " Bereiten Sie die bestellen .
- Composite- Service ermöglichen, über Transaktion steuern mit ' preCommit und ' postCommit Attribute auf Betrieb Element .
- Wenn preCommit wahrhaftig ist, was vorher getan aktuellen Vorgang an die Datenbank übergeben werden .
- Wenn postCommit wahr ist, ist nach den aktuellen commit Operation erfolgreich ausgeführt durchgeführt .
- Wenn ein Fehler auftritt , dann eine Transaktion ein Rollback durchgeführt und ihre Reaktion zeigt an, ob eine Operation festgeschrieben oder -back durch Bezugnahme auf das Attribut ' IsRolledBack ' auf Standard- Response-Element .
- ' isError ' Attribut auf true für fehlgeschlagene Vorgänge gesetzt .
Anfrage CTX Variable
- ' Anfrage CTX ' Variable als Referenz zur Verfügung während des gesamten Lebenszyklus Anfrage .
- Diese Variable Ctx verfolgt alle erstellten Datensätze in der aktuellen Anfrage von Tabellennamen.
- Anfordern können bevölkern jede benutzerdefinierte Variable name auf Web Service Security definiert - > Web Service Feld Eingabe Registerkarte zu .
- Diese Variablen sind zugänglich auch durch aufeinanderfolgende Operationen per Skript .
- Zum Beispiel , wenn wir einen Benutzer geschaffen haben und wollen das gleiche auf verwenden C_Order , unsere createOrder Anfrage Eingabefeld Parameter haben kann , wie unten .
<adin:field column="AD_User_ID"> <adin:val> @ AD_User . AD_User_ID </ adin : val > </ adin : field>
- Hier Feld hat immer Wert beginnend mit @ , wird die Web-Service die fortlaufende Zeichenfolge als Variable betrachten und versuchen, sie von der Anfrage Kontext zu lösen.
- In obigen Beispiel @ AD_User . AD_User_ID wird von zuvor erstellten AD_User Rekord AD_User_ID bekommen .
- Wenn Antrag auf benutzerdefinierten Variablen in Ctx bevölkern wollen, kann es Webdienst Eingabefeld ohne Auswahl beliebige Spalte und Verwendung DB Spalte Feld Name den Namen der Variablen definieren konfigurieren.
- Zum Beispiel zeigt unter Bildschirm ' E ' variable set on CreateBPartner Anfrage.
- Es gibt keine Spalte mit dem Namen ' E ' auf ' C_BPartner aber die Konfiguration dieser Variablen auf ' Web Service Eingang Tab wird es ermöglichen, den Antrag Zusammenhang mit E-Mail- Wert auf CreateBParner bevölkern Anfrage.
- Wenn Sie die Konfiguration eines DB-Spalte , Säule muss leer und Referenz ausgewählt werden.
- Ctx variable entscheidet Datentyp für die Eingabe auf Referenz basierend key .
Env Ctx Variable
- iDempiere die Env Variable zugänglich sind mit script @ # VariableName Syntax .
- Wir können diese Syntax in Feld und recordID Elemente verwenden, um dynamische Wert zu erhalten.
createUpdateData
- Diese Operation überprüft vorhandenen Datensatz und führen entweder zu erstellen oder zu aktualisieren Rekord.
- Dieser Vorgang kann besser sein als die createData oder updateUpdate Betrieb .
- createUpdateData verwendet Satzkennung ( s ) , um zu überprüfen , ob ein Datensatz vorhanden ist oder nicht .
- ' Web Service Eingabefeld ' hat eine Kennung Flag , die verwendet werden , um zu entscheiden , ob ein Eingabefeld wird verwendet, um den Rekord oder nicht zu identifizieren ist .
- Mehr als eine Spalte verwendet werden, um jeden Datensatz zu identifizieren.
- Zum Beispiel C_BPartner_ID und E-Mail verwendet werden, um BPUser identifizieren.
- Auch benutzerdefinierte SQL- Kennung kann in Logik verwendet werden, um dessen Datensatz-ID zurück.
- Diese Operation ermöglicht explizite Kontrolle Erstellung oder Aktualisierung der Aufzeichnung.
- Anfordern können angeben folgenden Wert auf Aktion .
- # Erstellen - Nur zu erstellen Rekord. Wenn Datensatz existiert , kehren Fehler
- # Aktualisierung - Nur Verbuchungssatz . Wenn Datensatz nicht vorhanden ist, zurückzukehren Fehler
- # CreateUpdate - Wenn Datensatz nicht vorhanden ist, erstellen Sie es sonst vorhandenen Datensatz aktualisieren
- Unten ist ein Beispiel für die Anfrage Dokument ' createUpdateData ' .
<_0:createUpdateData> <_0:ModelCRUDRequest> <_0:ModelCRUD> <_0:serviceType> CreateUpdateLocation </ _0 : serviceType > <_0:TableName> C_Location </ _0 : TableName > <_0:RecordID> 0 </ _0 : RecordID > <_0:Action> ' CreateUpdate ' </ _0 : Aktion> <_0:DataRow> <_0:field Column="C_Country_ID" lval="United States"/> <_0:field column="Address1"> <_0:val> 1625 Cowboy Chaps Platz </ _0 : val > </ _0 : Field> <_0:field Column="C_Region_ID" lval="NV"/> <_0:field column="RegionName"> <_0:val> NV </ _0 : val > </ _0 : Field> <_0:field column="Postal"> <_0:val> 89002 </ _0 : val > </ _0 : Field> <_0:field column="City"> <_0:val> Henderson </ _0 : val > </ _0 : Field> </ _0 : DataRow > </ _0 : ModelCRUD > <_0:ADLoginRequest> : : </ _0 : ADLoginRequest > </ _0 : ModelCRUDRequest > </ _0 : CreateUpdateData >
- Bitte beachten Sie ' Aktion ' . Es zeigt CreateUpdate . Dieser Mittelwert Datensatz erstellt oder aktualisiert basierend auf Existenz.
Lookup
- Neu hinzugefügte LVAL Parameter für Feld passieren Klartextzeichenfolge und wird mit Standard- ID iDempiere Lookup Mechanismus umgewandelt werden.
- Zum Beispiel , um Liefer-Methode auf Auftrag eingestellt ist, können wir durch Versandart Namen M_Freight_ID abrufen .
- Nachfolgend sind beispielhaft, wie können wir herausfinden Region mit Lookup statt C_Region_ID . <_0:field Column="C_Region_ID" lval="NV"/>
- Bitte beachten Sie , dass wir mit lval Attribut statt val Element , wenn wir Lookup verwenden möchten.
WS Validator
- Web -Service- Validator können verwendet werden, um Web -Service- Funktionalität zu erweitern und Anhängen zusätzliche Geschäftslogik werden.
- Validator als OSGi-Service aufgenommen und muss die ' IWSValidator ' -Schnittstelle implementieren.
- Validator können registriert zu einer Art von Web -Service- oder allen Web-Services zu hören sein .
- Wenn Validator muss auf alle Web -Service- Anrufe zu hören , dann verwenden Sie den besonderen Wert GLOBAL in WSType Parameter .
- Validatoren werden zu folgenden Zeiten genannt :
- # Bevor Parse
- # Nach Parse
- # Vor
- # Nach Speichern
RecordIDVariable
- RecordIDVariable wird hinzugefügt, um recordID Feld überschreiben und damit Unterstützung für Scripting .
- Mit diesem Parameter in Wunsch können Datensatz-ID aus Variable in requestCtx eingestellt werden.
- Aufruf dieser ist in zusammengesetzten Dienst zu setDocAction ohne Zugabe von Komplexität zu erfassen identifizieren durchzuführen.
- Unten Beispiel zeigt, wie es verwendet wird , um ein Dokument in früheren Operation innerhalb eines zusammengesetzten srequest erstellt abzuschließen.
<_0:compositeOperation> <_0:CompositeRequest> <_0:serviceType> SyncOrder </ _0 : serviceType > <_0:operations> <_0:operation PreCommit="false" postCommit="false"> <_0:TargetPort> CreateUpdateData </ _0 : TargetPort > <_0:ModelCRUD> <_0:serviceType> CreateOrderRecord </ _0 : serviceType > <_0:TableName> C_Order </ _0 : TableName > : : </ _0 : ModelCRUD > </ _0 : Betrieb > <_0:operation PreCommit="true" postCommit="false"> <_0:TargetPort> CreateUpdateData </ _0 : TargetPort > <_0:ModelCRUD> <_0:serviceT Ype> CreateOrderLine </ _0 : serviceT yp > <_0:TableName> C_OrderLine </ _0 : TableName > : : </ _0 : ModelCRUD > </ _0 : Betrieb > <_0:operation PreCommit="true" postCommit="true"> <_0:TargetPort> SetDocAction </ _0 : TargetPort > <_0:ModelSetDocAction> <_0:serviceType> CompleteOrder </ _0 : serviceT yp > <_0:tableName> C_Order </ _0 : tableName > <_0:recordID> 0 </ _0 : recordID > <_0:recordIDVariable> @ C_Order.C_Order_ID </ _0 : recordIDVariable > <_0:docAction> CO </ _0 : DocAction > </ _0 : ModelSetDocAction > </ _0 : Betrieb > </ _0 : Operationen > </ _0 : CompositeRequest > </ _0 : CompositeOperation >
- In obigen Anfrage , schaffen wir Ordnung und dann Abschluss derselben mit setDocAction Betrieb .
- Wir verwenden ' recordIDVariable ' auf Datensatz-ID für Bestellung vor diesem Vorgang erstellt abzurufen.
Referenz Überschreiben
- Web - Dienst verwendet Referenz Art von Tabelle Spalte als Standard , kann aber auch überschrieben werden Web Service Eingang -Feld , wie unten gezeigt .
- Wir verwenden diese übergeordneten Mechanismus, um benutzerdefinierte Look-up für Spalte.
- Zum Beispiel , wenn wir Referenz für ' M_Product ' Tabelle konfigurieren , die wir normalerweise benutzen Produktname .
- Jetzt können wir wählen, zu verwenden Artikelnummer , um Produkte in unserem Web - Service zu identifizieren.
- In diesem Fall können wir neue Look-up Welchen Nutzen Anzeigefeld als SKU definieren für das Produkt .
- Die folgende Abbildung zeigt , wie wir ' M_Product_ID Spalte ' CreateUpdateOrderLine Dienst konfiguriert .