prog:oracle_apex
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
prog:oracle_apex [2019/12/23 09:44] – [Timining in der Oberfläche] gpipperr | prog:oracle_apex [2019/12/23 10:18] (aktuell) – [Plugin Entwicklung] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | =====Oracle Apex 5 - Anmerkungen zum Einsatz und zur Entwicklung===== | ||
+ | |||
+ | Zurück zur Übersicht über alle Artikel => [[: | ||
+ | |||
+ | Oracle Apex - Oracle Application Express ermöglicht es, in der Datenbank deklarativ und auf Basis von SQL und PL/SQL komplexe Webanwendungen zu erstellen. => https:// | ||
+ | |||
+ | Der gesamte Apex Code liegt dabei in der Datenbank in einem Meta Repository und ist damit voll in die Oracle Welt integriert. | ||
+ | |||
+ | Oracle Apex ist inzwischen eine sehr komplexes Produkt von Oracle, allein das [[https:// | ||
+ | |||
+ | In dieser Zusammenfassung soll auf die generelle Architektur und wichtige Grundeingenschaften eingegangen werden. | ||
+ | |||
+ | Im Detail liegen im Internet zu den einzelnen Fragestellungen sehr umfangreiche Dokumentationen vor. | ||
+ | |||
+ | |||
+ | Apex 5.1 Orginal Doku => https:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ====Wie anfangen? ==== | ||
+ | |||
+ | Mit Apex 5 hat der Entwickler nun so vielen Möglichkeiten, | ||
+ | |||
+ | Soll der Entwickler möglichst viel in Pl/SQL implementieren oder doch besser in JavaScript die Logik der Applikation verbauen? Ajax und Json einsetzen? Rest Data Servcies integrieren? | ||
+ | |||
+ | Diese Frage ist nicht so einfach zu beantworten, | ||
+ | |||
+ | Ist viel Erfahrung mit JQuery vorhanden, ist schnell etwas schönes in der Oberfläche entwickelt, ist PL/SQL und Forms der Hintergrund des Entwicklers sollte sich die Logik der Applikation auch sehr gut in der Datenbank abbilden lassen. | ||
+ | |||
+ | Allerdings sollte der doch sehr einfache Start mit Apex nicht dazuführen, | ||
+ | |||
+ | Das viel interaktiv mit dem Page Designer zusammen gestellt wird , ist es hilfreich sich für den Einstieg eines der diversen Video Tutorials (siehe Quellen) anzusehen. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Lizenz ==== | ||
+ | |||
+ | Wie bei jeden Oracle Produkt im ersten Schritt die Lizenzfrage abklären! | ||
+ | |||
+ | Die gute Nachricht, Apex kann in jeder Edition von Oracle kostenfrei eingesetzt werden! | ||
+ | |||
+ | Ein wirkliche Perle unter den Oracle Produkten! | ||
+ | |||
+ | Support: https:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Installation ==== | ||
+ | |||
+ | |||
+ | Oracle Apex besteht aus den Datenbank Objekten, Bildern, Stylesheet und Java Script Libraries | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | |||
+ | Oder einfach kostenlos in der Cloud unter https:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Upgrade==== | ||
+ | |||
+ | Welche Version ist gerade im Einsatz? | ||
+ | <code sql> | ||
+ | select version_no | ||
+ | from apex_release | ||
+ | / | ||
+ | select version | ||
+ | from dba_registry | ||
+ | where comp_name = ‘Oracle Application Express’ | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Seit 21.12.2016 ist die Version 5.1 von Apex verfügbar. ( inzwischen 11.2019 sind wir schon auf 19.2 .-) ) | ||
+ | |||
+ | |||
+ | Bzgl. Neuer Feature siehe https:// | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | |||
+ | Was ist neu/ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Betrieb ==== | ||
+ | |||
+ | Oracle Apex kann zwar zur Not auch direkt mit dem integrierten HTTP Listener der Datenbank betrieben werden, besser ist aber der Einsatz der ORDS, des Oracle Rest Data Service. | ||
+ | |||
+ | * [[prog: | ||
+ | * [[prog: | ||
+ | * [[prog: | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | === Microsoft AD Integration === | ||
+ | |||
+ | Apex läßt sich auch sehr gut in die Microsoft Welt integrieren | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | === Mail Versandt === | ||
+ | |||
+ | Um Mails aus der Apex Umgebung zu versenden muss der Mail Server auf Apex Instance Ebene hinterlegt werden. | ||
+ | Damit das dann auch funktioniert sind in der DB die Entsprechenden ACLS notwendig | ||
+ | |||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Architektur von Apex ==== | ||
+ | |||
+ | ==Grundlagen== | ||
+ | |||
+ | * Die Apex-Engine wird in der Datenbank ausgeführt, | ||
+ | * Alle Seiten in Apex sind in einem Meta Modell hinterlegt, d.h. das Erzeugen des HTML Codes erfolgt im Moment des Zugriffes auf die Seite | ||
+ | |||
+ | |||
+ | Siehe zum Beispiel hier => http:// | ||
+ | |||
+ | |||
+ | Da Apex auf einem Meta Modell basiert, kann das auch sehr einfach abgefragt werden. | ||
+ | |||
+ | Z.b. wie viele Seiten hat meine Applikationen: | ||
+ | <code sql> | ||
+ | select application_id | ||
+ | , | ||
+ | , | ||
+ | from APEX_050000.APEX_APPLICATION_PAGES | ||
+ | group by application_id, | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Die PL/SQL Package hinter Apex ==== | ||
+ | |||
+ | |||
+ | ==WWV - Web View == | ||
+ | |||
+ | Das Basis Package ist **WWV_FLOW** | ||
+ | |||
+ | * Alle POST Requests => wwv_flow.accept | ||
+ | * Alle GET Requests => wwv_flow.show | ||
+ | |||
+ | |||
+ | ==Procedure f == | ||
+ | |||
+ | Der Einstieg in einen Apex Seite erfolgt immer über die Procedure **f**, diese löst die Parameter auf und ruf die entsprechende Apex Seite auf. | ||
+ | |||
+ | F ist ein Mapper auf die wwv_flow.show. | ||
+ | |||
+ | So sind folgende Aufrufe ähnlich: | ||
+ | |||
+ | < | ||
+ | |||
+ | http:// | ||
+ | |||
+ | |||
+ | http:// | ||
+ | | ||
+ | & | ||
+ | & | ||
+ | & | ||
+ | & | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==htp und htf == | ||
+ | |||
+ | |||
+ | Der wichtige Kern hinter APEX (ehemals WEBDB) ist das [[https:// | ||
+ | |||
+ | Mit einer Art mod_plsql habe ich damit bereits um 1998 komplette Webanwendungen entwickelt, im Prinzip wie JSP Seiten, es sendet in unendlich schwer wartbaren Code das ein heilloses Durcheinander von Programmlogik und HTML Code entsteht. | ||
+ | |||
+ | Aber für einzelne Ausgaben ist das auch heute noch sehr wertvoll um individuelle Anpassungen an die Apex Vorlagen zu erzielen. | ||
+ | |||
+ | Beispiel: | ||
+ | <code plsql> | ||
+ | create or replace procedure APEX_PUBLIC_USER.webpageGPI | ||
+ | as | ||
+ | begin | ||
+ | htp.htmlopen; | ||
+ | htp.bodyopen; | ||
+ | |||
+ | htp.p (' | ||
+ | |||
+ | htp.bodyclose; | ||
+ | htp.htmlclose; | ||
+ | end; | ||
+ | / | ||
+ | </ | ||
+ | In diesem einfachen Beispiel muss die Prodedure unter dem APEX_PUBLIC_USER liegen. | ||
+ | |||
+ | Um den direkten Zugriff einzuschränken | ||
+ | [[https:// | ||
+ | |||
+ | ==owa_util== | ||
+ | |||
+ | Das [[https:// | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | <code plsql> | ||
+ | -- alle CGI Variablen anzeigen | ||
+ | OWA_UTIL.PRINT_CGI_ENV; | ||
+ | </ | ||
+ | |||
+ | |||
+ | == Apex Util== | ||
+ | |||
+ | siehe https:// | ||
+ | |||
+ | == Aktuellen APEX User erkennen == | ||
+ | |||
+ | <code sql> | ||
+ | select SYS_CONTEXT(' | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Apex Seiten entwickeln | ||
+ | |||
+ | |||
+ | Folgende Grundregeln sollten bei der Entwicklung beachtet werden: | ||
+ | |||
+ | ==Page ID Logik== | ||
+ | Zu Beginn eine Logik für die Vergabe der Page ID's im Team vereinbaren, | ||
+ | |||
+ | ==Pages zu Group zuordnen== | ||
+ | Page Group, sortiert nach der Logik der Applikation, | ||
+ | Die Page Groups orientieren sich dann auch wieder an den ersten zwei Stellen der Page ID | ||
+ | |||
+ | ==Name der Page Items== | ||
+ | Page ID IMMER in die Name der Page Items aufnehmen, damit im Stag der aktuellen Sessoin immer Eindeutigkeit über die gesamte Applikation gewährleistet ist | ||
+ | |||
+ | |||
+ | |||
+ | Der Trick hinter der Apex Entwicklung ist das Einbeziehen der ganze SQL und PL/SQL Technologie der Oracle Datenbank wie [[dba: | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Oracle Text einbinden ==== | ||
+ | |||
+ | Siehe => [[prog: | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Authorisierung in Apex==== | ||
+ | |||
+ | Siehe => [[prog: | ||
+ | |||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | |||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Prod und DEV in Apex unterscheiden ==== | ||
+ | |||
+ | In einer größeren Umgebung wird die Apex Umgebung auf DEV entwickelt und auf PRD betrieben. | ||
+ | |||
+ | Da die Anwendung in beiden Umgebungen gleich aussieht soll ein Banner im Kopfbereich der Seite den Anwender darauf hinweisen wo er sich befindet. | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | ===Umgebung als Setting in der App hinterlegen=== | ||
+ | |||
+ | Vor Version 18 mit APEX_UTIL.SET_PREFERENCE (normalerweise für User Settings gedacht): | ||
+ | <code plsql> | ||
+ | |||
+ | -- persistieren | ||
+ | |||
+ | APEX_UTIL.SET_PREFERENCE( | ||
+ | , p_value | ||
+ | , p_user | ||
+ | | ||
+ | |||
+ | -- Wieder einlesen | ||
+ | : | ||
+ | p_preference => ' | ||
+ | p_user | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Ab Version 18 mit " | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Interactive Grid ==== | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | |||
+ | Sehr hilfreiche Seiten um mit JavaScript den IG anzupassen: | ||
+ | |||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | Siehe auch => https:// | ||
+ | |||
+ | |||
+ | Siehe auch http:// | ||
+ | |||
+ | |||
+ | Z.b. über eine Dynamic Action auf einem Element um einen Schlüssel der aktuellen Zeile herauszubekommen: | ||
+ | <code javascript> | ||
+ | |||
+ | // | ||
+ | //zuvor hier eine static ID hinterlegen! | ||
+ | |||
+ | var igrid = apex.region(" | ||
+ | var view = igrid.interactiveGrid(" | ||
+ | var model = igrid.interactiveGrid(" | ||
+ | |||
+ | |||
+ | // Referenz auf das Datenmodell | ||
+ | |||
+ | // | ||
+ | var view = apex.region(" | ||
+ | |||
+ | // die aktuelle erste ausgewählte Zeile | ||
+ | |||
+ | record1 = view.getSelectedRecords()[0] | ||
+ | |||
+ | // mit dem 12 Element was tun | ||
+ | console.log(record1[12]); | ||
+ | |||
+ | $s(' | ||
+ | |||
+ | // über alle iterieren | ||
+ | |||
+ | var selectedRecords = view.view$.grid(" | ||
+ | |||
+ | for (idx=0; idx < selectedRecords.length; | ||
+ | records = model.getRecord(selectedRecords[idx][0]); | ||
+ | recval= model.getValue(records," | ||
+ | console.log(recval); | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | Nur ein Denkanstoß, | ||
+ | |||
+ | |||
+ | Optionen per Java Script anpassen: | ||
+ | <code javascript> | ||
+ | // alle Optionen auslesen | ||
+ | apex.region(" | ||
+ | |||
+ | //über das JavaScript Code Attibute setzen | ||
+ | |||
+ | function( options ) { | ||
+ | options.toolbar = options.toolbar || {}; | ||
+ | | ||
+ | options.toolbar = false; | ||
+ | return options; | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | ---- | ||
+ | ==== Session State anzeigen lassen ==== | ||
+ | |||
+ | View apex_application_page_items verwenden! | ||
+ | |||
+ | SQL: | ||
+ | <code sql> | ||
+ | select | ||
+ | , page_id | ||
+ | , item_name | ||
+ | , display_as | ||
+ | , component_comment | ||
+ | , apex_util.get_session_state(item_name) session_value | ||
+ | from apex_application_page_items | ||
+ | where application_id = :APP_ID | ||
+ | order by page_id, | ||
+ | </ | ||
+ | |||
+ | |||
+ | Z.B. in einer Modalen Seite und die Page ID übergeben, dann hat man ein Info Fenster pro Seite. | ||
+ | |||
+ | === Wer ist gerade angemeldet === | ||
+ | |||
+ | Um das zum Beispiel in einer Bar Chart anzuzeigen: | ||
+ | <code sql> | ||
+ | select null link | ||
+ | , user_name | ||
+ | , count(*) as count | ||
+ | from APEX_WORKSPACE_SESSIONS | ||
+ | where workspace_name=' | ||
+ | group by null, | ||
+ | </ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Charts in Apex 5 ==== | ||
+ | |||
+ | Siehe diese gute Übersicht über die ganzen Möglichkeiten => https:// | ||
+ | |||
+ | Gant Charts => https:// | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== CSS in APEX 5 ==== | ||
+ | |||
+ | Mit CSS Können gut Eigenschaften auf der Seite angepasst werden. | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | Auf den Page Elementen können Klassen Namen definiert werden, diese können dann mit einen CSS angesprochen werden. | ||
+ | |||
+ | Zum Beispiel sollen über bestimmten Item eine Linie eingefügt werden: | ||
+ | <code css> | ||
+ | div.P900_USER_INFO{ | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | Dazu wird in jedem Item eine CSS Klasse " | ||
+ | |||
+ | Alle Zellen einer Tabelle die Schriftfarbe anpassen: | ||
+ | <code css> | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | HTML Expresion nützen, zum Beispiel um einen Umbruch zu verbieten: | ||
+ | <code css>< | ||
+ | |||
+ | |||
+ | Ein Input Field vor Benutereingaben schütze | ||
+ | Advanced/ | ||
+ | < | ||
+ | readonly=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ThemeRoller einsetzen: | ||
+ | |||
+ | * => https:// | ||
+ | |||
+ | |||
+ | Schönes Beispiel um Elemente in CSS, wie eine Tabellenüberschrift zu drehen => https:// | ||
+ | |||
+ | Einstellungen von einer Applikation mit " | ||
+ | |||
+ | === Link als Button in einem Classic Report darstellen === | ||
+ | |||
+ | * Column als Link definieren, Link Eigenschaften hinterlegen | ||
+ | * Link Text <code html> | ||
+ | <span class=" | ||
+ | <span class=" | ||
+ | <span class=" | ||
+ | * Link Attributes <code html> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== CSV Export ==== | ||
+ | |||
+ | Ausgehend von diesem Artikel http:// | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== JavaScript Integration ==== | ||
+ | |||
+ | |||
+ | Durch die Integration von JQuery kann sehr einfach mit JavaScript in Apex gearbeitet werden. | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | |||
+ | Spinner (Sanduhr anzeigen) über eine Dynamic Action | ||
+ | |||
+ | * Auf globaler Ebene die Variable definieren wie var $oidSpinner=null | ||
+ | * In der ersten Dynamic Action : $oidSpinner = apex.util.showSpinner( $( "# | ||
+ | * In der zweiten Dynamic Action wieder ausschalten | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Meldungstexte von PL/SQL Routinen setzen ==== | ||
+ | |||
+ | Processing\Process Type " | ||
+ | |||
+ | Im PL/SQL Code einfügen: | ||
+ | <code plsql> | ||
+ | ... | ||
+ | | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Erzeugt eine Message Box auf der Seite | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Hilfe Texte einbinden ==== | ||
+ | |||
+ | Tooltip auf einem Page Item Element: | ||
+ | <code javascript> | ||
+ | $('# | ||
+ | </ | ||
+ | Code in der Seite auf Page Ebene „JavaScript/ | ||
+ | |||
+ | Oder als " | ||
+ | <code javascript> | ||
+ | onmouseover=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | Hilfe Texte anzeigen: | ||
+ | |||
+ | * Page für die Hilfe als " | ||
+ | * Hidden Page Item fürdie Übergabe der SeiteNr aus der die Hilfe angewählt wurde, z.B. P900_APP_PAGE_ID | ||
+ | * " | ||
+ | APEX_APPLICATION.HELP ( | ||
+ | p_request | ||
+ | p_flow_id | ||
+ | p_flow_step_id | ||
+ | p_show_item_help => ' | ||
+ | p_show_regions | ||
+ | p_before_page_html | ||
+ | p_after_page_html | ||
+ | p_before_region_html | ||
+ | p_after_region_html | ||
+ | p_before_prompt_html | ||
+ | p_after_prompt_html | ||
+ | p_before_item_html | ||
+ | p_after_item_html | ||
+ | ); | ||
+ | </ | ||
+ | * " | ||
+ | * ÜBer " | ||
+ | * Eintrag " | ||
+ | * Über "Set these items" auf die P900_APP_PAGE_ID verweisen und mit "With these values" | ||
+ | * Über den Help Link wird nun die Hilfeseite aufgerufen und zeigt den in der Seite hinterlegten Text an | ||
+ | |||
+ | |||
+ | Quellen: | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== AJAX ==== | ||
+ | |||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Modale Dialoge ==== | ||
+ | |||
+ | In Apex gibt es zwei Arten von modalen Aufrufen, eine Region der Seite als Modale Unterseite aufrufen oder eine ganze neue Page als Modale Seite auf der aktuellen Seite starten. | ||
+ | |||
+ | |||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | Alternativ, falls mehr Logik notwendig ist eine eigene Seite verwenden: | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | |||
+ | Um Parameter zwischen den Seiten weiterzugeben, | ||
+ | D.h. das Page ITEM wird im von der " | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Gui Elemente ==== | ||
+ | |||
+ | ===Rich Text Editor=== | ||
+ | Neben den normalen Page Item's wie Text input etc. seht auch ein Rich Text Editor zur Verfügung | ||
+ | |||
+ | siehe z.B => http:// | ||
+ | |||
+ | === Checkboxes === | ||
+ | |||
+ | * Check Box Item wie z.B. P43_SHOW_DEBUG anlegen und mit Werten versorgen, z.b. über eine Static list wie <code bash> | ||
+ | * Default für diese Liste mit einer " | ||
+ | * Static Value wie hinterlegen <code bash> | ||
+ | * Damit jezt das nur bei ersten Page Load wirkt und nicht jedesmal die Werte des Anwenders überschrieben werden, eine " | ||
+ | * Die Werte der Checkbox werden als String mit ":" | ||
+ | |||
+ | |||
+ | === Validierung auf Item Ebene === | ||
+ | |||
+ | Creating a Validation for a Page Item | ||
+ | => https:// | ||
+ | |||
+ | Mehr: | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Bildbearbeitung mit APEX ==== | ||
+ | |||
+ | Wie lässt sich am einfachsten mit Oracle APEX ein Bild Archiv mit Bildbearbeitung aufbauen? | ||
+ | |||
+ | Mit Oracle Multimedia 12c (seit 8i / 11g noch unter dem Namen Oracle interMedia vertrieben) steht dem Apex Entwickler ein reichhaltiges Werkzeug für das Metadaten Handling von Bild und Ton Daten in der Oracle Datenbank zur Verfügung. | ||
+ | |||
+ | Mit der Oracle Multimedia 12c lassen sich die Metadaten und Attribute von Multimedia Daten lesen und setzen und viele Eigenschaften von Bild Dateien, wie Größe, Rotation, Schärfe, Kontrast etc., direkt in der Datenbank bearbeiten. Bestimmte Eigenschaften wie die Farbe eines Bildes lassen sich aus den binären Daten des Bildes ermitteln und werden damit auch suchbar. | ||
+ | |||
+ | Mit diesem umfangreichen Set an Hilfsmitteln lassen sich mit PL/SQL auch komplexere Aufgabenstellung in Oracle Apex relativ einfach integrieren. | ||
+ | |||
+ | Siehe [[prog: | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Datei Upload inkl. Datei Verarbeitung ==== | ||
+ | |||
+ | Wie können Dateien wie Excel File oder Zip in Oracle APEX per Weboberfläche geladen und verarbeitet werden. | ||
+ | |||
+ | * [[prog: | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== APEX User Monitoring/ | ||
+ | |||
+ | Über **" | ||
+ | |||
+ | View um die Aktivität der APEX User wie Logins etc. auf einer APEX Seite in der Applikation für das Auditing mit anzeigen: | ||
+ | <code plsql> | ||
+ | create or replace view v_page_75_mon_apex_usage | ||
+ | as | ||
+ | SELECT apex_user | ||
+ | , application_name | ||
+ | , page_id | ||
+ | , page_name | ||
+ | , TO_CHAR (view_date, ' | ||
+ | , log_context | ||
+ | , ip_address | ||
+ | , page_view_type | ||
+ | , error_message | ||
+ | FROM apex_workspace_activity_log | ||
+ | where apex_user != ' | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Apex Debuggen und Tracen ==== | ||
+ | |||
+ | ==Parameter & | ||
+ | |||
+ | Wird in der URL dieser Parameter hinerlegt wird für die Session auf der Datenbank ein Trace angelegt. | ||
+ | |||
+ | |||
+ | == Timining in der Oberfläche== | ||
+ | |||
+ | Mit dem Schlüsselwort "# | ||
+ | |||
+ | |||
+ | |||
+ | Gute Einführung => https:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Plugin Entwicklung ==== | ||
+ | |||
+ | |||
+ | Einführung => https:// | ||
+ | |||
+ | |||
+ | media Plugin: https:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | |||
+ | ===== Reporting / Drucken ===== | ||
+ | |||
+ | Aus HTML Anwendungen ist das Drucken meist eine Herausforderung, | ||
+ | |||
+ | Eine Möglichkeit ist das Erstellen eines Berichts als PDF, das kann dann ausgedruckt werden. | ||
+ | |||
+ | Ein hervorragendes, | ||
+ | |||
+ | Steht dieser nicht zur Verfügung ist eine Alternative auf OpenSource wie Jasper Report auszuweichen => http:// | ||
+ | |||
+ | |||
+ | => Siehe [[prog: | ||
+ | |||
+ | |||
+ | Schade das Oracle hier nicht eine bezahlbare Apex Edition des Oracle BI Publisher anbietet. | ||
+ | |||
+ | ===PDF mit ORDS=== | ||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | Funktioniert mit Classic Reports, sieht aber bei größeren Seite etwas seltsam aus. | ||
+ | |||
+ | Hat nur einmal funktioniert, | ||
+ | |||
+ | Laut diversen Einträgen im Netz soll folgender Eintrag in ORDS in der " | ||
+ | < | ||
+ | <entry key=" | ||
+ | </ | ||
+ | |||
+ | Aber noch keine Besserung | ||
+ | |||
+ | ===Integration Oracle Reports=== | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Apex Source Code Handling ===== | ||
+ | |||
+ | Apex Utility APEXExport.class verwenden um täglich das ganze in ein Git Repository einzuschecken. | ||
+ | |||
+ | siehe => [[prog: | ||
+ | |||
+ | Export: | ||
+ | <code powershell> | ||
+ | |||
+ | # Umgebung setzen | ||
+ | set-item -path env: | ||
+ | |||
+ | # Hilfe bei Bedarf anzeigen lassen | ||
+ | java oracle.apex.APEXExport -h | ||
+ | |||
+ | # ins Git Repository Verzeichnis wechseln | ||
+ | |||
+ | cd c: | ||
+ | |||
+ | # Source Code exportieren | ||
+ | java oracle.apex.APEXExport | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Spilt into Files: | ||
+ | |||
+ | <code powershell> | ||
+ | |||
+ | set-item -path env: | ||
+ | |||
+ | java oracle.apex.APEXExportSplitter | ||
+ | </ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Weitere Themes ==== | ||
+ | |||
+ | |||
+ | |||
+ | Material APEX - responsive theme => https:// | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Rechte / Rollen / Authentifizierung ==== | ||
+ | |||
+ | |||
+ | Wie führt APEX SQL Abfragen aus? | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | RAS | ||
+ | * http:// | ||
+ | |||
+ | VPD | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | Verhalten von DB Links in Oracle Apex für Sicherheitskonzepte nützen | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
prog/oracle_apex.txt · Zuletzt geändert: 2019/12/23 10:18 von gpipperr