APEX in Oracle Business Intelligence (Oracle BI) integrieren

von Tom Fuhr, Oracle Consulting, thomas{dot}fuhr[at]oracle(dot)com, September 2009

Keine Frage, Oracle Business Intelligence (Oracle BI) ist mit all seinen Komponenten und Funktionen ein sehr leistungsstarkes Tool. Aber bezüglich der Bearbeitung von Daten steht nur die Write-Back-Funktion zur Verfügung. Nichts im Vergleich zu dem, was hier APEX bieten kann. Also wäre es doch sinnvoll, die Stärken beider Werkzeuge zu vereinigen.
In diesem ersten "Oracle BI"-Tipp lernen Sie, wie man APEX so in Oracle BI einbinden kann, dass eine APEX-Anwendung aus Oracle BI heraus ohne neuerliche Anmeldung aufgerufen werden kann.

Die Schritte in der Übersicht

Schritt 1: SQL-Skript ausführen

Führen Sie das Skript APEX-BIEE-INTEGRATION.SQL im Schema des APEX Workspace aus (SQL> @apex-biee-integration.sql) oder laden Sie das Skript in den SQL-Workshop Ihres APEX Workspace und führen es dort aus.

Das Skript erstellt die Tabelle APEX_BIEE_SESSION (Spalten: USERNAME, SESSION_ID, VALID_TO) und das PL/SQL Package APEX_BIEE_INT.

Das PL/SQL Package APEX_BIEE_INT enthält folgende Funktionen:

Schritt 2: APEX-Anwendung anpassen

Um die APEX-Anwendung in Oracle BI integrieren zu können, bedarf es folgender Anpassungen:

Schritt 2.1: Authentifizierungsschema anpassen

Die wichtigste Anpassung ist die Verwendung der Seiten-Sentry-Funktion APEX_BIEE_INT.PAGE_SENTRY im aktuellen Authentifizierungsschema der APEX-Anwendung (s. Erläuterung oben).
Rufen Sie dazu das aktuelle Authentifizierungsschema unter Gemeinsame Komponenten - Authentifizierungsschemas auf.

Tragen Sie im Feld "Seiten-Sentry-Funktion" folgendes ein:

RETURN apex_biee_int.page_sentry;

Schritt 2.2: Abmelde-Seite und Abmelde-Prozeß erstellen

Beim Abmelden von der APEX-Anwendung soll zusätzlich das von APEX verwendete Cookie LOGIN_USERNAME_COOKIE gelöscht werden. Wir erstellen dazu eine leere Seite 102. Auf der Seite 102 erstellen wir einen entsprechenden Before-Header-Prozeß. Und abschließend ändern wir den Abmelde-Link in der Navigationsleiste.

Schritt 2.3: Schaltfläche erstellen

Aus Oracle BI heraus soll in diesem Tipp eine APEX-Seite in einem Popup-Window aufgerufen werden. Hierfür benötigen wir die Schaltfläche "Schliessen".
Die Schaltfläche soll allerdings nur sichtbar sein, wenn die Seite aus Oracle BI heraus aufgerufen wird.

Schritt 3 (Optional): Oracle BI Repository und Web-Katalog (Presentation) erstellen

Diesen Schritt müssen Sie nicht zwingend durchführen. Die nachfolgenden Schritte 4 und 5 können Sie auch in einem bestehenden Repository/ Web-Katalog durchführen.
Aber vielleicht interessiert es Sie, wie man ein Oracle BI Repository und einen Web-Katalog (Presentation) auf der "grünen Wiese" aufsetzt.

Schritt 3.1: Oracle BI Services stoppen

Zunächst müssen wir die Oracle BI Services stoppen:

Start > All Programs > Administrative Tools > Services:

Schritt 3.2: Neues Repository erstellen

Leeres Repository erstellen

Abbildung 1: Neues Repository erstellen

Neues Repository in Datei NQSConfig.ini eintragen

Abbildung 2: Neues Repository in Datei NQSConfig.ini eintragen

Beim nächsten Start des BI Server wird dann das Repository "apex_integration" verwendet.

Schritt 3.3: Neuen Web-Katalog (Presentation) erstellen

