© Copyright 2014. Apps Associates GmbH. 2
Agenda
• Vorstellung Apps Associates
• Einleitung
• Error Handling
• APEX Debug Options
• Debug Messages
• Debugging APEX Collections
• Remote-Debugging mit dem SQL Developer und APEX
• Fazit
© Copyright 2014. Apps Associates GmbH. 3
Apps Associates Weltweit tätiger Dienstleister für Geschäfts- und Technologieberatung
2002 Gründung der Apps Associates LLC in Boston, MA, USA.
2006 Mit Gründung der Apps Associates GmbH in Dortmund beginnt das Engagement in Europa.
2013 Die Gesellschaften in Dubai und Oman werden gegründet.
2011 Gründung der Apps Associates BV in Eindhoven, Niederlande.
2003 Eröffnung des Global Delivery Centers (GDC) in Hyderabad, Indien.
32 Mio. U$ Umsatz in 2013
Partnerschaften mit ORACLE, Microsoft und Amazon
Daten und Fakten
650+ Mitarbeiter auf 3 Kontinenten
© Copyright 2014. Apps Associates GmbH. 4
Geschäftsbereiche
ERP-Beratung
Spezialisiert auf die Oracle eBusiness Suite
Financials, Supply Chain,
Order Management
Technische und funktionale Beratung
Business Intelligence Entwicklung Managed Service
Oracle Business Intelligence Enterprise Edition (OBIEE)
Oracle BI Applications
Oracle Warehouse Builder
Oracle Data Integrator
Informatica PowerCenter
Technische und funktionale Beratung
Prozessmodellierung
Datenbank Design
SQL & PL/SQL
Oracle Forms, Reports
Oracle Application Development Framework
Oracle XML/BI Publisher
Oracle Application Express
Applikations- und Datenbank-Support
Onsite und Offshore
24x7
© Copyright 2014. Apps Associates GmbH. 5
Referenzen
Maschinenhersteller DB-Entwicklung
Durchführung diverser Entwicklungsprojekte im Bereich Oracle Datenbanken und Oracle APEX. Die Business Logik der einzelnen Anwendungen liegt dabei jeweils in der Datenbank selbst. Von dort aus werden ebenfalls zahlreiche Workflows, Schnittstellen und Webservices gesteuert.
Privatbank ERP, DB-Entwicklung
Apps Associates unterstützt das Bankhaus Metzler im Bereich der Oracle eBusiness Suite und Datenbank-Entwicklung. So wurde in der Vergangenheit ein Release-Wechsel des ERP-Systems durchgeführt sowie zahlreiche Entwicklungsprojekte erfolgreich absolviert.
Versicherung ERP
MSIG zählt zu einer der größten Versicherungen weltweit und vertraut Apps Associates ihre komplette ERP Landschaft an. Neben den Tätigkeiten im Bereich ERP werden darüber hinaus diverse Entwicklungsprojekte gestemmt.
Automobil DB-Entwicklung
Apps Associates ist bei der Firma Audi als zentraler Dienstleister für Software-Entwicklungsprojekte verantwortlich. Technologisch greift Audi auf die Oracle Datenbank inklusive ihrer zahlreichen Features sowie Oracle APEX zurück, um individuelle Prozesse neben SAP abbilden zu können.
© Copyright 2014. Apps Associates LLC. 6
• Mit APEX kann schnell entwickelt werden • Schnell wachsende Komplexität • Sehr aufwendige Fehlersuche
• Welcher Prozess ist überhaupt fehlerhaft? • Was ist an dem Prozess fehlerhaft? • Werden die richtigen Werte von APEX übergeben? • Welche Werte hat meine APEX Collection? • …
Einleitung
© Copyright 2014. Apps Associates LLC. 7
Error Handling
Fehlermeldungen • verständlich • aussagekräftig
Nichtssagend!
Unverständlich!
Aussagekräftig und verständlich!
© Copyright 2014. Apps Associates LLC. 8
Error Handling
Process Error Message • sehr allgemein • wird immer angezeigt
EXCEPTION WHEN OTHERS THEN
raise_application_error(-20101,
‘Bitte geben Sie bei Personalnummer eine Zahl ein!‘);
Oracle Error Message • sehr technisch • wird angezeigt, wenn
keine PEM definiert ist
Selbst definierte Meldung • aussagekräftig • verständlich • wird angezeigt, wenn
keine PEM definiert ist
© Copyright 2014. Apps Associates LLC. 9
Error Handling
Redundante Arbeit • Erstellen einer Funktion zum Error Handling • Einbinden dieser Funktion unter Application Properties Error Handling Error Handling Function • Beispiel für so eine Funktion ist „apex_error_handling_example“
http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21676/apex_error.htm
© Copyright 2014. Apps Associates LLC. 10
Beispiel: Abfangen des DB-Fehlers „ORA-00001: unique constraint“ mit Hilfe der Beispielfunktion • Unique-Constraint für die Tabelle „DEPT“ erstellen
• Erstellen der Tabelle „CONSTRAINT_LOOKUP“
• benutzerfreundliche Fehlermeldung in die Tabelle „CONSTRAINT_LOOKUP“ schreiben
alter table DEPT
add constraint DEPT_DNAME_UK unique (DNAME);
insert into CONSTRAINT_LOOKUP
(CONSTRAINT_NAME, MESSAGE)
values
('DEPT_DNAME_UK', ‘Dname is already in use!');
Error Handling
© Copyright 2014. Apps Associates LLC. 11
Error Handling
Ausschnitt aus der Beispiel Funktion …
-- If it's a constraint violation like
-- -) ORA-00001: unique constraint violated
-- -) ORA-02091: transaction rolled back (-> can hide a deferred constraint)
-- -) ORA-02290: check constraint violated
-- -) ORA-02291: integrity constraint violated - parent key not found
-- -) ORA-02292: integrity constraint violated - child record found
-- we try to get a friendly error message from our constraint lookup
configuration.
-- If we don't find the constraint in our lookup table we fallback to
-- the original ORA error message.
if p_error.ora_sqlcode in (-1, -2091, -2290, -2291, -2292) then
l_constraint_name := apex_error.extract_constraint_name (
p_error => p_error );
begin
select message
into l_result.message
from constraint_lookup
where constraint_name = l_constraint_name;
exception when no_data_found then null;
-- not every constraint has to be in our lookup table
end;
…
© Copyright 2014. Apps Associates LLC. 12
Error Handling
Tritt nun ein „Invalid-Number-Fehler“ auf, erscheint folgende Fehlermeldung:
anstatt der Standardfehlermeldung:
© Copyright 2014. Apps Associates LLC. 13
• Debug einschalten unter „Edite Application Properties • APEX Developer Toolbar „Debug“ und „View Debug“
APEX Debug Options
© Copyright 2014. Apps Associates LLC. 14
Übersicht über die einzelnen Ausführungsschritte und die verbrauchte Zeit
APEX Debug Options
© Copyright 2014. Apps Associates LLC. 15
APEX Debug Options
• Beispiel: Ein Bericht, bei dem die SQL-Abfrage durch PL/SQL Code erstellt wird. Es soll ein Tabellenname aus einer Auswahlliste ausgewählt werden. Anschließend sollen alle varchar2-Felder dieser Tabelle ausgegeben werden.
© Copyright 2014. Apps Associates LLC. 17
• Weitere Funktionen der APEX Debug Options • Items • Pages • Queries • Tables • PL/SQL • Images • Session • Errors
APEX Debug Options
© Copyright 2014. Apps Associates LLC. 18
• Mit wwv_flow.debug (ab APEX Version 4.0 APEX_DEBUG) können DBMS_OUTPUT Meldungen
• in einer eigenen Tabelle gespeichert und in einem Bericht dargestellt werden
• in einer APEX Collection geschrieben und als Bericht ausgegeben werden
• im APEX Debug-Modus angezeigt werden.
Debug Messages
© Copyright 2014. Apps Associates LLC. 19
Beispiel: Ausgabe der Meldungen als APEX Debugging-Meldungen
create or replace procedure gehaltserhöhung is
Begin
dbms_output.put_line('Meldung Nr. 1: Bin in der Procedure');
dbms_output.put_line('Meldung Nr. 2: Erhöhung für Deptno 10');
update emp
set sal = sal + (sal * 0.05)
where deptno = 10;
dbms_output.put_line('Meldung Nr. 3: Erhöhung für Deptno 20');
update emp
set sal = sal + (sal * 0.03)
where deptno = 20;
dbms_output.put_line('Meldung Nr. 4: Erhöhung für Deptno 30');
update emp
set sal = sal + (sal * 0.04)
where deptno = 30;
end;
Debug Messages
© Copyright 2014. Apps Associates LLC. 20
declare
v_zeilen dbms_output.chararr;
v_anzahl number := 100;
begin
--DBMS_OUTPUT aktivieren
dbms_output.enable;
--eigentliche Procedure ausführen
gehaltserhöhung;
--Meldungszeilen aus dem Puffer abrufen; maximal 100 Zeilen (a_anzahl)
dbms_output.get_lines(v_zeilen, v_anzahl);
--Meldungszeilen mit apex_debug.message als APEX Debugging Meldung ausgeben
for i in 1..v_anzahl loop
apex_debug.message(v_zeilen(i));
end loop;
end;
Debug Messages
Prozessanpassungen:
© Copyright 2014. Apps Associates LLC. 22
Debugging APEX Collections
Collections • keine persistente Tabelle • zwischenspeichern von Datensätzen • manipulieren der Datensätze möglich • Session gebunden
SELECT *
FROM APEX_COLLECTIONS
WHERE COLLECTION_NAME = 'TEST_DEBUG_COLLECTION';
© Copyright 2014. Apps Associates LLC. 23
SELECT select text from dba_views
where view_name = 'WWV_FLOW_COLLECTIONS';
Debugging APEX Collections
Definition der View „WWV_FLOW_COLLECTIONS“ Collection
Die WHERE-Bedingung bewirkt, dass im Developer keine Daten der Collection angezeigt werden.
© Copyright 2014. Apps Associates LLC. 24
begin
wwv_flow_api.set_security_group_id(1048427233631152);
wwv_flow.g_flow_id := 118;
wwv_flow.g_instance := 1543014322242101;
end;
• Seurity Group ID = Workspace ID Kann aus der View APEX_WORKSPACES entnommen werden.
• Flow ID = Application ID Kann aus der URL im Browser entnommen werden.
• Instance = Session ID Kann aus der URL im Browser entnommen werden.
Debugging APEX Collections
© Copyright 2014. Apps Associates LLC. 25
SELECT C001, C002, C003, C004, C005, C006, C007, C008
FROM APEX_COLLECTIONS
where collection_name = 'TEST_DEBUG_COLLECTION';
Debugging APEX Collections
© Copyright 2014. Apps Associates LLC. 26
CREATE OR REPLACE VIEW MY_APEX_COLLECTIONS_DEBUG
AS
SELECT col.flow_id, col.user_id, col.session_id, col.collection_name,
colm.seq_id, colm.c001, colm.c002, colm.c003,colm.c004, colm.c005,
colm.c006,colm.c007, colm.c008, colm.c009, colm.c010, colm.c011, colm.c012,
colm.c013,colm.c014, colm.c015, colm.c016,colm.c017, colm.c018, colm.c019,
colm.c020, colm.c021, colm.c022, colm.c023,colm.c024, colm.c025,
colm.c026,colm.c027, colm.c028, colm.c029, colm.c030, colm.c031, colm.c032,
colm.c033,colm.c034, colm.c035, colm.c036,colm.c037, colm.c038, colm.c039,
colm.c040, colm.c041, colm.c042, colm.c043,colm.c044, colm.c045,
colm.c046,colm.c047, colm.c048, colm.c049, colm.clob001
FROM apex_040200.wwv_flow_collections$ col,
apex_040200.wwv_flow_collection_members$ colm
WHERE col.id = colm.collection_id;
Debugging APEX Collections
Alternative: • eine View ohne die Where-Klausel erstellen (als DBA) • der View einen anderen Namen geben • vor unberechtigten Zugriffen schützen
© Copyright 2014. Apps Associates LLC. 27
SELECT * FROM MY_APEX_COLLECTIONS_DEBUG;
Debugging APEX Collections
© Copyright 2014. Apps Associates LLC. 28
Remote-Debugging mit dem SQL Developer und APEX
• PL/SQL-Code, der von einer Application Express-Anwendungen ausgeführt wird, kann mit dem Oracle SQL Developer gedebuggt werden.
Vorbereitung:
• das Parsing-Schema, in welchem die Anwendung läuft, braucht das Systemprivileg DEBUG CONNECT SESSION
• das Schema, unter dem die Application Express-Sessions ablaufen (normalerweise APEX_PUBLIC_USER) benötigt das Privileg DEBUG ANY PROCEDURE oder für einzelne Prozeduren GRANT DEBUG ON COMMUNITY.MY_PROCEDURE to APEX_PUBLIC_USER.
Hinweis:
PL/SQL-Code, der direkt als Prozesstext in Application Express hinterlegt wurde, kann nicht mit dem SQL Developer gedebuggt werden; der Code muss dazu als PL/SQL-Funktion, -Prozedur oder -Package hinterlegt werden.
Remote Debugging
© Copyright 2014. Apps Associates LLC. 30
• APEX bietet einige Unterstützung bei der Fehlersuche und dem Error Handling.
• Mit der richtigen Vorgehensweise kann ein benutzerfreundliches und effektives Error Handling implementiert und redundante Arbeit vermieden werden.
• Besonders zusammen mit dem SQL Developer können APEX Applikationen gut und schnell gedebugt werden.
• Die Fehlersuche lässt sich nicht ganz vermeiden, aber immerhin um einiges erleichtern!
Fazit