Logo Oracle Deutschland   Deutschsprachige APEX und PL/SQL Community

APEX 4.2: Neue Features für interaktive Berichte

Erscheinungsmonat APEX-Version Datenbankversion
Oktober 2012 ab 4.2 ab 10.2

Seit Oktober 2012 steht APEX 4.2 zum Download zur Verfügung. Dass der Schwerpunkt dieses Releases auf der Entwicklung von APEX-Anwendungen für Smartphones - auf Basis von jQuery Mobile und HTML5-Charts - liegt, dürfte mittlerweile nahezu überall bekannt sein. Doch das ist nicht alles. APEX 4.2 bringt noch mehr neue Features mit: Im Bereich der interaktiven Berichte hat sich sehr viel getan: Zwar ist auch weiterhin nur ein interaktiver Bericht pro Seite möglich, es gibt aber dennoch einige, interessante Neuerungen - dieser Tipp stellt sie im Detail vor.

Interaktive Berichte in APEX 4.2

Abbildung 1: Interaktive Berichte in APEX 4.2

Interaktive Berichtsspalten formatieren: HTML-Ausdruck

Eine sehr praktische Neuerung ist die Möglichkeit, für die Spaltendarstellung einen HTML-Ausdruck zu hinterlegen, wie es bei den klassischen Berichten schon immer möglich war. Das aufwändige Kodieren von HTML-Tags in der SQL-Abfrage gehört damit auch beim interaktiven Bericht der Vergangenheit an. Navigieren Sie dazu zu den Berichtsattributen des interaktiven Berichts und dann zu den Details der jeweiligen Spalte. Wie Abbildung 2 zeigt, gibt es nun einen neuen Abschnitt HTML-Ausdruck, der genauso funktioniert wie sein Pendant beim klassischen Bericht.

HTML-Ausdruck für eine interaktive Berichtsspalte hinterlegen

Abbildung 2: HTML-Ausdruck für eine interaktive Berichtsspalte hinterlegen

HTML-Ausdruck in einer interaktiven Berichtsspalte

Abbildung 3: HTML-Ausdruck in einer interaktiven Berichtsspalte

Email-Abonnements: Absenderadresse und einfache Abmeldung

Für Email-Abonnements eines interaktiven Berichts kann nun eine Absender-Mailadresse (FROM) hinterlegt werden. Bislang wurde die Empfängeradresse gleichzeitig als Absenderadresse verwendet, was manchmal zu Problemen führen kann.

Absenderadresse für Email-Abonnements hinterlegen

Abbildung 4: Absenderadresse für Email-Abonnements hinterlegen

Ein solches Attribut Absenderadresse gibt es nicht nur auf Ebene des interaktiven Berichts, sondern auch auf Anwendungsebene (bei den Anwendungsattributen) und auf Instanzebene. Die Einstellung auf Ebene des Berichts geht der anwendungsweiten und diese geht der instanzweiten Einstellung vor. Ist auf allen drei Ebenen nichts eingetragen, so wird, wie in früheren Versionen, die Adresse des Mail-Empfängers als Absender verwendet. Mit der Umgebungsvariable APP_EMAIL erhalten Sie Zugriff auf die applikations- oder instanzweit eingetragene Mailadresse.

Die generierte Email enthält nun auch einen direkten Unsubscribe-Link.

Automatisches Unsubscribe: Direkt aus der Email

Automatisches Unsubscribe: Direkt aus der Email

Abbildung 5: Automatisches Unsubscribe: Direkt aus der Email

PL/SQL-Zugriff auf interaktive Berichte: APEX_IR

Die Prozeduren und Funktionen für den PL/SQL-Zugang zu interaktiven Berichten wurden im neuen PL/SQL-Paket APEX_IR zusammengefasst. Besonders interessant ist die neue Funktion GET_REPORT, welche den Zugriff auf die aktuell ausgeführte SQL-Abfrage und die verwendeten Bind-Variablen erlaubt.

FUNCTION GET_REPORT RETURNS RECORD
 Argument Name                  Typ                     In/Out Defaultwert?
 ------------------------------ ----------------------- ------ --------
   SQL_QUERY                    VARCHAR2(32767)         OUT
   BINDS                        TABLE OF RECORD         OUT
 P_PAGE_ID                      NUMBER                  IN
 P_REGION_ID                    NUMBER                  IN
 P_REPORT_ID                    NUMBER                  IN     DEFAULT

Mit dieser Funktion bekommt man Zugriff auf die SQL-Abfrage, welche sich durch das Setzen von Filtern oder Berechnungen im interaktiven Bericht ergibt. Einen Eindruck bekommt man, indem man neben den interaktiven Bericht eine neue Region vom Typ Dynamischer PL/SQL Inhalt und folgender Regionsquelle stellt.

