Application Express –

Werbung
Application Express –
Mehrsprachigkeit & Mandantenfähigkeit
© Copyright 2014. Apps Associates LLC.
1
Agenda
• Einleitung
• Mehrsprachigkeit
– Übersetzung mit Hilfe von XLIFF-files
– Übersetzung mit Hilfe einer Übersetzungstabelle
• Mandantenfähigkeit
– Virtual Private Database
– Do It Yourself
• Fazit
© Copyright 2014. Apps Associates GmbH.
2
Einleitung
• Wachsende Anforderungen an Web-Applikationen
• Mehrsprachigkeit
• Mandantenfähigkeit
• Viele Wege führen nach Rom
• Verschiedene Beispiele aufzeigen
• Vor- und Nachteile
© Copyright 2014. Apps Associates LLC.
3
Mehrsprachigkeit
Beispiel: Eine Applikation, die ein Formular enthält, die auf der Tabelle EMP basieren, soll
auf Englisch und Deutsch zur Verfügung stehen.
• Applikation, wie gewöhnt erstellen
„Application Primary Language“ hier English (en)
• Applikationssprache vom Wert eines Items abhängig machen
© Copyright 2014. Apps Associates LLC.
4
Mehrsprachigkeit
• Erstellen eines speziellen Application Item zum Ändern der Sprache
 Wichtig: - Name des Items: FSP_LANGUAGE_PREFERENCE
- Session State Protection: Unrestricted
• Problem: Änderungen des Werts des Items FSP_LANGUAGE_PREFERENCE sind erst
sichtbar, wenn die Seite neu geladen wurde  Application Process
- Point: On Load: Before Header (page template header)
- Process Text
begin
owa_util.redirect_url('f?p='||:APP_ID||':'||:APP_PAGE_ID||':'|
|:APP_SESSION);
end;
- Condition Type: Request = Expression 1
Expression 1 = LANG
© Copyright 2014. Apps Associates LLC.
5
Mehrsprachigkeit
• Sprachwechsel für den User in der Navigation Bar ermöglichen
 ist für jeden User auf jeder Seite ständig sichtbar
