|
Oracle BI Publisher Tipp
Zusammenführen
verschiedener Datenquellen im RTF-Template
unter Verwendung einer Variablen |
|
Einrichten mehrerer Datenquellen
In diesem Beispiel werden 2
Datenquellen in einen Bericht eingebunden, um diese später im
Template zu verknüpfen.
Wir verwenden hier als erste Datenquelle ein File mit
Abteilungsinformationen (siehe dept.xml).


Damit die Ergebnisse aus beiden Datenquellen für die Erzeugung der XML-Daten verwendet werden, muss das Main Data Set auf Concatenated SQL Data Source gesetzt werden.

Hierdurch entsteht eine XML-Struktur, die nacheinander die Daten aus den beiden Quellen aufführt (ohne dass zwischen diesen bereits eine Verbindung besteht.

Zum Testen des Beispieles kann hier eine XML-Datei gezogen werden. Damit kann mit Hilfe des Template Builders in Winword getestet werden, ohne das auf dem Server die gezeigten Data Sets eingerichtet werden müssen.
Verknüpfung (Master-Detail) im RTF-Template
Die Verknüpfung der beiden unabhängigen Strukturen im XML-File kann nun im RTF-Template erfolgen. Hierbei werden wir eine 2 verschachtelte Schleifen aufbauen, um die beiden Strukuren als Master-detail zu verknüpfen. Folgendes RTF verwenden wir hierbei (Sie können das RTF hier ziehen). Einen guten Überblick über die verwendeten Befehle gibt der Field Browser, in welchem man auch direkt die verwendeten Hilfe-Texte der Form-Felder editieren kann

Der verwendete Code sieht wie folgt aus
//-- Durchlaufen die Struktur der AbteilungenDas Ergebniss dieses Templates ist im folgenden zu sehen. Ein Master-Detail-Bericht über unterschiedliche Datenquellen!
<?for-each:ROW?>
//-- Merken des aktuellen Wertes des Feldes DEPTNO in der Variablen v_DEPTNO
<?xdoxslt:set_variable($_XDOCTX,'v_DEPTNO',DEPTNO)?>
//-- Ausgabe der Master-Information aus der ersten Datenquelle
<?DEPTNO?>
<?DNAME?>
<?LOC?>
//-- Durchlaufen die Struktur der Mitarbeiter aus der zweiten Datenquelle (Details)
<?for-each://EMP_ROW?>
//-- Vergleich der Abteilungsnummer des Mitarbeiters mit der gemerkten Nummer aus der "Abteilungsschleife"
<?if:DEPTNO=xdoxslt:get_variable($_XDOCTX,'v_DEPTNO')?>
//-- Ausgabe der Mitarbeiterinformationen, falls die Abteilungsnummer übereinstimmt
<?ENAME?>
<?JOB?>
<?HIREDATE?>
<?end if?>
<?end for-each?>
<?end for-each?>

Alternativ zu der Variante der Verwendung eines IF-Statements kann diese Bedingung auch direkt in die innere Schleife integriert werden. In dieser etwas eleganteren Variante sieht die Schleife dann wie folgt aus:
<?for-each://EMP_ROW[xdoxslt:get_variable($_XDOCTX, 'v_DEPTNO')=DEPTNO]?>
//-- Durchlaufen die Struktur der Abteilungen
<?for-each:ROW?>
//-- Merken des aktuellen Wertes des Feldes DEPTNO in der Variablen v_DEPTNO
<?xdoxslt:set_variable($_XDOCTX,'v_DEPTNO',DEPTNO)?>
//-- Ausgabe der Master-Information aus der ersten Datenquelle
<?DEPTNO?>
<?DNAME?>
<?LOC?>
//-- Durchlaufen die Struktur der Mitarbeiter aus der zweiten Datenquelle (Details) mit Bedingung
<?for-each://EMP_ROW[xdoxslt:get_variable($_XDOCTX, 'v_DEPTNO')=DEPTNO]?>
<?ENAME?>
<?JOB?>
<?HIREDATE?>
<?end for-each?>
<?end for-each?>
Folgende Dateien zu diesem Beispiel stehen zum Download zur Verfügung: