Beiträge

Oracle APEX: Custom error messages mit APEX_ERROR

Die Haupt-Anwendungsfälle im Zusammenhang mit der Ausgabe von Fehlermeldungen in APEX-Applikationen dürften die meisten Entwickler nach einer verhältnismäßig kurzen Einarbeitungszeit kennen:

  • Entweder werden Validations ausgeführt, schlagen an und sollen den Endanwender darüber informieren, dass eine entsprechende Bedingung verletzt wurde.
  • Oder während der Ausführung eines Page Processes tritt ein Fehler auf, über den der Endanwender in Kenntnis gesetzt werden soll.

 

Wollten Entwickler in älteren APEX-Versionen eigene Fehlermeldungen ausgeben, geschah dies häufig über die Nutzung der Variable apex_application.g_print_success_message unter zusätzlicher Angabe von Style-Informationen:

apex_application.g_print_success_message := '<span style="color:red;">Achtung: Bei der Aufbereitung der Datei-Inhalte sind insgesamt 23 Fehler aufgetreten, die Daten konnten daher nicht importiert werden.</span>';

Mittlerweile jedoch stellt das APEX-eigene Package APEX_ERROR viel elegantere Möglichkeiten für den Umgang mit eigenen Fehlermeldungen zur Verfügung:

 

Die überladene Prozedur ADD_ERROR bietet verschiedene Varianten an um eigene Fehlermeldungen auf den Error Stack zu legen, die Darstellung übernimmt dabei APEX, so dass die Notwendigkeit zu expliziten Style-Angaben entfallen kann. Ein entsprechender Prozess im Page Processing könnte damit beispielsweise so aussehen:

DECLARE
 -- define some variables
 v_status NUMBER;
 ...
BEGIN
-- do some fancy stuff
...
 v_status := my_schema.my_package.my_function(p_var => '[MY_VALUE]');

IF v_status > 0 THEN
apex_error.add_error(p_display_location => apex_error.c_inline_in_notification,
p_message => 'Achtung: Es ist ein Fehler aufgetreten, so dass…');
 END IF;
EXCEPTION
WHEN OTHERS THEN
-- do some error logging
...
RAISE;
END;

Das eigentliche Potential entfaltet dieses Package aber dann, wenn man auf auftretende Fehler speziell reagieren will, beispielsweise weil gewisse Fehler häufiger auftreten und die Seite speziell für bestimmte Fehlerfälle bestimmte zusätzliche Button-Aktionen oder Auswertungen zur Verfügung stellen soll. Dafür kann man statt der Variable v_status im obigen Code ein Hidden Item P12_STATUS setzen und nach dem Ausführen der Prozesse über einen Branch die Seite neu aufrufen und das Item dabei übergeben. Der Aufruf von APEX_ERROR geschieht nun nicht mehr im Page Processing sondern im Page Rendering und nur dann wenn P12_STATUS einen Wert > 0 enthält

IF :P12_STATUS = '1' THEN
apex_error.add_error(p_display_location => apex_error.c_inline_in_notification,
 p_message => 'Achtung: Das Hochladen der Daten war nicht erfolgreich, so dass…');
ELSIF :P12_STATUS = '2' THEN
 apex_error.add_error(p_display_location => apex_error.c_inline_in_notification,
p_message => 'Achtung: Das Parsen der Daten ist fehlgeschlagen, so dass…');
ELSE
...
END IF;

Zusätzlich besteht nun natürlich die Möglichkeit status-abhängig zusätzliche Items etc. anzubieten – zum Beispiel ein Button um die Daten erneut hochzuladen für P12_STATUS = ‚1‘ oder ein Report mit den Parsing-Fehlern für P12_STATUS = ‚2‘.

Oracle Integrated Lights Out Manager

IPMI Fehler „Activate Session command failed Error“

Beim Hinzufügen eines Exadata Infiniband Assets zur Exalogic Control BUI trat bei einem unserer Kunden der IPMI Fehler „Unable to establish LAN session“ auf.

[root@dm01dbadm01 ~]# ipmitool -v sel  -H <IB_HOST> -U ilom-admin  -P <PASSWORD> 
Activate Session command failed Error: Unable to establish LAN session Get SEL Info command failed

In diesem Fall war das Problem, dass der eigentliche Fehler nicht angezeigt wurde. Eine Anmeldung am Infiniband Switch über das HTTP Interface als Benutzer „root“ oder „ilom-admin“ zeigte keine Probleme oder Fehler.  Der eigentliche Fehler in diesem Fall war, dass für den Benutzer „ilom-admin“ nicht explizit ein Passwort gesetzt wurde.

In diesem Fall ist die Lösung sehr einfach, indem man das Passwort des „ilom-admin“ Benutzer zurücksetzt.

Wenn alles funktioniert, sollte der IPMI-Befehl einen ähnliche Output wie folgt zurückgeben:

[root@dm01dbadm01 ~]# ipmitool -v sel  -H <IB_HOST> -U ilom-admin  -P <PASSWORD>
SEL Information
Version          : 2.0 (v1.5, v2 compliant)
Entries          : 114
Free Space       : 14310 bytes
Percent Used     : 11%
Last Add Time    : 11/22/2013 15:46:54
Last Del Time    : Not Available
Overflow         : false
Supported Cmds   : 'Reserve' 'Get Alloc Info' 
# of Alloc Units : 909
Alloc Unit Size  : 18
# Free Units     : 795
Largest Free Blk : 795
Max Record Size  : 18

Ein Eintrag im MOS beschreibt ein ähnliches Problem im Zusammenhang mit der Oracle Cloud Conrol.

Der Error kann auch auf der Exadata Plattform auftreten.

Bug 14136908 : NEED BETTER ERROR HANDLING FOR ILOM USER PWD INSTEAD OF UNABLE TO ESTABLISH IPMI

 Englische Version