• Unter „Shared Components“  „Navigation Bar Entries“ neuen Eintrag mit folgenden
Einstellungen erstellen:
- Option: From Scratch
- Type: Navigation to URL
- Label: English
- Target is a: Page in this application
- Page: &APP_PAGE_ID.
- Request: LANG
- Set these Items: FSP_LANGUAGE_PREFERENCE
- With these values: en
• Weiteren Eintrag für Deutsch
© Copyright 2014. Apps Associates LLC.
6
Mehrsprachigkeit
Zwei Wege die Applikation zu übersetzen
• mit Hilfe einer XLIFF Datei
• mit Hilfe einer Übersetzungstabelle
© Copyright 2014. Apps Associates LLC.
7
Mehrsprachigkeit mit Hilfe einer XLIFF Datei
• XLIFF steht für XML Localization Interchange File Format
• zur Darstellung hierarchisch strukturierter Inhalts-Daten
• speziell für den verlustarmen Austausch von Übersetzungsdaten und den
dazugehörigen Kontextinformationen
© Copyright 2014. Apps Associates LLC.
8
Mehrsprachigkeit mit Hilfe einer XLIFF Datei
• unter „Shared Components“  „Globalization“  „Translat Application“  „Map your
primary language application to a translated application“ kann eine neue Applikation
in einer anderen Sprache erstellt werden.
- dazu eine freie Application ID und die gewünschte Sprache angeben
• für jeden zu übersetzenden Text der Applikation müssen Einträge im APEX Repository
erstellet werden
- unter „Seed translatable test to translation repository“
• unter „Download XLIFF translation files from translation repository“ wird die XLIFF
Datei runtergeladen
- der gesamten Applikation
- einzelner Seiten
© Copyright 2014. Apps Associates LLC.
9
Mehrsprachigkeit mit Hilfe einer XLIFF Datei
• diese XLIFF Datei übersetzen
- Übersetzung zwischen <target>
• unter „Upload and apply XLIFF translation files to translation repository“ wird die
geänderte XLIFF Datei hochgeladen
• unter „Publish translated applications“ wird die Übersetzung veröffentlicht
© Copyright 2014. Apps Associates LLC.
10
Mehrsprachigkeit mit Hilfe einer XLIFF Datei
• diese XLIFF Datei
© Copyright 2014. Apps Associates LLC.
11
Mehrsprachigkeit mit Hilfe einer Übersetzungstabelle
• erstellen einer Übersetzungstabelle (T_UEBERSETZUNG)
- ID_Uebersetzung
- Bezeichnung
- EN (Englisch)
- DE (Deutsch)
• Daten, für jeden zu übersetzenden Text der Applikation, in die Tabelle schreiben
© Copyright 2014. Apps Associates LLC.
12
Mehrsprachigkeit mit Hilfe einer Übersetzungstabelle
• auf jeder Seite der Applkation eine neue Region erstellen
• für jeden zu übersetzenden Text der Applikation ein Hidden Item in der neuen Region
erstellen
• erstellen eines Prozesses mit folgenden Einstellungen:
- Process Point: On Load - Before Header
- Condition Type: none
• der Prozess schreibt abhängig vom Wert des Items FSP_LANGUAGE_PREFERENCE die
deutschen oder die englischen Texte in die Hidden Items
• alle Namen der Items, Buttons, Regionen usw. sind vom Wert der jeweiligen Hidden
Items abhängig
zum Beispiel:
das Item P2_SAL hat die Label-Einstellung: „&P2_HIDDEN_SAL.“ weil das Item
P2_HIDDEN_SAL je nach ausgewählter Sprache den Wert „Sal“ oder „Gehalt“ hat
© Copyright 2014. Apps Associates LLC.
13
Mehrsprachigkeit mit Hilfe einer Übersetzungstabelle
• diese XLIFF Datei
© Copyright 2014. Apps Associates LLC.
14
Mehrsprachigkeit
Mehrsprachigkeit mit Hilfe einer XLIFF Datei
• APEX Standard Mittel
• geringer Aufwand
• Anpassungen im JavaScript aufwendiger
• vorteilhaft wenn eine Applikation in einer Sprache übersetzt werden soll
Mehrsprachigkeit mit Hilfe einer Übersetzungstabelle
• relativ hoher Aufwand
• vorteilhaft bei Anwendungen, die in mehrere Sprachen übersetzt werden sollen oder
bei denen sich Übersetzungen oft ändern
 User können die Übersetzungstabelle selber pflegen
