SlideShare ist ein Scribd-Unternehmen logo
1 von 10
Downloaden Sie, um offline zu lesen
|
MTdoxx Webservice in APEX
Steven Grzbielok, Werkstudent
Ratingen, 12.03.20141
|
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
||
Demo
Mtdoxx Webservice in APEX3
|
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
|
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
|
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
|
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
|
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
|
Vielen Dank.
MT AG
Balcke-Dürr-Allee 9
40882 Ratingen www.mt-ag.com9
|
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;

Weitere ähnliche Inhalte

Ähnlich wie APEX & MTdoxx

YAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
Jens Klein
 
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesAgiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
Dominik Hirt
 
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajaxMT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG
 

Ähnlich wie APEX & MTdoxx (20)

YAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
 
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
Monitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_healthMonitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_health
 
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesAgiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
 
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajaxMT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
 
Angular2
Angular2Angular2
Angular2
 
Angular von 0 auf 100
Angular von 0 auf 100Angular von 0 auf 100
Angular von 0 auf 100
 
Migrationspfade für Angular 2
Migrationspfade für Angular 2Migrationspfade für Angular 2
Migrationspfade für Angular 2
 
Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...
Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...
Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...
 
B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
MVVM Pattern
MVVM Pattern MVVM Pattern
MVVM Pattern
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
 
Übersicht Skriptsprachen
Übersicht SkriptsprachenÜbersicht Skriptsprachen
Übersicht Skriptsprachen
 
Appbasierte Wertstromanalyse und Simulation mit SimVSM
Appbasierte Wertstromanalyse und Simulation mit SimVSMAppbasierte Wertstromanalyse und Simulation mit SimVSM
Appbasierte Wertstromanalyse und Simulation mit SimVSM
 
.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1
 
Vorlesung SOA - DIS AG.pptx
Vorlesung SOA - DIS AG.pptxVorlesung SOA - DIS AG.pptx
Vorlesung SOA - DIS AG.pptx
 
Von Typo3 zu Plone - Ein Migrationsbericht
Von Typo3 zu Plone - Ein MigrationsberichtVon Typo3 zu Plone - Ein Migrationsbericht
Von Typo3 zu Plone - Ein Migrationsbericht
 
Legacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenLegacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpen
 

Mehr von MT AG

Mehr von MT AG (14)

20160307 apex connects_jira
20160307 apex connects_jira20160307 apex connects_jira
20160307 apex connects_jira
 
20160307 apex on_the_rocks
20160307 apex on_the_rocks20160307 apex on_the_rocks
20160307 apex on_the_rocks
 
20160308 apex sso
20160308 apex sso20160308 apex sso
20160308 apex sso
 
MT AG Data Vault Generator
MT AG Data Vault GeneratorMT AG Data Vault Generator
MT AG Data Vault Generator
 
MT AG: Sesam oeffne Dich
MT AG: Sesam oeffne DichMT AG: Sesam oeffne Dich
MT AG: Sesam oeffne Dich
 
MT AG: Implementierungsvarianten mit-apex4.1
MT AG: Implementierungsvarianten mit-apex4.1MT AG: Implementierungsvarianten mit-apex4.1
MT AG: Implementierungsvarianten mit-apex4.1
 
MT AG Präsentation Rapid Application Development mit APEX 5
MT AG Präsentation Rapid Application Development mit APEX 5MT AG Präsentation Rapid Application Development mit APEX 5
MT AG Präsentation Rapid Application Development mit APEX 5
 
Datenmodellierung ist langweilig, lassen Sie Datamodeler das machen
Datenmodellierung ist langweilig, lassen Sie Datamodeler das machenDatenmodellierung ist langweilig, lassen Sie Datamodeler das machen
Datenmodellierung ist langweilig, lassen Sie Datamodeler das machen
 
Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?
 
Tune up your APEX
Tune up your APEXTune up your APEX
Tune up your APEX
 
Echtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenEchtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisieren
 
Echtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenEchtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisieren
 
Five Finger Death Punch
Five Finger Death PunchFive Finger Death Punch
Five Finger Death Punch
 
Dateien per Drag & Drop in APEX Applikationen ablegen.
Dateien per Drag & Drop in APEX Applikationen ablegen.Dateien per Drag & Drop in APEX Applikationen ablegen.
Dateien per Drag & Drop in APEX Applikationen ablegen.
 

APEX & MTdoxx

  • 1. | MTdoxx Webservice in APEX Steven Grzbielok, Werkstudent Ratingen, 12.03.20141
  • 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
  • 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. | 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. | 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. | 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. | 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. | Vielen Dank. MT AG Balcke-Dürr-Allee 9 40882 Ratingen www.mt-ag.com9
  • 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;