SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Stephan Engel OPITZ CONSULTING Bad Homburg GmbH	 Lösungen für Standard-anforderungen mit Köpfchen DOAG Konferenz 2010, Nürnberg, 17.11.2010 ApEx effektiv
Leistungs-angebot ,[object Object]
SOA/BPM
ORACLE
BI/DWH
OuttaskingKunden ,[object Object]
Über 600 KundenTätigkeits-felder ,[object Object]
Beratung
Implementierung
Betrieb
TrainingFakten ,[object Object]
400 Mitarbeiter
8 Standorte in D/PL/CHIndustrie / Versorger / Telekommunikation 29% Handel / Logistik / Dienstleistungen29% 42%Öffentliche Auftraggeber / Banken & Versicherungen / Vereine & Verbände
Fachliche Fehlermeldungen aus Prozessen Löschen nur mit Sicherheitsabfrage Rückfrage „Daten wurden geändert“  Navigation mit „Zurück“-Buttons Vorgestellte Lösungen
Geschäftslogik liegt in PL/SQL vor In dieser Geschäftslogik finden auch Validierungen statt. Schlägt eine Validierung fehl wird typischerweise eine Exceptiongeworfen Ziel: Diese Validierungen soll nur einmal aufgerufen werden und fachliche Meldungen in der Oberfläche angezeigt werden Fachliche Fehlermeldungen aus Prozessen
Szenario: Eingabeformular für Projekte Projektname muss eindeutig sein Gesichert durch einen Unique Constraint Default Verhalten: Fachliche Fehlermeldungen aus Prozessen
Einfache Lösung: Validierung implementieren Fachliche Fehlermeldungen aus Prozessen
Nachteil der Validierungslösung Performance Code-Redundanzen Aufwand bei der Entwicklung Vorteil Sieht gut aus Ziel: Entwicklung einer Lösung, die Nachteile kompensiert UND gut aussieht Fachliche Fehlermeldungen aus Prozessen
Lösungsansatz Fehlermeldungen in Collectionschreiben Bericht auf Seite 0, der aussieht wie Validierungsmeldungen Fachliche Fehlermeldungen aus Prozessen
Vorgehen: 1. Neue Collection beim Anmelden an die Anwendung anlegen: Fachliche Fehlermeldungen aus Prozessen
2. Methode zum Schreiben der Fehlermeldungen in die Collectionanlegen: Fachliche Fehlermeldungen aus Prozessen
3. Bericht auf Seite 0 anlegen: Fachliche Fehlermeldungen aus Prozessen
4. Globale Prozesse und Items definieren: Item F101_SHOW_ERRROS Branch definieren, der im Fehlerfall auf der Seite  bleibt Prozess anlegen, der die Collection aufräumt Fachliche Fehlermeldungen aus Prozessen
5. Fehler in PL/SQL fangen und loggen: Fachliche Fehlermeldungen aus Prozessen
Anforderung: Alle Löschaktionen in der Anwendung sollen mit einer Sicherheitsabfrage bestätigt werden Häufige Umsetzung: javascript:apex.confirm(htmldb_delete_message,'DELETE'); Nachteil: Muss bei jedem Button implementiert werden Löschen mit Sicherheitsabfrage
Idee: Einhängen in den Submit-Prozess Generisch auf allen Seiten automatisch eine Delete-Meldung anzeigen, wenn der Request bestimmten Werten entspricht Löschen mit Sicherheitsabfrage
Platzieren des JavaScript-Codes Löschen mit Sicherheitsabfrage <scriptlanguage="JavaScript" type="text/javascript"> apex.jQuery(document).ready(function() { functionsubmitOverride(event) { if(apex.jQuery('#pRequest').val().indexOf('DELETE')>-1) { if (confirm(htmldb_delete_message)) { this._submit(); }  } else { this._submit(); } } document.wwv_flow._submit = document.wwv_flow.submit; document.wwv_flow.submit = submitOverride; }); </script>
Dieser Code kann z. B. auf Seite 0 oder im Template platziert werden Vorteil Seite 0: Verhalten kann z. B. gezielt für bestimmte Seiten mit ApEx-Mitteln ausgeschaltet werden Code ist unabhängig vom gewählten Seitentemplate vorhanden Löschen mit Sicherheitsabfrage
Anstelle der Standard JavaScript Dialoge sind in ApEx 4 auch jQueryUI Dialoge  functionsubmitOverride(event) { if(apex.jQuery('#pRequest').val().indexOf('DELETE')>-1) { apex.jQuery('#ConfirmDeleteMessage').dialog('open');        } else { this._submit();       } } Löschen mit Sicherheitsabfrage
apex.jQuery('#ConfirmDeleteMessage').dialog({ autoOpen: false, width: 400,         modal: true, resizable: false, buttons: {             "Lieber nicht": function() {                  $(this).dialog('close');             },             "Klar, weg damit": function() { document.wwv_flow.submit(); }}});}); </script> Löschen mit Sicherheitsabfrage
Der hier vorgestellte Mechanismus kann auch für andere Themen benutzt werden z. B.: Änderungen finden nur nach Rückfrage statt, wenn Datensatz bestimmten Status hat Rückfrage kann z. B. lauten:„Daten wurden geändert“  Rückfrage „Daten wurden geändert“
Implementierung mit dem Gedanken „Checksumme“ Beim Laden der Seite den Inhalt aller Items in einen String packen Beim Submit prüfen, ob der alte String != Neue String und Request z.B. = „Back“ Wenn ja, dann Meldung anzeigen Vorteil: Funktioniert immer, z. B. auch bei tabellarischen Formularen Rückfrage „Daten wurden geändert“
Methode zum Bauen des Strings Item auf Seite 0 anlegen und z.B. mithilfe einer Dynamic Action das Item beim Laden der Seite füllen Rückfrage „Daten wurden geändert“  functioncalculatePageItemsChecksum()  {  returnapex.jQuery(":input").map(function(){  return (apex.jQuery(this).attr("id")=='pRequest'              ||apex.jQuery(this).attr("id")=='P0_PAGE_INPUT_TYPE_CHECKSUM'               || apex.jQuery(this).attr("id")==null               || apex.jQuery(this).attr("id")==''             )?null:apex.jQuery(this).val();  } ).get().join(",");  }; $s('P0_PAGE_INPUT_TYPE_CHECKSUM',calculatePageItemsChecksum());