© Copyright 2014. Apps Associates LLC.
15
Mandantenfähigkeit
• Virtual Private Database
• Do It Yourself
© Copyright 2014. Apps Associates LLC.
16
Virtual Private Database
Virtual Private Database (VPD) = Fine Grained Access Control (FGAC)
• seit der Version Oracle8i
• Feature der Enterprise Edition
• unabhängig wie auf geschützte Tabellen zugegriffen wird (Anwendung, WebInterface oder SQL * Plus)
• kontrolliert den Zugriff auf einzelne Zeilen oder Spalten auf Ebene der
Tabelle
© Copyright 2014. Apps Associates LLC.
17
Virtual Private Database
Beispiel: Ein Kunde kann nur seine Bestellungen in der Tabelle Bestellungen
sehen, wenn er in der Tabelle Kunden eingetragen wurde.
Tabelle Kunden
customer_id
cust_first_name
cust_last_name
1
John
Dulles
2
William
Hartsfield
order_date
order_total
customer_id
23.02.2014
1890
1
09.03.2014
2385
2
05.07.2014
2317
1
Tabelle Bestellungen
© Copyright 2014. Apps Associates LLC.
18
Virtual Private Database
Mit „Column Relevance“ kann definiert werden, dass VPD nur angewendet wird,
wenn eine kritische Spalte abgerufen wird.
Beispiel: Der Kundenbetreuer mit dem account_mgr_id "149" kann alle Zeilen aus der
Tabelle Kunden sehen, aber nicht die Kreditlimits. Sobald die Spalte „credit_limit“
abgefragt wird, kann er nur seine eigenen Kunden sehen.
cust_first_name
cust_last_name
account_mgr_id
John
Dulles
149
William
Hartsfield
125
Edward
Logan
149
Albert
Lambert
134
cust_first_name
cust_last_name
credit_limit
account_mgr_id
John
Dulles
1200
149
Edward
Logan
2500
149
© Copyright 2014. Apps Associates LLC.
19
Virtual Private Database
Mit „Column Hiding“ können öffentliche Informationen der Tabelle angezeigt
werden. Vertrauliche Informationen werden verborgen.
Beispiel: Der Kundenbetreuer mit dem account_mgr_id "149" kann alle Zeilen aus der
Tabelle Kunden sehen, aber die Spalte credit_limit ist leer. Außer bei seinen eigenen
Kunden.
cust_first_name
cust_last_name
credit_limit
account_mgr_id
John
Dulles
1200
149
Edward
Logan
2500
149
William
Hartsfield
125
Albert
Lambert
134
© Copyright 2014. Apps Associates LLC.
20
Virtual Private Database
Einrichtung von VPD in APEX-Anwendungen
Beispiel: Die Tabelle EMP soll geschützt werden. Zur Umsetzung einer mandantenfähigen
Anwendung werden zunächst die Zugriffsregeln definiert.
•
KING darf alle Informationen sehen
•
JONES darf alle Informationen zur Abteilung 10 (ACCOUNTING) sehen
•
SCOTT darf nur seinen eigenen Datensatz sehen
Diese Privilegien werden in einer neuen Tabelle MY_USERS hinterlegt.
create table my_users(
userid varchar2(50),
class varchar2(50),
depts varchar2(50)
);
insert into my_users values (‚JONES','DEPTADM','10');
insert into my_users values ('KING','ADMIN','');
© Copyright 2014. Apps Associates LLC.
21
Virtual Private Database
Einrichtung eines Session Context, welcher beim Aufbau der Datenbanksitzung
initialisiert werden muss. Im Session Context wird der Name des eingeloggten Nutzers,
die Privilegien und die Abteilungen, für die die Privilegien gelten für die Dauer der
Datenbanksitzung gespeichert.
Mit folgendem Code wird der Session Context my_context erzeugt. Dieser darf nur durch
das PL/SQL-Paket my_login_package geändert werden.
create or replace context my_context
using my_login_package;
Hinweis
• Restriktive Ausführungsrechte an diesem Package  keine Manipulation möglich,
kein Aushebeln der VPD-Policies
• Privileg CREATE ANY CONTEXT
© Copyright 2014. Apps Associates LLC.
22
Virtual Private Database
Ecreate
or replace package my_login_package
is
procedure set_context(p_userid in varchar2);
end my_login_package;
/
create or replace package body my_login_package
is
procedure set_context(p_userid in varchar2) is
v_class my_users.CLASS%TYPE := 'USER';
v_deptno my_users.DEPTS%TYPE := '';
begin
for cl in (select class,depts from my_users where userid = p_userid) loop
v_class := cl.class; v_deptno := cl.depts;
end loop;
dbms_session.set_context('my_context','class', v_class);
dbms_session.set_context('my_context','deptno', v_deptno);
dbms_session.set_context('my_context','userid', p_userid);
end set_context;
end my_login_package;
/
© Copyright 2014. Apps Associates LLC.
23
Virtual Private Database
• anlegen der eigentliche Policy-Funktion
• liest den Session Context mit der SQL-Funktion SYS_CONTEXT aus
• erstellt eine SQL WHERE-Bedingung, die später von der Datenbank automatisch an
jede SQL-Abfrage auf die Tabelle EMP angehängt wird.
create or replace function my_policy( p_schema varchar2, p_object varchar2 )
return varchar2
is
v_sql varchar2(32767);
begin
if sys_context('my_context','class') = 'ADMIN' then
null;
elsif sys_context('my_context','class') = 'DEPTADM' then
v_sql := ' DEPTNO in ( '||sys_context('my_context','deptno')||')';
else
v_sql := ' ENAME = '''||sys_context('my_context','userid')||'''';
end if;
return v_sql;
end;
© Copyright 2014. Apps Associates LLC.
24
Virtual Private Database
• vor jedem SQL-Kommando wird die Policy-Funktion aufgerufen und die zusätzliche
WHERE-Klausel zurückgegeben
• die SQL-Abfrage wird mit den zusätzlichen Einschränkungen ausgeführt
• dafür muss die Policy-Funktion zum Abschluss mit dem PL/SQL-Paket DBMS_RLS
registriert werden
begin
DBMS_RLS.ADD_POLICY(
object_schema => '[myschema]',
object_name => 'EMP',
policy_name => 'MY_EMP_POLICY',
function_schema => '[myschema]',
policy_function => 'MY_POLICY');
end;
© Copyright 2014. Apps Associates LLC.
25
Virtual Private Database
VPD-Policy mit einer APEX-Anwendung nutzen
• völlig unabhängig vom verwendeten Authentifizierungsschema
• Wichtig: die Tabelle my_users muss die richtigen Usernamen enthalten
Im Beispiel werden Nutzerkonten im APEX-Workspace verwendet. Das heißt es wurden
im Administrationsbereich unter „Manage Users and Groups“ Nutzerkonten für die User
KING, JONES und SCOTT erstellt.
© Copyright 2014. Apps Associates LLC.
26
Virtual Private Database
• erstellen einer neuen Applikation mit einem Bericht auf die Tabelle EMP
• es werden keine Daten angezeigt, auch wenn man sich als KING (Admin) einloggt
 der Session Context wird beim Anmelden an der Anwendung noch nicht initialisiert
Dazu unter „Shared Components“ auf der rechten Seite auf „Edit Definition“ klicken
und in der Reiterkarte „Security“ unter „Daterbase Session“ folgenden Code eingeben.
begin
my_login_package.set_context
(:APP_USER);
end;
© Copyright 2014. Apps Associates LLC.
27
Virtual Private Database
Ansicht: KING (Admin)
© Copyright 2014. Apps Associates LLC.
28
Virtual Private Database
Ansicht: JONES (Deptadm)
Ansicht: SCOTT
© Copyright 2014. Apps Associates LLC.
29
Virtual Private Database
Vorteile
• keine redundante Programmierarbeit
• auch bei komplexen Berechtigungssystem sehr übersichtlich
• Zugriffsrechte sind völlig unabhängig von APEX  gilt für jede andere
Anwendung
Nachteil
• nur für die Enterprise Edition
© Copyright 2014. Apps Associates LLC.
30
Do It Yourself
Mandantenfähigkeit Do It Yourself
• für Standard Edition oder OracleXE
Beispiel: Die Tabelle EMP soll geschützt werden. Zur Umsetzung einer mandantenfähigen
Anwendung werden zunächst die Zugriffsregeln definiert.
•
KING darf alle Informationen sehen
•
JONES darf alle Informationen zur Abteilung 10 (ACCOUNTING) sehen
•
SCOTT darf nur seinen eigenen Datensatz sehen
Diese Privilegien werden in einer neuen Tabelle MY_USERS hinterlegt.
© Copyright 2014. Apps Associates LLC.
31
Mandantenfähigkeit Do It Yourself
•
WHERE-Bedingung im Bericht selber bauen
select empno,
ename,
job,
mgr,
hiredate,
sal,
comm,
deptno
from emp
where case
when (select class from my_users where userid = :APP_USER) = ‘ADMIN‘
then 1
when (select class from my_users where userid = :APP_USER) = ‘DEPTADM‘
and deptno = (select depts from my_users where userid = ‘DEPTADM‘)
then 1
when :APP_USER not in (select userid from my useres)
and ename = :APP_USER
then 1
end = 1
© Copyright 2014. Apps Associates LLC.
32
Virtual Private Database
Vorteile
• unabhängig von der DB-Version
Nachteil
• redundante Programmierarbeit
• wird schnell unübersichtlich
• Rechtesystem beschränkt sich nur auf die konkrete Anwendung
© Copyright 2014. Apps Associates LLC.
33
Fazit
• APEX bietet einige Unterstützung im Bereich Mehrsprachigkeit und
Mandantenfähigkeit
• Viele Weg führen zum Ziel, man muss den richtigen für seine Anforderungen finden
© Copyright 2014. Apps Associates LLC.
34
Vielen Dank!
Herunterladen