Beim nächsten Start des Presentation Server wird dann ein Ordner "apex_integration" mit entsprechenden Untverzeichnissen angelegt.

Neuen Web-Katalog in Datei instanceconfig.xml eintragen

Abbildung 3: Neuen Web-Katalog in Datei instanceconfig.xml eintragen

Schritt 4: Anpassungen im Oracle BI Repository durchführen

In diesem Schritt führen wir die notwendigen Anpassungen im Oracle BI Repository durch. Für die Integration von APEx in Oracle BI benötigen wir einen "Connection Pool", der auf das Schema unseres APEX-Workspace zeigt. Weiterhin müssen wir einen "Session-Initialization-Block" erstellen. Ein solcher Block wird nach der Anmeldung bei Oracle BI ausgeführt. In unserem Fall soll dieser Block für den angemeldeten Oracle BI Benutzer über den Connection-Pool eine APEX-Session-Id ermitteln und diese in der Oracle BI Variablen APEX_SESSION_ID speichern.

Dazu öffnen wir im Administration-Tool das Repository:

Schritt 4.1: Administrator-Kennwort setzen

Wenn Sie eine neues Repository erstellt haben, müssen Sie ein Kennwort für den Benutzer "Administrator" vergeben:

Administrator-Kennwort setzen

Abbildung 4: Administrator-Kennwort setzen

Schritt 4.2: Connection-Pool erstellen

Klicken Sie mit der rechten Maustaste in den Layer "Physical" und wählen Sie aus dem Kontext-Menü den Eintrag "New Database..."

Neue Datenbank-Verbindung erstellen

Abbildung 5: Neue "Datenbank-Verbindung" im Layer "Physical" erstellen

Geben Sie im Dialog "Database" einen Namen ein, z.B. apex und wählen Sie im Abschitt "Data source definition" in der Auswahlliste "Database" die entsprechende Datenbank aus (hier: Oracle 10g R2/11g).

Verbindungsname eingeben und Art der Datenbank wählen

Abbildung 6: Verbindungsname eingeben und Art der Datenbank wählen

Klicken Sie nun auf die Registerkarte "Connection Pools" und klicken Sie dort auf die Schaltfläche "Add...".

Füllen Sie im Dialog "Connection Pool" folgende Felder aus:

Name:z.B. apex_pool
Data source name:Geben Sie hier den TNS-Namen der (APEX-)Datenbank ein, z.B. xe
User name:Geben Sie hier das Schema des APEX-Workspace ein (das Schema, in dem Sie in Schritt 1 das Skript APEX-BIEE-INTEGRATION.SQL ausgeführt haben)
Password:Geben Sie hier das Kennwort ein.

Klicken Sie nun auf die Schaltfläche "OK", um den Dialog "Connection Pool" zu verlassen. Bestätigen Sie im Dialog "Confirm Password" nochmals das Kennwort.

Dialog Connection Pool

Abbildung 7: Dialog "Connection Pool"

Klicken Sie auf die Schaltfläche "OK", um den Dialog "Database" zu beenden.

Dialog Database beenden

Abbildung 7a: Dialog "Database" beenden

Schritt 4.3 (nur bei neuem Repository): Neues Business Modell erstellen

Diesen Schritt müssen Sie nur ausführen, wenn Sie ein neues Repository erstellt haben (s. Schritt 3). Zur Erläuterung: Beim Start des BI Server wird geprüft, ob es mindestens einen Themenbereich (Subject Area) gibt. Ist dies nicht der Fall, bricht der Startvorgang des BI Server ab.

Klicken Sie mit der rechten Maustaste in den Layer "Business Model and Mapping" und wählen Sie aus dem Kontext-Menü den Eintrag "New Business Model...".

Neues Business Model erstellen

Abbildung 8: Neues Business-Model erstellen

Geben Sie einen Namen für das Business Model ein, z.B. APEX und klicken Sie anschließend auf die Schaltfläche "OK".

Dialog Business Model

Abbildung 9: Dialog "Business Model"

Schritt 4.4 (nur bei neuem Repository): Neues Presentation Model erstellen

