APEX in Oracle Business Intelligence (Oracle BI) integrieren
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.
BEGIN
owa_util.mime_header('text/html', FALSE);
owa_cookie.send(
name => 'LOGIN_USERNAME_COOKIE',
value => NULL,
expires => SYSDATE - 365
);
apex_custom_auth.logout(
p_this_app => v('APP_ID'),
p_next_app_page_sess => v('APP_ID') || ':1'
);
-- tell APEX engine to quit
wwv_flow.g_unrecoverable_error := true;
END;
SELECT 1 FROM apex_biee_session
WHERE UPPER(username) = v('APP_USER') AND
session_id = v('SESSION')
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.
javascript:window.close();
SELECT 1 FROM apex_biee_session
WHERE UPPER(username) = v('APP_USER') AND
session_id = v('SESSION')
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
Abbildung 1: Neues Repository erstellen
[ REPOSITORY ] Star = apex_integration.rpd, DEFAULT; #Star = apex.rpd, DEFAULT; #Star = paint.rpd, DEFAULT; #Star = NBANK.rpd, DEFAULT;
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
<CatalogPath>D:/Tools/BIEE/OracleBIData/web/catalog/apex_integration</CatalogPath>
Beim nächsten Start des Presentation Server wird dann ein Ordner "apex_integration" mit entsprechenden Untverzeichnissen angelegt.
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:
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..."
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).
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.
Abbildung 7: Dialog "Connection Pool"
Klicken Sie auf die Schaltfläche "OK", um den Dialog "Database" zu 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...".
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".
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".
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...
Abbildung 11: "Variable Manager" aufrufen
Wählen Sie im "Variable Manager" die Erstellung eines neuen Session Initialization
Blocks:
Menü "Action" - New - Session -
Initialization Block...
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.
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".
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.
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".
Abbildung 16: Default Initialization String eingeben
Klicken Sie nun im Dialog "Session Variable Initialization Block - GetApexSession" auf die Schaltfläche "Edit Data Target...".
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".
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...".
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".
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.
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".
Abbildung 22: Repository speichern
Klicken Sie im Dialog "Do you wish to check global consistency?" auf "Yes".
Abbildung 23: Konsistenzprüfung
Der "Consistency Check Manager" sollte keine Fehler oder Warnungen anzeigen.
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
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.
Abbildung 26: Leere Dashboad-Seite
Klicken Sie auf den Link "here", um neuen Inhalt (Content) zu 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).
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.
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".
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":