Posts

Posts mit dem Label "ApEx" werden angezeigt.

Checkbox / APEX Font in Report / Interactive Grid anzeigen - APEX 22.1

Html-Checkboxen sind in APEX ja eigentlich nur Anzeigeelemente. Da diese per se keine Aktionen ausführen (diese ist separat zu programmieren), bietet es sich an, statt dessen Elemente aus dem APEX Font zu nutzen. Am einfachsten sind sowas wie fa-check-square fa-square-o Diese und viele weitere Elemete können z.B. hier rausgesucht werden: https://apex.oracle.com/pls/apex/apex_pm/r/ut/icons Zum Einbinden in einen Report wird eine zusätzliche Spalte genutzt: select K_PARTITION_KEY ID    , 1 CHK    , ...    , case when K_PARTITION_KEY = :P1_PARTITION_KEY        then 'fa fa-check-square'        else 'fa fa-square-o'      end ICON Spalte CHK zeigt später die Checkboxen, Spalte ICON liefert den Namen des Icons aus dem APEX Font. Im Beispiel soll per Klick auf eine Checkbox die entsprechende Zeile markiert werden. (Alle...

Farbschemata entwickeln / anpassen

Eine tolle Webseite rund um Farbgebung findet sich hier: https://encycolorpedia.de/ Über https://encycolorpedia.de/html kann man direkt benannte html-Farben suchen. Die Liste ist sortierbar nach Farbton, Sättigung und Leichtigkeit. Durch anklicken der Farben bekommt man weitere Vorschläge zu Abstufungen und Komplementärfarben . Am Beispiel " lightyellow " sieht man, wieviel Zusatzinformationen hier geliefert werden.

APEX: Interactive Grid - Spaltengrupppen und einfärben

Zum individuellen Einfärben eines Interactive Grids (IG) bieten sich die Möglichkeiten von CSS an. Zum Färben eines konkreten IG bekommt dieses zur Identifikation eine Static_ID : Advanced / Static ID: Px_IG Sollen alle IGs identisch gefärbt werden, kann dieser Step entfallen. Im CSS sind mehreren Ebenen des IG zu behandeln: Header-Gruppe Header Spalten - allgemein Spalten - readonly Seiten-Ebene Die wesentlichen Definitionen werden auf Seiten-Ebene als Inline-CSS festgelegt: PageX (oberster Knoten) / CSS / Inline /* Spaltengruppen */ #P4_IG .a-GV-headerGroup[data-idx="1"] { background-color: khaki; } /* Edit-Modus: nichtänderbarer Text trotzdem in schwarz (= besser lesber) eigentlich: ALLE Zellen mit Textfarbe schwarz */ #P4_IG .a-GV-cell { color: black; } /* Farbschema-Gruppe 1 - zum Einfärben bestimmter Spalten */ #P4_IG .fs_grp1 { background-color: khaki; } /* Edit-Modus: Hintergrundfarbe für den änderbaren Text */ #P4_IG .fs_grp_edit {...

APEX: DB-Name und Umgebung anzeigen

Bei Mehrsystem-Umgebungen ist es für Entwickler und Tester hilfreich, sofort zu sehen, auf welcher Datenbank und Umgebung man arbeitet. Wir nutzen dazu zwei Application Items , die per Application Computations - On New Instance (new session) - initialisiert werden: P_DB select SYS_CONTEXT ('USERENV', 'DB_NAME') DB from dual P_UMGEBUNG select case substr(SYS_CONTEXT ('USERENV', 'DB_NAME'),-1) when 'E' then 'Entwicklung' when 'A' then 'Abnahme' when 'P' then null else 'unbekannt' end Env from dual Beide Werte finde sich an folgenden Stellen wieder: App-Titel User Interfaces / Logo App-Name <span style="color: yellow"> >&P_UMGEBUNG.<</span> Anwender@Datenbank Application Definition / Version &APP_USER.@&P_DB. Version 0.0.1 Login-Page Identification / Title App-Name<br>- &P_UMGEBUNG. - Damit ist immer erke...

APEX: Interactive Grid im Edit-Modus starten

Ein Interactive Grid in APEX ist sehr flexibel. Es läßt sich leicht an diverse Bedürfnisse anpassen. Ein (störender) Punkt ist, dass es per default im Anzeigemodus startet. Erst ein Doppelklick startet die Bearbeitung, was bisweilen umständlich ist. Eine Lösung ist die Aktivierung des Edit-Mode bei Laden der Seite. Hierzu bekommt das IG eine Static ID , z.B. Px_IG. Über eine dyn. Action für das Event "Page Load" wird per Javascript der Edit-Mode aktiviert. apex.region("Px_IG").call("getActions").set("edit", true); That's it &#128578; Quelle: https://tm-apex.blogspot.com/2020/07/automatically-activate-edit-mode-on.html

