Berichte miteinander verknüpfen - auf die andere Art

Lesen Sie in diesem Tipp, wie Sie in einem Bericht Datensätze markieren und Ihnen daraufhin im einem zweiten Bericht Details zu diesen Sätzen angezeigt werden. Die Details erscheinen sofort, nachdem der Datensatz links markiert wurde. Für dieses Beispiel wurden die allseits bekannten Tabellen EMP und DEPT herangezogen.


Abb. 1: Zwei miteinander verknüpfte Berichte als Ziel

Zunächst muss die Anwendung sich die Datensätze, die links markiert werden, merken. Legen Sie dazu ein verstecktes (hidden) Element an (bspw. PX_SELECTED_ITEMS).

Als nächstes legen Sie den ersten Bericht an. Beachten Sie, dass der Bericht eine zusätzliche Spalte zur Darstellung der Checkbox benötigt. Nehmen Sie am besten einen SQL Bericht und hinterlegen Sie als Abfrage:

select 
  HTMLDB_ITEM.CHECKBOX(
    1, 
    empno, 
    'onClick="javascript:doSubmit(''Go'')"', 
    :PX_SELECTED_ITEMS, 
    ':'
  ) as empno, 
  empno empno_display, 
  ename 
from emp

Die Funktion HTMLDB_ITEM.CHECKBOX erzeugt, wie der Name bereits nahelegt, eine HTML Checkbox. Dabei haben die Parameter im einzelnen folgende Bedeutung:

  1. Unter der Nummer 1 kann der Inhalt der Checkbox (die angeklickten Werte) später angesprochen werden. Dazu wird die Variable HTMLDB_APPLICATION.G_F01 verwendet. Bei einer 2 würden Sie die Variable HTMLDB_APPLICATION.G_F02 verwenden. Sie können Werte zwischen 1 und 50 verwenden.
  2. Wenn eine Checkbox angeklickt wird, wird als Wert für die jeweilige Zeile die EMPNO übergeben.
  3. Das HTML-Attribut onClick sorgt dafür, dass die beiden Berichte nach jedem Klick sofort synchronisiert werden.
  4. Beim Aufbau des Berichts sollen die Checkboxes anhand des Elements PX_SELECTED_ITEMS vorbelegt werden. Dieses Element haben Sie soeben angelegt. Dadurch "merkt" sich die Anwendung Ihre getätigten Klicks.
  5. Im Element PX_SELECTED_ITEMS sind die einzelnen Werte durch Doppelpunkte voneinander getrennt. Warum das so ist, lesen Sie im weiteren Verlauf dieses Artikels.


Abb. 2: Der erste Bericht mit den HTML Check Boxes

Fügen Sie nun noch eine Verzweigung (Page branch) auf die gleiche Seite hinzu. Diese Verzweigung soll an keine Bedingung geknüpft sein.




Wenn Sie nun bereits Datensätze markieren, werden Sie feststellen, dass die Anwendung Ihre Markierungen sofort wieder "vergisst". Im nächsten Schritt sorgen Sie dafür, dass die angeklickten Zeilen auch wirklich im Element PX_SELECTED_ITEMS gespeichert werden. Legen Sie dazu einen onSubmit-Prozess an, legen Sie als Typ PL/SQL fest, und hinterlegen Sie folgenden Code:

BEGIN  
  :PX_SELECTED_ITEMS := 
    HTMLDB_UTIL.TABLE_TO_STRING(HTMLDB_APPLICATION.G_F01);
END;

Die Funktion HTMLDB_UTIL.TABLE_TO_STRING wandelt die "Liste" der markierten Zeilen in einen String um. Die markierten EMPNO-Werte sind dann - durch Doppelpunkte getrennt - darin enthalten. Der String wird im Element PX_SELECTED_ITEMS gespeichert. So "merkt" sich die HTML DB die markierten Elemente für die Dauer der Sitzung. Nun können Sie einige Datensätze im Bericht anklicken. Nach jedem Klick baut sich die Seite neu auf - die markierten Zeilen bleiben markiert.

Fehlt nur noch der Detail-Bericht. Dieser soll - wie der Name nahelegt - zu allen markierten Zeilen die Details anzeigen. Auf SQL-Ebene muss daher in der WHERE-Klausel eine IN-Bedingung verwendet werden. Legen Sie also einen neuen SQL Bericht an. Als Abfrage hinterlegen Sie einen kleinen PL/SQL-Block, der ein SQL-Kommando zurückliefert.

declare
  v_sql varchar2(32767);
begin
  v_sql := 'select e.empno, e.ename, e.sal, e.comm, d.dname, d.loc ';
  v_sql := v_sql || ' from emp e join dept d using (deptno) ';
  if :PX_SELECTED_ITEMS is not null then
    v_sql := v_sql ||' where empno in ('||replace(:PX_SELECTED_ITEMS,':',',')||')';
  else 
    v_sql := v_sql ||' where 1=0';
  end if;
  return v_sql;
end;

Zeile 7 setzt die Abfragebedingung für den Detailbericht zusammen. Wie bereits beschrieben, stehen im Element PX_SELECTED_ITEMS, durch Doppelpunkte getrennt, die EMPNO-Werte der markierten Zeilen. Die REPLACE-Funktion wandelt die Doppelpunkte in Kommata um - fertig ist die SQL-Bedingung.

Stellen Sie den Bericht fertig und starten Sie die Seite neu. Das Ergebnis sollte nun in etwa wie folgt aussehen:


Abb. 3: Das Ergebnis

Alle Zeilen, die Sie links markieren, werden in den Bericht auf der rechten Seite aufgenommen. Wenn der Detail-Bericht noch eine Möglichkeit zum Excel-Download erhält, können die Nutzer der Anwendung sich Ihre Daten auf bequemem Wege zusammenstellen.

Zurück zur Community-Seite