APEX & MTdoxx

532 Aufrufe

Veröffentlicht am

Es wird gezeigt wie die Integration von MTdoxx mit APEX funktioniert.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
532
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
45
Aktionen
Geteilt
0
Downloads
1
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

APEX & MTdoxx

  1. 1. | MTdoxx Webservice in APEX Steven Grzbielok, Werkstudent Ratingen, 12.03.20141
  2. 2. | Grundidee  Use Case: Ein Kunde will an einer Konferenz teilnehmen. Zur Teilnahme wird ein Ticket benötigt. - Hierfür füllt er ein Formular in einer APEX Anwendung aus. - Sobald er die Bestellung abgeschickt hat, bekommt er direkt sein individuelles Ticket zum Download angeboten (finanzielle Transaktionen wurden der zur Vereinfachung nicht berücksichtigt). - Es wird nur eine Wordvorlage erstellt. Die einzelnen Tickets sollen automatisch ausgefüllt werden. Mtdoxx Webservice in APEX2 Über den Webservice-Aufruf die Formulardaten übergeben und direkt das ausgefüllte Dokument erhalten
  3. 3. || Demo Mtdoxx Webservice in APEX3
  4. 4. | Architektur  Der User schickt das Formular ab  „on submit“ wird ein Application Process ausgelöst - Hier wird der Prozess in der Datenbank aufgerufen  Eine SOAP Envelope und die benötigte XML werden dynamisch erstellt und an den Webservice gesendet. - Im Application Process wird die Rückgabe nun in der DB hinterlegt Mtdoxx Webservice in APEX4
  5. 5. | Quellcode: Beispiele (vereinfacht) g_ws_url varchar2(500) := 'http://URL/Webservice/Service.svc?singleWsdl'; --Aufteilung der SOAP Envelope in mehrere Teile, da die base64 Dateien zu groß für replace sind g_env_t1 CLOB:= '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> <soapenv:Header/> <soapenv:Body> <tem:GenerateDocument> <!--Optional:--> <tem:xmlDataInput>'; g_env_t2 CLOB:= '</tem:xmlDataInput> <!--Optional:--> <tem:masterTemplate>'; g_env_t3 CLOB:= '</tem:masterTemplate> <!--Optional:--> <tem:createPdf>false</tem:createPdf> </tem:GenerateDocument> </soapenv:Body> </soapenv:Envelope>'; --XML-Data-Input g_xml CLOB := '<?xml version="1.0" encoding="iso-8859-1"?> <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> <asx:values> <DATA_TABLE> <item> <MV_ALLG> <Adresszeile1>#VORNAME# #NACHNAME#</Adresszeile1> --Weitere XML tags </MV_ALLG> </item> </DATA_TABLE> </asx:values> </asx:abap> '; Mtdoxx Webservice in APEX5 Webservice Aufruf: SOAP Envelope und XML
  6. 6. | Quellcode: Beispiele (vereinfacht) function create_xml( p_vorname in VARCHAR2, --weitere Input Parameter ) return CLOB is value_xml CLOB; l_anrede VARCHAR2(20); --Weitere variablen begin value_xml:= g_xml; --Werte über das Event aus DB laden SELECT ticketpreis INTO l_ticketpreis FROM mtdoxx_ticketpklasse WHERE klassenid=p_ticketpklasse; --... --Werte einsetzen value_xml := replace(value_xml, '#VORNAME#', p_vorname); value_xml := replace(value_xml, '#NACHNAME#', p_nachname); --... return value_xml; end create_xml; Mtdoxx Webservice in APEX6 Webservice Aufruf: Funktion create_xml
  7. 7. | Quellcode: Beispiele (vereinfacht) function create_document(p_xml_data_input in CLOB, p_master_template in CLOB) return CLOB is l_soap_env CLOB; xml_base CLOB; l_value_xml CLOB; l_soap_response xmltype; g_env_getstring CLOB; begin g_env_getstring := g_env_t1||p_xml_data_input||g_env_t2||p_master_template||g_env_t3; l_soap_env := g_env_getstring; l_soap_response := apex_web_service.make_request( p_url => g_ws_url, p_action => 'http://tempuri.org/IService/GenerateDocument', p_envelope => l_soap_env ); l_value_xml := apex_web_service.parse_xml_clob( p_xml => l_soap_response, p_xpath => '//soap:GenerateDocumentResult/text()', p_ns => 'xmlns:soap="http://tempuri.org/"' ); return l_value_xml; end create_document; Mtdoxx Webservice in APEX7 Webservice Aufruf: Funktion create_document
  8. 8. | Vorteile bei der Nutzung von Mtdoxx (als Webservice)  Einfaches Setup  Flexibel erweiterbar  Skalierbar  Einfache Massengenerierung – Optimale Performance  Schnelle Template-Erstellung direkt in Word  Anpassungen am Template werden direkt ohne aufwendige Programmierung wirksam (teilweise XML Anpassung nötig) 8
  9. 9. | Vielen Dank. MT AG Balcke-Dürr-Allee 9 40882 Ratingen www.mt-ag.com9
  10. 10. | Quellcode: Beispiele (vereinfacht) Mtdoxx Webservice in APEX10 Application Process DECLARE xml_input_clob CLOB; xml_input_blob BLOB; xml_base_clob CLOB; mt_file BLOB; mt_base_clob CLOB; doc_clob CLOB; doc_result BLOB; BEGIN SELECT mastertemplate into mt_file FROM mtdoxxmastertemplate;--Mastertemplate wird als BLOB aus der DB abgerufen. mt_base_clob:= utl_base64.encode_base64(p_blob_in => mt_file);--Das Mastertemplate wird in das base64 Format codiert und als CLOB gespeichert xml_input_clob:= ws_create_document_package.create_xml(--Aufruf des Prozesses, der die XML erstellt. Rückgabe erfolgt hier als CLOB p_vorname => :P8_VORNAME, p_nachname => :P8_NACHNAME, --… ); xml_input_blob:= WS_CREATE_DOCUMENT_PACKAGE.convert_toblob(xml_input_clob);--CLOB wird zu BLOB konvertiert xml_base_clob:= utl_base64.encode_base64(p_blob_in => xml_input_blob);--XML wird als base64 codiert doc_clob:= ws_create_document_package.create_document(xml_base_clob, mt_base_clob);--Das Mastertemplate und die XML werden codiert an den Prozess zum Aufruf des Webservices übergeben doc_result:= utl_base64.decode_base64(p_clob_in => doc_clob);--Das Ergebnis wird wieder decodiert UPDATE TAB_DATEIEN--Das decodierte, ausgefüllte Dokument wird in einer Tabelle gespeichert, in der es für die Ausgabe in der Anwendung bereitliegt SET DATEIINHALT = doc_result WHERE ID=1; END;

×