DECLARE
   l_report      apex_ir.t_report;

   l_region_id   number;
   l_region_name varchar2(200) := 'EMP / DEPT';
BEGIN     
  select region_id into l_region_id
  from apex_application_page_regions
  where application_id = :APP_ID and page_id = :APP_PAGE_ID 
   and region_name = l_region_name;
 
  htp.p('<pre>');
  l_report := APEX_IR.GET_REPORT (
    p_page_id   => :APP_PAGE_ID,
    p_region_id => l_region_id
  );
  htp.p(l_report.sql_query);
  for i in 1..l_report.binds.count loop
   htp.p(i||'. '|| l_report.binds(i).name|| '=' || l_report.binds(i).value);
  end loop;
  htp.p('</pre>');
END; 

Passen Sie den Inhalt der Variable l_report_name zu Beginn des PL/SQL Blocks an den Namen Ihrer Berichtsregion an und hinterlegen Sie den Code als Region vom Typ Dynamischer PL/SQL Inhalt. Starten Sie die Seite danach neu und fügen Sie einen Filter zu Ihrem interaktiven Bericht hinzu. Danach laden Sie die Seite mit [F5] neu. Sie sollten dann rechts oder unterhalb des interaktiven Berichts die verwendete SQL-Abfrage und die Bind-Variablen sehen können (Abbildung 6).

APEX_IR.GET_REPORT erlaubt Zugriff auf die SQL-Abfrage des interaktiven Berichts

Abbildung 6: APEX_IR.GET_REPORT erlaubt Zugriff auf die SQL-Abfrage des interaktiven Berichts

Diese Funktionalität ist besonders interessant, wenn man einer APEX-Anwendung kontextbezogene Funktionen hinzufügen möchte. Eigener PL/SQL-Code kann so genau mit den Daten arbeiten, die der Anwender in seinem interaktiven Bericht sieht. APEX_IR.GET_REPORT bietet darüber hinaus noch den Parameter REPORT_ID an; damit kann, von mehreren gespeicherten Berichten, ein ganz bestimmter angesprochen werden. Man ist also nicht auf die Variante beschränkt, die gerade angezeigt wurde.

Linguistische Suche in einem interaktiven Bericht

Nicht auf interaktive Berichte beschränkt, aber auch für diese extrem hilfreich ist die Möglichkeit, linguistische Sortierungen und Filter für eine APEX-Anwendung zu aktivieren. Damit können Akzente und andere diakritische Zeichen bei der Suche komplett ignoriert werden. Eine Suche nach Muller findet also auch den Müller. Navigieren Sie dazu zu den Gemeinsamen Komponenten und dort zum Bereich Globalization. Dort finden Sie nun zwei neue Einstellungsmöglichkeiten für Zeichenkettenvergleiche und Sortierungen. Stellen Sie diesen, wie in Abbildung 7 dargestellt, auf BINARY_AI und Linguistic ein ...

Akzent-insensitive Suche für eine APEX-Anwendung aktivieren

Abbildung 7: Akzent-insensitive Suche für eine APEX-Anwendung aktivieren

... speichern Sie ab und starten Sie erneut die Seite mit dem interaktiven Bericht. Wenn Sie nun SÄLES oder CLÉRK als Filter eingeben, werden dennoch Zeilen gefunden (Abbildung 7).

Akzent-Insensitive Suche in Aktion

Abbildung 8: Akzent-Insensitive Suche in Aktion

Wie man auf der rechten Seite erkennen kann, hat das keinen Einfluß auf die ausgeführte SQL-Abfrage: APEX setzt das um, indem die Session-Parameter NLS_COMP und NLS_LANG entsprechend gesetzt werden. Diese Einstellungen gelten übrigens anwendungsweit; also auch für klassische Berichte. Wenn Sie eine solche Suche beim klassischen Bericht dann zusätzlich noch durch einen Index unterstützen möchten, finden Sie im Community-Tipp Suchen mit SQL LIKE: Performance, Case- und Umlaut-Insensitive Suche weitere Informationen zum Thema.

Weitere neue Features

Darüber hinaus gibt es noch das eine oder andere, kleinere neue Feature:

  • Neue interaktive Berichte haben nun ein Zeilenmaximum von einer Million Zeilen und nicht mehr 100.000.
  • Gespeicherte interaktive Berichte bleiben nun erhalten, auch wenn sich die Anwendungs-ID ändert.
  • Gleichheits-Filter sind nun auch für DATE-Spalten unterstützt.

APEX 4.2 voll ausnutzen bedeutet also nicht nur, mobile Anwendungen zu erstellen und HTML5-Diagramme zu nutzen. Auch für die Nutzer interaktiver Berichte ist das Release hochinteressant - und natürlich gibt es auch darüber hinaus noch zahlreiche, interessante, Neuerungen.

zurück zur Community-Seite