10
MTdoxx Webservice in APEX Steven Grzbielok, Werkstudent Ratingen, 12.03.2014 1

APEX & MTdoxx

  • Upload
    mt-ag

  • View
    157

  • Download
    0

Embed Size (px)

Citation preview

Page 1: APEX & MTdoxx

|

MTdoxx Webservice in APEX

Steven Grzbielok, Werkstudent

Ratingen, 12.03.20141

Page 2: APEX & MTdoxx

|

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

Page 3: APEX & MTdoxx

||

Demo

Mtdoxx Webservice in APEX3

Page 4: APEX & MTdoxx

|

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

Page 5: APEX & MTdoxx

|

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

Page 6: APEX & MTdoxx

|

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

Page 7: APEX & MTdoxx

|

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

Page 8: APEX & MTdoxx

|

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

Page 9: APEX & MTdoxx

|

Vielen Dank.MT AG

Balcke-Dürr-Allee 9

40882 Ratingen www.mt-ag.com9

Page 10: APEX & MTdoxx

|

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;