31
© Copyright 2014. Apps Associates LLC. 1 Debugging in APEX

Debugging in APEX - doag.org · Informatica PowerCenter Technische und funktionale Beratung Prozessmodellierung ... Application Properties Error Handling Error Handling Function

Embed Size (px)

Citation preview

© Copyright 2014. Apps Associates LLC. 1

Debugging in APEX

© 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. 16

APEX Debug Options

© 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. 21

Debug Messages

Ergebnis:

© 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. 29

Remote Debugging

Video

© 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

Vielen Dank!