Kobra, übernehmen Sie! - Endbenutzer an den Schalthebeln von Apex
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Kobra, übernehmen Sie! Endbenutzer an den Schalthebeln von Apex Ingrid Hayek Universität Innsbruck Innsbruck, Österreich Schlüsselworte Apex-Applikationen modifizieren, Labels, Hilfetexte ändern, Conditional Display, dynamische Defaulttexte für Endbenutzer Einleitung „Guten Morgen, Mister/Mrs EndbenutzerIn... Sollten Sie oder jemand aus Ihrem Betrieb an der Applikation kleine Änderungen vornehmen wollen, wird der Applikationsentwickler jegliche Kenntnis dieser Operation abstreiten. Die Applikation wird sich dabei aber keineswegs selbst vernichten. Viel Glück, Mister/Mrs EndbenutzerIn. Kobra, übernehmen Sie!“ (Mission Impossible - adaptierte Version von IH, 2013) Die Datenbank ist erstellt, die maßgeschneiderte Applikation steht, der Kunde ist zufrieden. So weit so gut. Aber Zeiten ändern sich, Ansprechpersonen wechseln, neue Bedürfnisse entstehen, Anforderungen werden angepasst. Der Kunde kann die Inhalte der Datenbank dynamisch und individuell verändern und ergänzen - wie aber steht es um das relativ starre "Gerüst" einer Apex Applikation? Der Applikationsentwickler muss sich Jahre nach Fertigstellung bei auftauchenden Änderungswünschen wieder einarbeiten und empfindet diese Arbeit oft als lästig. Der Kunde muss als Bittsteller auftreten, beziehungsweise für Änderungswünsche bezahlen, die er als "Kleinigkeiten" empfindet. Was spricht dagegen, dem Kunden mehr Macht über die für ihn entwickelte Applikation zu geben, wenn man verhindern kann, dass er dabei Schaden anrichtet? Der Vortrag zeigt Tipps und Tricks, wie man den Kunden Möglichkeiten bieten kann, Apex Webformulare selbst individuell anzupassen: • Item Labels selbst adaptieren. • Nach Lust und Laune Default-Texte festlegen. • Persönliche Hilfetexte erstellen. • Bestimmte Items je nach Wunsch oder Berechtigung des eingeloggten Benutzers ein- oder ausblenden... • ... und als Entwickler gleichzeitig lästige Nachbesserungsarbeiten los zu sein! Kein Problem, wenn man nur weiß, wie. Application Express Architektur Apex ist ein "Application Framework", das heißt ein Programm zur Applikationswentwicklung, das selbst mit Apex erstellt wurde. Ein wichtiges Merkmal von APEX ist dabei, dass kein ausführbarer Code erzeugt wird, sondern die Anfragen im Browser direkt in PL/SQL-Aufrufe umgesetzt werden. Dabei werden die Webapplikationen, die in Datenbanktabellen gespeichert sind, in Echtzeit aus Metadaten "gerendert".
In diesem Metadaten Repository werden sämtliche Definitionen von Applikationen gespeichert. Das Repository "lebt" komplett innerhalb unserer Oracle-Datenbank und besteht lediglich aus einer Unmenge von Daten, die in Tabellen gespeichert sind, sowie einem riesigen PL/SQL Code. Hinter Apex verbergen sich zirka 425 Tabellen und 230 Packages mit insgesamt mehr als 425000 Zeilen PL/SQL-Code. Was bedeutet das für den Entwickler? Zunächst einmal: oh, kompliziert! (siehe oben). Dann aber: Wenn Apex die Daten selbst in der Datenbank speichert, muss es eine Möglichkeit geben, darauf zuzugreifen. Nun gibt Oracle die Tabellen, in denen die Daten der Apex- Entwicklungsumgebung gespeichert werden, natürlich nicht frei - zu groß wäre die Gefahr, dass bei Änderungen das System bricht. Sehr wohl aber haben Entwickler Lese-Zugriff auf die Daten, und zwar in Form von Views. Von diesen Views nun können wir uns genau diejenigen näher ansehen, die wir für die Adaptierungen unserer Applikation brauchen. Dynamische Labels Betrachten wir zunächst einmal den View1 apex_application_page_items: Hier finden wir sämtliche Applikationen mit allen Definitionen zu den Items: SELECT * FROM apex_application_page_items So finden wir sämtliche Definitionen zu den Items einer bestimmten Applikation: SELECT * FROM apex_application_page_items WHERE application_name = 'KOBRA' 1 Es ist gängig, den englischen Begriff View für eine Darstellungskomponente zu verwenden. Allerdings ist es nicht völlig klar, ob der Artikel nun als "der View" oder "die View" zu wählen ist. Ich verwende die Version "der View" (http://www.duden.de/suchen/dudenonline/View)
Und jetzt die relevanten Definitionen zu den Items, die wir für dynamische Formulare brauchen: SELECT application_name, page_id, item_name, display_as, label, condition_type, condition_expression1, item_default FROM apex_application_page_items WHERE application_name = 'KOBRA' Item Name und zugehöriges Label werden also im Repository gespeichert. Wie kann nun Apex dazu gebracht werden, Labels gemäß unseren Wünschen dynamisch zu produzieren? 1. Applikation erstellen oder vorhandene Applikation auswählen, zum Beispiel 'KOBRA'. 2. alle dynamischen Labels mit "LABEL" beschriften. 3. eventuell schon Hilfetexte eingeben 4. Tabelle mit den essentiellen Informationen aus dem Repository erstellen, die der Endbenutzer editieren kann CREATE TABLE apexadmin AS SELECT application_id, page_id, item_name, label AS label_orig, label, item_default, condition_type, condition_expression1, item_help_text FROM apex_application_page_items WHERE application_name = 'KOBRA' AND label = '"LABEL"' AND display_as != 'Hidden' AND condition_type != 'Never' AND authorization_scheme != 'Developer' 5. Ein Shortcut, um Apex mitzuteilen, wo es die Information für die Labels holen soll: RETURN apex.get_label('#CURRENT_ITEM_NAME#'); 6. Function get_label: FUNCTION get_label(p_item_name IN VARCHAR2) RETURN VARCHAR2 IS lv_text VARCHAR2(100); BEGIN SELECT NVL(label, p_item_name) INTO lv_text FROM apexadmin WHERE item_name = p_item_name; RETURN lv_text; END get_label; 7. Daten synchronisieren: bei Änderungen muss der Applikationsentwickler die Daten synchronisieren. Wird zum Beispiel einem Item ein statisches Label gegeben, muss dieses Item aus der Liste, die dem Endbenutzer zur Verfügung steht, verschwinden.
Dynamische Hilfetexte Hilfetexte für die (technische) Bedienung einer Apex-Applikation braucht es nicht: Eine benutzerfreundliche Applikation sollte selbsterklärend sein. Hilfetexte zum Inhalt sollten generell nicht vom Entwickler erstellt werden. Erstens bezieht sich die Hilfe auf den Inhalt der Datenbank, das heißt auf das jeweilige Fachgebiet, und mit dem kennt sich der Endbenutzer mit Sicherheit besser aus als der Entwickler. Zweitens können sich solche Hilfetexte im Lauf der Zeit ändern, erweitert oder auch hinfällig werden. In diesem Fall soll der Endbenutzer einfach die Hilfetexte ändern können. Für die Verwaltung der Hilfetexte verwenden wir dieselbe Tabelle wie für die Labels. Dynamische Default Werte Default Value Type: PL/SQL Function Beispiel: • entsprechende Function aufrufen: kobra_util.get_user_default('P20_TITLE'); Dynamische Bedingungen Condition Type: Exists Expression1 Beispiele: • SELECT 1 FROM apexadmin WHERE item_name = : P1_TITLE AND condition = 'Y' • SELECT 1 FROM apexadmin WHERE item_name = :P1_TITLE AND condition = 'Y' AND :APP_USER = 'ADMINISTRATOR' Dynamische Informationen bearbeiten Welche Möglichkeiten biete ich nun dem Endbenutzer, um die Schalthebel von Apex mitzubedienen? Expertenmodus: Eine Seite mit Tabular Form, in der alle Items - ähnlich wie in Apex selbst - bearbeitet werden können Einfacher Modus: 1. Form mit den Feldern , die der Endbenutzer editieren darf, erstellen 2. Mit einem entsprechenden Plugin erscheint dieses Formular in einem Modal Window: • Plugin (modal_page.zip) herunterladen: • http://skillbuilders.com/oracle-apex/Application-Express-APEX-Consulting- Training.cfm?tab=free-plugin-downloads • modal_page.zip entpacken: dynamic_action_plugin_com_skillbuilders_modal_page.sql, in Apex importieren und Plugin installieren 3. Dynamic Action für editierbares Item konfigurieren: jQuery Selector: .uHelpLinkDyn True Action: Identification: Action aus Select List Effect auswählen: SkillBuilders Modal Page (1.0.0) [Plug-in]
Settings: Url Location: Attribute of Triggering Element Attribute Name: href Auto-close On Element Selector: div#close-modal Dialog Height/Width Mode: Auto 4. Frames für Modal Window erlauben: Application Properties > Security > Browser Security: Enable Frames 5. Label Templates modifizieren: Template Optional with help /Required with help - Definition: Before Label: 6. Conditional Display im Modal Window Endbenutzer mit dem Status "Administrator" können alle editierbaren Informationen sehen und bearbeiten. "Normale User" sehen nur bestimmte Informationen, zum Beispiel den Hilfetext, und können diese Informationen nicht editieren (Read Only Condition) So, und jetzt lehnen wir uns zurück… Client:..And Mr/Mrs Developer, the next time you go on holiday, please be good enough to let us know where you're going. Developer: If I let you know where I'm going, I won't be on holiday. (Mission Impossible - adaptierte Version von IH, 2013) Kontaktadresse: Dr. Ingrid Hayek daten & worte Höhenstraße 110 A-6020 Innsbruck Telefon: +43 (0) 650-2923290 E-Mail work@ingridhayek.at Internet: ingridhayek.at
Sie können auch lesen