Diesen Schritt müssen Sie nur ausführen, wenn Sie ein neues Repository erstellt haben (Erläuterung, siehe Schritt 4.3).

Ziehen Sie das neue Business Model (hier: "APEX") mit der Maus in den Layer "Presentation".

Neues Presentation Model

Abbildung 10: Neues Presentation Model

Schritt 4.5: Session Initialization Block erstellen

Für die Integration von APEX in Oracle BI müssen wir im Oracle BI Repository einen Session Initialization Block erstellen. Ein Initialization Block wird nach der Anmeldung bei Oracle BI ausgeführt. In unserem Fall soll dieser Block für den angemeldeten Oracle BI Benutzer über den eingerichteten Connection-Pool eine APEX-Session-Id ermitteln und diese in der Oracle BI Variablen APEX_SESSION_ID speichern.

Rufen Sie zunächst den "Variable Manager" auf: Oracle BI Administation Tool - Menü Manage - Variables...

Variable Manager aufrufen

Abbildung 11: "Variable Manager" aufrufen

Wählen Sie im "Variable Manager" die Erstellung eines neuen Session Initialization Blocks:
Menü "Action" - New - Session - Initialization Block...

Neuen Session Initialization Block erstellen

Abbildung 12: Neuen "Session Initialization Block" erstellen

Geben Sie im Dialog "Session Variable Initialization Block" einen Namen für den Block ein, z.B. GetApexSession.

Namen für Session Initialization Block eingeben

Abbildung 13: Namen für den "Session Initialization Block" eingeben

Klicken Sie nun auf die Schaltfläche "Edit Data Source...".

Wählen Sie im Dialog "Session Variable Initialization Block Data Source - GetApexSession in der Auswahlliste "Data Source Type" den Eintrag "Database".

Dialog Session Variable Initialization Block Data Source

Abbildung 14: Dialog "Session Variable Initialization Block Data Source"

Klicken Sie dann auf die Schaltfläche "Browse..." rechts neben dem Feld "Connection Pool" (not assigned) und wählen Sie im Dialog "Select Connection Pool" den in Schritt 4.2 erstellten Connection-Pool.

Dialog Select Connection Pool

Abbildung 15: Dialog "Select Connection Pool"

Geben Sie im Dialog "Session Variable Initialization Block Data Source - GetApexSession" im Feld "Default Initialization String" folgende SQL-Anweisung ein:

select apex_biee_int.get_apex_session_id(':USER',1) from dual

Klicken Sie anschließend auf die Schaltfläche "OK".

Default Initialization String eingeben

Abbildung 16: Default Initialization String eingeben

Klicken Sie nun im Dialog "Session Variable Initialization Block - GetApexSession" auf die Schaltfläche "Edit Data Target...".

Dialog Edit Data Target aufrufen

Abbildung 17: Dialog "Edit Data Target" aufrufen

Klicken Sie im Dialog "Session Variable Initialization Block Variable Target" auf die Schaltfläche "New...".

Geben Sie im Dialog "Session Variable" den Namen APEX_SESSION_ID und als Default Initializer den Wert '-1' (inkl. der Anführungsstriche!) ein.
Klicken Sie anschließend auf die Schaltfläche "OK".

Dialog Session Variable

Abbildung 18: Dialog "Session Variable"

Nun haben wir alle erforderlichen Angaben für den Session Initialization Block erfasst. Wir können jetzt den Session Initialization Block testen. Klicken Sie dazu auf die Schaltfläche "Test...".

Test Session Initialization Block aufrufen

Abbildung 19: Test "Session Initialization Block" aufrufen

Geben Sie im Dialog "Set value for the variables" im Feld "Value" einen beliebigen Benutzernamen ein und klicken anschließend auf die Schaltfläche "OK".

Benutzernamen für Test eingeben

Abbildung 20: Benutzernamen für Test eingeben

Im Dialog "Results" sollte im Feld "Value" ein Wert für APEX_SESSION_ID angezeigt werden (z.B. 5131175308264012774) oder -1, wenn etwas schief gegangen ist.

Testergebnis

Abbildung 21: Testergebnis