Weitere ähnliche Inhalte

Andere mochten auch

Die 5 Mythen der Forms-Modernisierung
Die 5 Mythen der Forms-ModernisierungDie 5 Mythen der Forms-Modernisierung
Die 5 Mythen der Forms-Modernisierungenpit GmbH & Co. KG
 
Agilität und Microservices als Chance für Modernisierung?
Agilität und Microservices als Chance für Modernisierung?Agilität und Microservices als Chance für Modernisierung?
Agilität und Microservices als Chance für Modernisierung?enpit GmbH & Co. KG
 
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?enpit GmbH & Co. KG
 
Cloud-native Apps – Architektur, Implementierung, Demo
Cloud-native Apps – Architektur, Implementierung, DemoCloud-native Apps – Architektur, Implementierung, Demo
Cloud-native Apps – Architektur, Implementierung, Demoenpit GmbH & Co. KG
 

Andere mochten auch (8)

Die 5 Mythen der Forms-Modernisierung
Die 5 Mythen der Forms-ModernisierungDie 5 Mythen der Forms-Modernisierung
Die 5 Mythen der Forms-Modernisierung
 
Agilität und Microservices als Chance für Modernisierung?
Agilität und Microservices als Chance für Modernisierung?Agilität und Microservices als Chance für Modernisierung?
Agilität und Microservices als Chance für Modernisierung?
 
API Management - Why it matters!
API Management - Why it matters!API Management - Why it matters!
API Management - Why it matters!
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?
 
Forms 12c und der Oracle SB
Forms 12c und der Oracle SBForms 12c und der Oracle SB
Forms 12c und der Oracle SB
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Cloud-native Apps – Architektur, Implementierung, Demo
Cloud-native Apps – Architektur, Implementierung, DemoCloud-native Apps – Architektur, Implementierung, Demo
Cloud-native Apps – Architektur, Implementierung, Demo
 

Ähnlich wie ApEx effektiv - DOAG 2010 - OPITZ CONSULTING - Stephan Engel

Migrationspfade für Angular 2
Migrationspfade für Angular 2Migrationspfade für Angular 2
Migrationspfade für Angular 2Manfred Steyer
 
Angular von 0 auf 100
Angular von 0 auf 100Angular von 0 auf 100
Angular von 0 auf 100Yvette Teiken
 
.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 TypeScriptManfred Steyer
 
Modern angular 02_angular_mit_type_script
Modern angular 02_angular_mit_type_scriptModern angular 02_angular_mit_type_script
Modern angular 02_angular_mit_type_scriptManfred Steyer
 
Jpgraph - eine Einführung
Jpgraph - eine EinführungJpgraph - eine Einführung
Jpgraph - eine Einführungfrankstaude
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX ConnectTrivadis
 
Pure SQL for batch processing
Pure SQL for batch processingPure SQL for batch processing
Pure SQL for batch processingAndrej Pashchenko
 
1&1 Frontend Workshop II
1&1 Frontend Workshop II1&1 Frontend Workshop II
1&1 Frontend Workshop IINico Steiner
 
.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 1Manfred Steyer
 
Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)Ulrike Schwinn
 
Anwendungsbeispiele des (mobilen) Taskmanagementsystems key2operate
Anwendungsbeispiele des (mobilen) Taskmanagementsystems key2operateAnwendungsbeispiele des (mobilen) Taskmanagementsystems key2operate
Anwendungsbeispiele des (mobilen) Taskmanagementsystems key2operateadvenco Consulting GmbH
 
jQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/FluidjQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/FluidPeter Schuhmann
 
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)Nils Adermann
 
Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Stephan Hochdörfer
 
Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006Sven Haiges
 

Ähnlich wie ApEx effektiv - DOAG 2010 - OPITZ CONSULTING - Stephan Engel (20)

Migrationspfade für Angular 2
Migrationspfade für Angular 2Migrationspfade für Angular 2
Migrationspfade für Angular 2
 
Angular von 0 auf 100
Angular von 0 auf 100Angular von 0 auf 100
Angular von 0 auf 100
 
.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
 
Modern angular 02_angular_mit_type_script
Modern angular 02_angular_mit_type_scriptModern angular 02_angular_mit_type_script
Modern angular 02_angular_mit_type_script
 
Jpgraph - eine Einführung
Jpgraph - eine EinführungJpgraph - eine Einführung
Jpgraph - eine Einführung
 
Ruby on Rails SS09 06
Ruby on Rails SS09 06Ruby on Rails SS09 06
Ruby on Rails SS09 06
 
Logging und Debugging in Oracle Forms
Logging und Debugging in Oracle FormsLogging und Debugging in Oracle Forms
Logging und Debugging in Oracle Forms
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX Connect
 
Pure SQL for batch processing
Pure SQL for batch processingPure SQL for batch processing
Pure SQL for batch processing
 
1&1 Frontend Workshop II
1&1 Frontend Workshop II1&1 Frontend Workshop II
1&1 Frontend Workshop II
 
Performance-Analyse mit Bordmitteln
Performance-Analyse mit BordmittelnPerformance-Analyse mit Bordmitteln
Performance-Analyse mit Bordmitteln
 
jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?
 
.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
 
Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)
 
Anwendungsbeispiele des (mobilen) Taskmanagementsystems key2operate
Anwendungsbeispiele des (mobilen) Taskmanagementsystems key2operateAnwendungsbeispiele des (mobilen) Taskmanagementsystems key2operate
Anwendungsbeispiele des (mobilen) Taskmanagementsystems key2operate
 
Modernizing Oracle Forms - DOAG 2012
Modernizing Oracle Forms - DOAG 2012Modernizing Oracle Forms - DOAG 2012
Modernizing Oracle Forms - DOAG 2012
 
jQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/FluidjQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/Fluid
 
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
 
Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13
 
Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006
 