APEX - Status Meter Gauge - Farbschema

Für das Status Meter Gauge mit 3 Zonen (Rot - Gelb - Grün) hat sich folgendes Farbschema bewährt: Quelle Farbdarstellung: https://encycolorpedia.de zu finden weiter unten im Abschnitt: "Farbtöne und Schattierungen" => Hintergrund jeweils das "heller" => Balken jeweils das "dunkler" Farbe Standard heller dunkler Link Rot ff0000 ff5232 d11507 https://encycolorpedia.de/ff0000 Gelb ffff00 ffff52 d0d015 https://encycolorpedia.de/ffff00 Grün 008000 469536 0f6a08 https://encycolorpedia.de/008000 ...für die APEX-Felder schaut das dann so aus: Abschnitt Source SQL-Quelle: select 'GZE-Ist' LABEL -- Label , 50 VAL_MIN -- Min , 100 VAL_SET -- Wert für "Reference Line" , IST_GZE VAL_ACT -- aktueller Wert , 125 VAL_MAX -- Max , case when IST_GZE Abschnitt Appearance Color: &VAL_COL. Plot Area Color: leer Abs...

APEX: (Lösch-) Button im Classic Report

Zum Löschen von Zeilen direkt aus einem Classic-Report gibt es mindestens zwei Varianten:  Löschen per Submit Dyn.Actions Version mit Submit benötigt: hidden item für die ID der zu löschenden Spalte auf der Seite eigene "Löschen"- Spalte im Report PL-Process für das eigentliche Löschen Im Detail: hidden item (hier: P2_ID_DEL) als Variable für Lösch-Process Lösch-Spalte als Link formatieren Target Typ URL mit Ziel javascript:apex.confirm("Diese Simulation löschen?", {request:"DEL_SIM", set:{"P2_ID_DEL":#GZE_SIM_KOPF_KEY#}}); Erläuterung: Bei Bestätigung der Rückfrage mit "OK" wird ein Submit mit dem Request DEL_SIM ausgelöst. Zuvor wird das HIDDEN ITEM "P2_ID_DEL" mit dem Wert der Spalte #GZE_SIM_KOPF_KEY# gesetzt (= PK der Zeile, die gelöscht werden soll). Button mit Text Link Text: Löschen Link Attributes: class="t-Button t-Button--simple t-Button--ho...

APEX: Read-Only Items ändern, ohne session state protection violation

Beim Ändern eines Item's per Dyn.Actions kann es zur session state protection violation kommen. Eine Lösung ist, dieses Item in ein hidden item mit Value Protected = OFF zu ändern. Wenn das Item sichtbar sein soll: Ein weiteres Item Px_ID_DISP erstellen (Display Only + Send on Page Submit = off) und Wert übernehmen. Quelle: https://www.traust.com/set-value-without-violating-session-state-protection-in-oracle-apex/

APEX: Button mit Rückfrage, bevor eine Aktion gestartet wird

Immer wieder gesucht, daher hier nochmal festgehalten: Hier das Vorgehen, um an einem Button einen Hinweis / eine Rückfrage ("Wollen Sie wirklich?") zu hinterlegen: Der Button: unter "Behavior" Action: "Redirect to URL" Target: javascript:apex.confirm("Berechnen?\n\n- Alles geprüft?\n Dann los...", {request:"RUN_CALC"}); -> auf diesen Request muss beim Process reagiert werden Der zugehörige Process: "Server-side Condition" Type: "Request = Value" Value: "RUN_CALC"

APEX: Buttons mit Confirm-Message in Report einbauen

Markus Hohloch hat sehr gut beschrieben, wie ein Button vor dem Start einer Aktion eine Meldung bringt: Die Report-Spalte als Link deklarieren und den Target Type auf “URL” setzen. Die URL muss dann folgendermaßen aussehen: javascript:apex.confirm(htmldb_delete_message, { request:"DELETE_ROW", set:{"P1_DELETE_MY_ID":#MY_ID#} } );   In apex.confirm ist es auch möglich, mehrere Items zu setzen. Außerdem steht mit “showWait” eine weitere Set-Option zur Verfügung, die das übliche Lade-Symbol auf der abgedunkelten Seite anzeigt. Das bietet sich vor allem für länger laufende Prozesse an. javascript:apex.confirm("Wilde Berechnung starten? Das kann dauern!", { request:"INSANE_CALCULATION", set: {"P1_DEPTNO":10, "P1_EMPNO":5433}, showWait:true }); aus: http://markushohloch.de/buttons-mit-confirm-message-in-report-einbauen/  

APEX: APEX Component Settings for Switch

 Um einen Schalter als Schalter darzustellen, ist ggfs. unter Shared Components -> Component Settings das Layout umzustellen.   Quelle: http://www.grassroots-oracle.com/2020/02/apex-component-settings-for-switch.html  

APEX-User im Logging mitschreiben

Um aus der Session des aktuellen APEX-User abzugreifen gibt es folgende sys_context abfragen: -- Apex-User abfragen select sys_context('APEX$SESSION', 'APP_USER') from dual; -- DB-Umgebung abfragen select substr(SYS_CONTEXT ('USERENV', 'DB_NAME'),-1) UMGEBUNG from dual; Weitere Möglichkeiten (mindestens ab APEX 19.1): sys_context('APEX$SESSION', 'APP_USER') sys_context('APEX$SESSION', 'APP_ID') sys_context('APEX$SESSION', 'WORKSPACE_ID')   sys_context('APEX$SESSION', 'APP_SESSION')   Ergänzend noch die bekannten Klassiker: SYS_CONTEXT ('USERENV', 'SESSION_USER') SYS_CONTEXT ('USERENV', 'OS_USER') SYS_CONTEXT ('USERENV', 'DB_NAME')

APEX auto refresh region

Um auf einer APEX-Seite eine Region (z.B. classic report) in regelmäßigen Abständen zu aktualisieren, sind folgende zwei Schritte nötig: 1) beim Report unter Advanced / StaticID - eine Static-ID vergeben, im Bsp: P2_ODI_MONITOR 2) etwas weiter unten unter Header and Footer / Header Text folgenden JS-Snip eintragen: &ltscript type="text/javascript"&gt setInterval("$('#P2_ODI_MONITOR').trigger('apexrefresh');", 5000); &lt/script&gt

APEX 19.1 - Status Meter Gauge

Bild
Mit der Version 19.1 bietet APEX nun Zeiger-Elemente out-of-the-box. Ein zusätzliches Plug-In wird nicht mehr benötigt. Alle Neuerungen siehe https://blogs.oracle.com/apex/announcing-oracle-apex-191  bzw. hier https://apex.oracle.com/en/platform/features/whats-new Wie baut man sowas nun ein? Es braucht eine eigene (Sub-)Region vom Type "Chart". Diese bekommt unter Attribute den Type "Status Meter Gauge". Dadurch werden diverse Deklarationselemente sichtbar, über die das Aussehen sehr weitreichend angepasst werden kann. Für meinen Fall habe ich mich für folgende Einstellungen entschieden: Zu jedem Zeiger/Diagramm gehört eine entsprechende Datenreihe (in APEX "Series" genannt). Für Zeiger hat diese Datenreihe nur eine Zeile, aber mehrere Spalten , mit denen das Aussehen gesteuert werden kann. Das entsprechende Select-Fragment schaut z.B. so aus: select LABEL      , 0 VAL_MIN      , VAL_SET      , VAL_ACT...

APEX 19.1 Interactive Grid (IG) - zusätzliche Spalten

Mit Version 19.1. werden die IG in APEX noch besser benutzbar (Detail u.a. bei Carsten hier:  https://blogs.oracle.com/apex/new-declarative-options-for-interactive-grid ) Ein Problem bleibt: Wenn über der Tabelle myTAB1 das IG aufgesetzt wird funktioniert alles super. Will man aus myTAB2 weitere Daten auch nur anzeigen wirds schwierig: APEX reklamiert fehlende Berechtigungen für myTAB2, obwohl es hier nur select-Rechte benötigt. Also ein select für das Grid auf eine Tabelle ist kein Problem: SELECT Col1_A      , Col1_B      , Col1_C   FROM myTAB1; Soll aus myTAB2 z.B. eine Summe angezeigt werden, wirds spannender: SELECT Col1_A      , Col1_B      , Col1_C      , D.Anz   FROM myTAB1        JOIN (  SELECT Col2_A, COUNT (*) Anz                  FROM myTAB2              GROUP...

CSV-Export für Excel - UTF8-Problem

Ärgerliches Problem: Beim Erzeugen einer CSV-Datei "von Hand" (z.B. in APEX) wird eine korrekte UTF8-Datei erzeugt - ABER: z.B. Excel erkennt die UTF8-Kodierung nicht und stellt Umlaute etc. falsch dar. Lösung: Durch voranstellen der entsprechenden Byte Order Mark (BOM) läßt sich Excel auf die Sprünge helfen. Konkretes PL/SQL-Beispiel:   v_UTF8_BOM varchar2(10) := CHR(15711167); ...  htp.prn( v_UTF8_BOM||'"Spalte1";"Spalte2"'|| chr(13)    ); ...und schon klappts auch mit Excel Quelle: Gerd Volberg in RedStack Magazin Nr4?-2018

ODI-Prozesse per Webservice z.B. von APEX aus starten

Ziel Bei Nutzung des ODI ist es hilfreich, ODI-LoadPlans etc. aus einer Anwendung heraus starten zu können. Mit APEX und ODI-Webservices (WS) ist das ganz einfach. Techn. Voraussetzungen - ODI Im ODI muss der entsprechende Webservice eingerichtet und URL, User und PWD des WS bekannt sein. Techn. Umsetzung - APEX   In APEX selbst erfolgt der eigentliche Aufruf über eine PL-Procedure: #OWNER#.ODI_RUN.LP_DAM18_LOADER(P_PARTITION_KEY => :P3_PARTITION_KEY); Techn. Umsetzung - PL - Bau des WS-Envelope In dieser Proc wird zu einen der Aufruf des Webservices erstellt: Webservice-Call: -- *** WS-Call bauen *** -- Anfang (Kopf/Head)   c_req_head :=             '<?xml version = ''1.0'' encoding = ''UTF-8''?>' ;   c_req_head := c_req_head|| '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.w3.org/2005/08/addressing" xmlns:ns2="xmlns.oracle.c...

APEX - Download vorgegebenes Format

In APEX gibt es eine Reihe bereits mitgelieferter Download-Möglichkeiten: - im Classic-Report - im Interactiv Report Manchmal reichen diese allerdings nicht aus. Z.B. wenn die Darstellung in APEX und der Download abweichen, oder die Download-Performance ein Problem ist. Auf Basis der Vorlage SCOTT SPENDOLINI (URL  https://spendolini.blogspot.de/2006/04/custom-export-to-csv.html ) schaut meine Lösung wie folgt aus: Auf der eigentlichen Seite einen Button (Region Button) erstellen, mit einem Redirect zu einer neuen, leeren, eigens für den Download angelegten Seite verweist. Auf dieser Download-Seite (diese bekommen bei mir immer eine Seiten-Nummer höher als die Button-Seite) wird im BEFORE HEADER ein Process vom Typ PL/SQL angelegt. Dieser Process übernimmt den eigentlichen Download. Aufbau des PL-Blocks: declare   v_quartal number; begin -- Set the MIME type owa_util.mime_header('text/csv', false, 'ISO-8859-1'); --Dateinamen flexibilisieren SEL...

APEX: change template for tabs from one level tabs to two level tabs

Bild
... weil doch ab und zu mal gebraucht wird und nicht wirklich eingängig ist: eine Anleitung zur Umstellung einer APEX-Anwendung von 1-Level-Tabs auf 2-Level-Tab (oder umgekehrt) und - gleichzeitig - Wie können Standard-Vorgaben für Anwendungen konfiguriert werden? Re: change template for tabs from one level tabs to two level tabs Posted: 04.01.2011 11:20   in response to: orton607     Hi, It depends on what else you may have done. The application will have a default page ...

BI Publisher Report in APEX-Anwendung einbinden

Aufgabe: Aus einer APEX-Anwendung heraus soll ein sauber formatiertes Formular / eine Liste etc. abgerufen/gedruckt werden (also keine Browser-Druckfunktion). Lösungsansatz (unter APEX 4 mit BIP 10 oder 11): 1. in APEX:   neuen Bericht unter shared components / Reports erstellen das SQL für den Report einfügen (ggfs. BIND-Variablen definieren - per :p2_var im SQL) Schema download speichern -> dient der Erstellung des RTF-Templates für den eigentlichen Report 2. Word mit BIP-Add-In: leeres RTF-Dokument erstellen per BIP-Add-In das oben erstellte XML-Schema laden Dokument gestalten, Felder an gewünschter Stelle einfügen (normale Bearbeitung wie im BIP) Dokument als RTF speichern 3. in APEX: neues Layout unter shared components / Layouts erstellen Namen vergeben und RTF hochladen unter shared components / reports dem Report das neue Layout zuweisen LINK des Reports kopieren auf die gewünschte Seite in der APEX-Anwendung wechseln hier neuen Button mit der...