Klicken Sie auf die Schaltfläche "Close", um den Dialog "Results" zu schliessen.

Klicken Sie abschließend auf die Schaltfläche "OK", um den Dialog "Session Variable Initialization Block" zu schliessen.

Und schliessen Sie auch den Dialog "Variable Manager: Menü "Action" - "Close".

Schritt 4.6: Oracle BI Repository speichern

Jetzt müssen wir nur noch das Repository speichern und dabei die Konsistenz des Repositories prüfen lassen.

Wählen Sie im Menü "File" den Eintrag "Save".

Repository speichern

Abbildung 22: Repository speichern

Klicken Sie im Dialog "Do you wish to check global consistency?" auf "Yes".

Konsistenz prüfen

Abbildung 23: Konsistenzprüfung

Der "Consistency Check Manager" sollte keine Fehler oder Warnungen anzeigen.

Consistency Check Manager

Abbildung 24: Consistency Check Manager

Klicken Sie auf die Schaltfläche "Close", um den Consistency Check Manager zu schliessen und schliessen Sie anschließend das Oracle BI Administration Tool.

Schritt 5: Anpassungen im Dashboard durchführen

Als letzten Schritt wollen wir nun auf einer Oracle BI Dashboard-Seite einen Link einbauen, der eine Seite der APEX-Anwendung in einem Popup-Window aufruft.
Zunächst aber müssen wir den OC4J von Oracle BI und die Services von Oracle BI starten. Danach können wir den Persentation Service im Browser aufrufen.

Schritt 5.1: OC4J und Oracle BI Services starten


Anmeldung bei Oracle BI

Abbildung 25: Anmeldung bei Oracle BI

Schritt 5.2: APEX-Link auf Dashboard-Seite einbauen

Wenn Sie mit einem leeren Web-Katalog ins Rennen gegangen sind, sehen Sie nach der Anmeldung eine leere Dashboard-Seite.

Leere Dashboad-Seite

Abbildung 26: Leere Dashboad-Seite

Klicken Sie auf den Link "here", um neuen Inhalt (Content) zu erstellen.

Inhalt auf Dashboad-Seite erstellen

Abbildung 27: Inhalt auf Dashboad-Seite erstellen

Klicken Sie links das Dashboard-Objekt "Text" an und ziehen es in den grauen Bereich. Es wird ein Abschnitt erstellt (Section 1) und in der Section erscheint das Text-Objekt (Text 1).

Neues Dashboard-Objekt Text auf Dashboad-Seite erstellen

Abbildung 28: Neues Dashboard-Objekt Text auf Dashboad-Seite erstellen

Klicken Sie nun auf die Schaltfläche "Properties" von "Text 1".

Setzen Sie im Dialog "Properties" ein Häkchen bei "Contains HTML Markup" und geben folgenden Text ein:

<a href="#" onclick="javascript:window.open('http://HOST:7777/pls/apex/f?p=APEX_ID:2:@{biServer.variables['NQ_SESSION.APEX_SESSION_ID']}', '_blank', 'scrollbars=1, width=820, height=450');" >Hier geht es zu APEX</a>

Hinweis: Passen Sie HOST und APEX_ID entsprechend an.

APEX-Link eingeben

Abbildung 29: APEX-Link eingeben

Klicken Sie auf die Schaltfläche "OK", um die Eigenschaften (Properties) zu übernehmen.

Klicken Sie oben rechts auf die Schaltfläche "Save", um die Dashboard-Seite zu speichern.

Fertig!

Melden Sie sich nun einmal ab und wieder an. Klicken Sie dann auf der Dashboard-Seite auf den Link "Hier geht es zu APEX".

Dashboad-Seite mit APEX-Link gespeichert

Abbildung 30: Dashboad-Seite mit APEX-Link gespeichert

Ausblick

Mit diesem ersten "Oracle BI"-Tipp haben wir die Voraussetzungen geschaffen, Seiten einer APEX-Anwendung in Oracle BI zu integrieren.

In den nächsten Community-Tipps beschäftigen wir uns u.a. mit folgenden "Einbindungsmöglichkeiten":

Zurück zur Community-Seite ...