Mehr von OPITZ CONSULTING Deutschland

Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"OPITZ CONSULTING Deutschland
 
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOPITZ CONSULTING Deutschland
 
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOPITZ CONSULTING Deutschland
 
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OPITZ CONSULTING Deutschland
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OPITZ CONSULTING Deutschland
 
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OPITZ CONSULTING Deutschland
 
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OPITZ CONSULTING Deutschland
 
OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OPITZ CONSULTING Deutschland
 
Effiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungEffiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungOPITZ CONSULTING Deutschland
 

Mehr von OPITZ CONSULTING Deutschland (20)

OC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle LizenzierungOC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle Lizenzierung
 
OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021
 
OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021
 
OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"
 
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
 
OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"
 
OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"
 
10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung
 
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
 
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
 
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
 
OC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-LizenzierungOC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-Lizenzierung
 
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
 
OC|Weekly Talk The Power of DevOps…
OC|Weekly Talk  The Power of DevOps…OC|Weekly Talk  The Power of DevOps…
OC|Weekly Talk The Power of DevOps…
 
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
 
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
 
OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring
 
OC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remoteOC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remote
 
Effiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungEffiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud Nutzung
 

ApEx effektiv - DOAG 2010 - OPITZ CONSULTING - Stephan Engel

  • 1. Stephan Engel OPITZ CONSULTING Bad Homburg GmbH Lösungen für Standard-anforderungen mit Köpfchen DOAG Konferenz 2010, Nürnberg, 17.11.2010 ApEx effektiv
  • 2.
  • 6.
  • 7.
  • 11.
  • 13. 8 Standorte in D/PL/CHIndustrie / Versorger / Telekommunikation 29% Handel / Logistik / Dienstleistungen29% 42%Öffentliche Auftraggeber / Banken & Versicherungen / Vereine & Verbände
  • 14. Fachliche Fehlermeldungen aus Prozessen Löschen nur mit Sicherheitsabfrage Rückfrage „Daten wurden geändert“ Navigation mit „Zurück“-Buttons Vorgestellte Lösungen
  • 15. Geschäftslogik liegt in PL/SQL vor In dieser Geschäftslogik finden auch Validierungen statt. Schlägt eine Validierung fehl wird typischerweise eine Exceptiongeworfen Ziel: Diese Validierungen soll nur einmal aufgerufen werden und fachliche Meldungen in der Oberfläche angezeigt werden Fachliche Fehlermeldungen aus Prozessen
  • 16. Szenario: Eingabeformular für Projekte Projektname muss eindeutig sein Gesichert durch einen Unique Constraint Default Verhalten: Fachliche Fehlermeldungen aus Prozessen
  • 17. Einfache Lösung: Validierung implementieren Fachliche Fehlermeldungen aus Prozessen
  • 18. Nachteil der Validierungslösung Performance Code-Redundanzen Aufwand bei der Entwicklung Vorteil Sieht gut aus Ziel: Entwicklung einer Lösung, die Nachteile kompensiert UND gut aussieht Fachliche Fehlermeldungen aus Prozessen
  • 19. Lösungsansatz Fehlermeldungen in Collectionschreiben Bericht auf Seite 0, der aussieht wie Validierungsmeldungen Fachliche Fehlermeldungen aus Prozessen
  • 20. Vorgehen: 1. Neue Collection beim Anmelden an die Anwendung anlegen: Fachliche Fehlermeldungen aus Prozessen
  • 21. 2. Methode zum Schreiben der Fehlermeldungen in die Collectionanlegen: Fachliche Fehlermeldungen aus Prozessen
  • 22. 3. Bericht auf Seite 0 anlegen: Fachliche Fehlermeldungen aus Prozessen
  • 23. 4. Globale Prozesse und Items definieren: Item F101_SHOW_ERRROS Branch definieren, der im Fehlerfall auf der Seite bleibt Prozess anlegen, der die Collection aufräumt Fachliche Fehlermeldungen aus Prozessen
  • 24. 5. Fehler in PL/SQL fangen und loggen: Fachliche Fehlermeldungen aus Prozessen
  • 25. Anforderung: Alle Löschaktionen in der Anwendung sollen mit einer Sicherheitsabfrage bestätigt werden Häufige Umsetzung: javascript:apex.confirm(htmldb_delete_message,'DELETE'); Nachteil: Muss bei jedem Button implementiert werden Löschen mit Sicherheitsabfrage
  • 26. Idee: Einhängen in den Submit-Prozess Generisch auf allen Seiten automatisch eine Delete-Meldung anzeigen, wenn der Request bestimmten Werten entspricht Löschen mit Sicherheitsabfrage
  • 27. Platzieren des JavaScript-Codes Löschen mit Sicherheitsabfrage <scriptlanguage="JavaScript" type="text/javascript"> apex.jQuery(document).ready(function() { functionsubmitOverride(event) { if(apex.jQuery('#pRequest').val().indexOf('DELETE')>-1) { if (confirm(htmldb_delete_message)) { this._submit(); } } else { this._submit(); } } document.wwv_flow._submit = document.wwv_flow.submit; document.wwv_flow.submit = submitOverride; }); </script>
  • 28. Dieser Code kann z. B. auf Seite 0 oder im Template platziert werden Vorteil Seite 0: Verhalten kann z. B. gezielt für bestimmte Seiten mit ApEx-Mitteln ausgeschaltet werden Code ist unabhängig vom gewählten Seitentemplate vorhanden Löschen mit Sicherheitsabfrage
  • 29. Anstelle der Standard JavaScript Dialoge sind in ApEx 4 auch jQueryUI Dialoge functionsubmitOverride(event) { if(apex.jQuery('#pRequest').val().indexOf('DELETE')>-1) { apex.jQuery('#ConfirmDeleteMessage').dialog('open'); } else { this._submit(); } } Löschen mit Sicherheitsabfrage
  • 30. apex.jQuery('#ConfirmDeleteMessage').dialog({ autoOpen: false, width: 400, modal: true, resizable: false, buttons: { "Lieber nicht": function() { $(this).dialog('close'); }, "Klar, weg damit": function() { document.wwv_flow.submit(); }}});}); </script> Löschen mit Sicherheitsabfrage
  • 31. Der hier vorgestellte Mechanismus kann auch für andere Themen benutzt werden z. B.: Änderungen finden nur nach Rückfrage statt, wenn Datensatz bestimmten Status hat Rückfrage kann z. B. lauten:„Daten wurden geändert“ Rückfrage „Daten wurden geändert“
  • 32. Implementierung mit dem Gedanken „Checksumme“ Beim Laden der Seite den Inhalt aller Items in einen String packen Beim Submit prüfen, ob der alte String != Neue String und Request z.B. = „Back“ Wenn ja, dann Meldung anzeigen Vorteil: Funktioniert immer, z. B. auch bei tabellarischen Formularen Rückfrage „Daten wurden geändert“
  • 33. Methode zum Bauen des Strings Item auf Seite 0 anlegen und z.B. mithilfe einer Dynamic Action das Item beim Laden der Seite füllen Rückfrage „Daten wurden geändert“ functioncalculatePageItemsChecksum() { returnapex.jQuery(":input").map(function(){ return (apex.jQuery(this).attr("id")=='pRequest' ||apex.jQuery(this).attr("id")=='P0_PAGE_INPUT_TYPE_CHECKSUM' || apex.jQuery(this).attr("id")==null || apex.jQuery(this).attr("id")=='' )?null:apex.jQuery(this).val(); } ).get().join(","); }; $s('P0_PAGE_INPUT_TYPE_CHECKSUM',calculatePageItemsChecksum());
  • 34. Beim Submit prüfen, ob eine Meldung angezeigt wird Rückfrage „Daten wurden geändert“ if(!(apex.jQuery('#pRequest').val().indexOf('CANCEL')>-1 || apex.jQuery('#pRequest').val().indexOf('SAVE')>-1 || apex.jQuery('#pRequest').val().indexOf('DELETE')>-1) && (apex.jQuery('#P0_PAGE_INPUT_TYPE_CHECKSUM').val() != calculatePageItemsChecksum())) { apex.jQuery('#ConfirmUnsavedChangeMessage').dialog('open'); }
  • 35. In ApEx-Anwendungen wird häufig mit Buttons navigiert Deshalb soll auch der Anwendungsfall „Zurück“ über Buttons implementiert werden Navigation mit „Zurück“-Buttons
  • 36. Lösungsansätze: Javascript: Über die History kann auf die vorherige Seite zurücknavigiert werden. Nachteil: Funktioniert nicht, wenn zweimal auf der gleichen Seiten geblieben wird Mit einem speziellen Item auf den Seiten wird über die Funktion „Branchto Page Identifiedby Item“ auf die Ursprungsseite zurückgesprungen. Nachteil: Komplexere Navigationen sind sehr aufwendig Idee: Mit einer Collection einen Navigationsstack implementieren, bei „Back“ automatisch auf die letze Seite des Stacksnavigieren Navigation mit „Zurück“-Buttons
  • 37. Collection anlegen Prozess anlegen, der die aktuelle Seite auf den Stack legt Muss auf jeder Seite bis auf die Login Seite ausgeführt werden Wenn die oberste Seite auf dem Stack schon die aktuelle Seite ist, dann nichts tun Navigation mit „Zurück“-Buttons APEX_COLLECTION.CREATE_COLLECTION(p_collection_name => 'NAVIGATION_COLLECTION');
  • 38. Navigation mit „Zurück“-Buttons DECLARE v_last_page PLS_INTEGER; BEGIN SELECT c001 INTO v_last_page FROM (SELECT seq_id, c001 FROM apex_collections WHERE collection_name = 'NAVIGATION_COLLECTION' ORDER BY seq_id DESC) WHERE ROWNUM < 2; IF v_last_page != :app_page_id THEN apex_collection.add_member (p_collection_name => 'NAVIGATION_COLLECTION', p_c001 => :app_page_id ); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN apex_collection.add_member (p_collection_name => 'NAVIGATION_COLLECTION', p_c001 => :app_page_id ); END;
  • 39. 3. Prozess anlegen, der auf den „Zurück“-Button reagiert Navigation mit „Zurück“-Buttons DECLARE v_last_page PLS_INTEGER; v_seq_id PLS_INTEGER; BEGIN -- Vorherige Seite vom Stack ermitteln SELECT c001 INTO v_last_page FROM (SELECT seq_id, c001, ROW_NUMBER () OVER (ORDER BY seq_id DESC) seq FROM apex_collections WHERE collection_name = 'NAVIGATION_COLLECTION') WHERE seq = 2; -- Aktuelle Seite vom Stack ermitteln, damit sie gelöscht werden kann SELECT seq_id INTO v_seq_id FROM (SELECT seq_id, c001, ROW_NUMBER () OVER (ORDER BY seq_id DESC) seq FROM apex_collections WHERE collection_name = 'NAVIGATION_COLLECTION') WHERE seq = 1; …
  • 40. Navigation mit „Zurück“-Buttons -- Aktuelle Seite löschen apex_collection.delete_member (p_collection_name => 'NAVIGATION_COLLECTION', p_seq => v_seq_id ); -- Redirect OWA_UTIL.redirect_url ( 'f?p=' || :app_id || ':' || v_last_page || ':' || :app_session ); -- Verarbeitung abbrechen apex_application.g_unrecoverable_error := TRUE; EXCEPTION -- Keine Daten auf dem Stack, kein Redirect. WHEN NO_DATA_FOUND THEN NULL; END;
  • 41. Navigation mit „Zurück“-Buttons Abbruch führt automatisch auf die Seite, von der aus navigiert wurde
  • 42. Fazit Die hier vorgestellten Lösungen entlasten den Entwickler von Standardaufgaben, sind generisch im Ansatz und somit wiederverwendbar und erhöhen den Komfort für den Endbenutzer. Daher sollten sie in Erwägung gezogen werden, wenn eine Neuentwicklung mit ApEx begonnen wird!
  • 43. BesuchenSieauch die anderenVorträge von OPITZ CONSULTING und den Stand auf Ebene 2
  • 44. Kontakt Stephan Engel OPITZ CONSULTING Bad Homburg GmbH stephan.engel@opitz-consulting.com Tel. +49 6172 66260 1535