Freitag, 26. November 2021

APEX 21.2 new declarative way for confirmation dialog settings without javascript

Yesterday my colleague Maik Michel posted a screenshot on Twitter with a new feature of APEX 21.2, a new declarative way for confirmation dialog settings without javascript.


Now in the new release you don't need javascript to show the confirmation dialog if you are deleting a project, person or whatever you want to delete.I have created several screenshots to demonstate the old and new settings.

First usage of javascript < APEX.21.2




With APEX 21.2 everything can be done in the App Builder.






What do you think? Things have become pretty easy :-)

Montag, 17. Mai 2021

Running APEX 21.1 in Docker

Last week I posted a screenshot of the new Oracle APEX 21.1 running in my docker environment on Ubuntu Linux and I was asked to give a futher view of installing the new version. Here it comes right now 😀

To make things easier I searched the internet for a template of a docker project and I found the git repository from fuzzlebrain fuzziebrain/docker-apex-stack: Utility scripts for creating an Oracle Application Express stack as a Docker container. (github.com).

In general the process clones the official Oracle docker images and installs the needed software that is configured in a configuration file.

Step 1 is cloning the git repository to my local file system:


Prerequisites of software packages:
    Install the following things in your host:

  •   Git
  •   Curl
  •   Docker (of course)

Step 2 is getting the required the installer files and placing them in the subfolder <files>

  • Oracle Database 18c XE or any of the required installation files from OTN (supports versions up to 19.3 as of April 25, 2019)
  • Oracle Application Express (supports versions up 21.1 as of May 12, 2021)
  • Oracle REST Data Services (supports versions up to 20.4.3 as of May 12, 2021) or ords-21.1.1.116.2032.zip
  • Java Development Kit SE 8 (IMPORTANT: Please download the tarball, e.g. jdk-8u291-linux-x64.tar.gz.)

You can even try to build your docker images with different versions of ORDS or APEX. 
After executing the first step for several times I changed the first script 01-build.sh a little bit and removed the line where the official docker images are pulled. Why ? Because they are placed in the folder dockerfiles after the first run and pulled every time the process is started.


The second "issue" I modified is in the used 18c XE database Dockerfile as the install file is downloaded every time docker creation runs, But it should use the rpm file from the files folder.

old: INSTALL_FILE_1="https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm" \

new: INSTALL_FILE_1="oracle-database-xe-18c-1.0-1.x86_64.rpm" \


Step 3 is to configure my settings for the creation process in the file mysettings.env.
Make a copy of settings.env.sample, e.g. mysettings.env, and modify as desired. 

mysettings.env  should contain the following variables:


 You can change many parameters in there e.g. the oracle SID, the versions, the ports and the passwords for Oracle, APEX and ORDS. When you are done the DB creation process can be started.

Step 4 is to run the first script to grab the latest Docker images from Oracle and build the Oracle Database image. The script takes one parameter, the environment filename (mysettings.env).


Step 5 is to run the final script to create and run the container, where the container name is of your choice e.g. das.


When the script is ready or when I start my previous container again I can login to the APEX internal workspace http://localhost:50080/ 

the initital password for the ADMIN user can be retrieved from mysettings.env





After login ypu are able to create other workspaces in APEX or applications if you like.

That is pretty easy to use and play with APEX in Docker.

Cheers
Holger

Freitag, 7. Mai 2021

APEX: Vergrößern der Navigationsbar bei einem Seitenmenü per Javascript

Moin allerseits,

heute wieder ein kurzer Beitrag zu Oracle APEX. Was will ich machen? Das seitliche Navigationsmenü soll verbreitert werden. Die übliche Option ist natürlich über den Theme Roller.

Das ging in unserem Projekt nicht, denn das Universal Theme war noch bei einer älteren Version und sollte auch dabei bleiben.

Wir hatten ein paar längere Menüeinträge, daher sollte das Menü breiter werden.

Funktioniert hat dieser Wunsch mit dem Einsatz von Javascript auf der Page 0, der Global Page - Desktop mit einer Dynamic Action beim Page Load.




Javascript Source: Link zum File auf Github.

Screenshot vom eingeklappten Menü:



Screenshot vom ausgeklappten Menü:



Die Herausforderung bestand darin, dass manchmal nicht alle Menüs und Pages korrekt dargestellt wurden, sondern so ein Zwitter entstand. Dann haben auch die Abstände nicht gestimmt.

Wir haben in dem Javascript File ein Initial Setting bei Applikationsstart sowie weitere Zweige, wenn des Menü auf expanded bzw. collapsed geht oder auf einen Navigationseintrag geklickt wird.

Viel Spass beim Ausprobieren wünscht Holger.

Dienstag, 16. März 2021

Ausgabe der Daten eines Classic Report oder Interactive Report mit Filtern aus APEX in APEX Office Print (AOP)

Heute möchte ich wieder die Lösung einer kleinen APEX Aufgabe in meinem Blog Post beschreiben.

Die Situation bisher war so, dass nur die Inhalte eines Classic bzw. Interactive Report in Tools wie Microsoft Excel oder Word per APEX Office Print (AOP) ausgegeben werden. Aber auf der APEX Seite gibt es dafür auch noch einige vordefinierte Filtermöglichkeiten, die der Kunde nun auch noch in der Druckausgabe sehen wollte.

Ich habe das Szenario für die Demo mit Objekten aus dem Data Dictionary nachgebaut, indem ich Objekte von Benutzern aus der Datenbank filtern und ausgeben kann.

APEX Seite mit einem Interactive Report mit Filtern


Die Ausgabe im Word Dokument sieht so aus:

Druckausgabe in Word per AOP

Die Tabelle der Benutzer und Tabellen wird von APEX vom Interactive Report mit einer Static Id übergeben. Für die Filter habe ich 2 unsichtbare Classic Reports erstellt und auch mit einer Static Id versehen, damit ich die Filterinhalte auch recht einfach an AOP übergeben kann.


Angabe mehrerer Static Ids für AOP


Das Word Template für die Druckausgabe schaut dann so aus:

Word Template des AOP Dokumentes

Zu beachten ist: Vorher hieß das Tag in meinem Word Template nur {&interactive}. Nach dem Hinzufügen der 2 weiteren Static Ids für die Filter Classic Report mußte ich das Tag in {&interactive_1} ändern, weil eine Fehlermeldung kam.



Das Ganze funktioniert sehr ähnlich für Excel.

Wenn man keine Lizenz für APEX Office Print besitzt, kann man sich AOP auch in einem Container in einer Always Free Instanz bzw. VM in der Oracle Cloud installieren.

Viel Spaß beim Ausprobieren von APEX Office Print...

Donnerstag, 11. Februar 2021

Submit einer Custom APEX Login Page mit der Enter Taste

Hier kommt der nächste neue APEX Post von mir. Thema heute: Submit einer Custom APEX Login Page mit der Enter Taste.

Der Login Screen ist nicht der Standard APEX Login Screen, sondern eine selbst entwickelte Page.



Der Login mit der Maus geht hervorragend, aber es soll auch ein Login mit der Enter Taste möglich sein, wenn man im Item "password" ist.

Ein einfaches Submit when Enter pressed 



reicht leider nicht, da die Login Logik hinter dem Button "Log In" liegt.

Also wird eine neue Dynamic Action auf dem Item "password" angelegt und mit etwas JavaScript gefüttert.


Hier kommt der JavaScript Code für die True-Action.

Und schon führt die Betätigung der Enter Taste die Login-Prozedur aus.


Cheers,

Holger



Dienstag, 2. Februar 2021

Einen modalen Dialog in APEX nach dem Login Vorgang anzeigen

Hallo allerseits,

heute kommt mein 1. Post zum Thema Oracle APEX, mit dem ich nun auch unterwegs bin.

Meine Aufgabe war es, einen modalen Dialog in APEX nach dem Login anzeigen, natürlich nur unter gewissen Bedingungen.

Die PageId des modalen Dialog ist 340.

Zuerst habe ich versucht das Ganze mit einem Branch und einem Page Redirect anzuzeigen.




Aber da das Ganze ja ein modaler Dialog ist, ist nichts passiert. Dann ein wenig im Internet gesucht und die Lösung mit JavaScript gefunden.

Ich habe dazu ein Item PX_URL und eine Dynamic Action beim Page Load angelegt.


Bei Set Value wird die URL für den modalen Dialog zusammengebaut.



Zum Start des Dialoges wird JavaScript aufgerufen.




Und die gesamte Dynamic Action hat noch eine Prüfung in der Datenbank, ob der Dialog angezeigt werden soll.


Nun wird nach einem Login unter gewissen Rollenbedingungen dieser modale Dialog angezeigt.


Viel Spaß damit,

Holger


Update einen Tag später nach einem Hinweis von einem Kollegen: eval ist bdeneklich wegen Sicherheitsbedenken und Malicious Code.

Die Lösung besser apex.navigation.redirect verwenden:

apex.navigation.redirect(apex.item('MY_ITEM').getValue());

Man lernt so viel als #orclapex APEX Rookie :-)

 

Mittwoch, 12. August 2020

komische Zeichen in einem Bericht bei Reports 12c

Hallo,

mir ist wieder etwas Komisches passiert. Dabei habe ich nur einfache Änderungen an einem bestehenden Report eines Bestandskunden gemacht. Das Ergebnis war nicht gut und ist hier als Vorher und Nachher-Bild zu sehen.




Die Rahmenbedingungen bei dem Setup sind:

  • Entwicklungsplattform ist Windows
  • Zielsystem ist Linux
  • Reports Version ist 12.2.1.2.0
  • Zeichensatz ist ein GERMAN_GERMANY.WE8MSWIN1252
Noch etwas zum Schmunzeln: Wenn man diesen Report auf einem Windows-System aufruft, wird alles korrekt dargestellt.

Öffnet man die PDF-Ausgabe von dem Bericht, sieht man, dass sich dort eine Schriftart Symbol eingenistet hat. Dabei soll die alleinige Schrift Times New Roman sein.


Nach einer Suche im MyOracleSupport habe ich die passende Notiz dazu gefunden, DocID 300416.1: Symbol Characters ("Greek") Instead Of Expected Characters Are Displayed in Reports or Reports Parameter Form (Doc ID 300416.1). Grund dafür ist ein Bug: Bug 2906401 FONT ALIASING NOT WORKING FOR ALL FIELDS WITH WE8ISO8859P15 CHARACTERSET

Die empfohlenen Lösungen sind mit einer kompletten Umkonfiguration der Fonts in Reports verbunden.

Das ging aus diversen Gründen im Moment bei dem Kunden nicht und wir haben eine andere Lösung gefunden.

Die Reports werden in das Textformat konvertiert und in dem Text werden alle Textstellen mit charset =178 nach charset =31 geändert und das File wieder in das RDF-Format zurück konvertiert. Das hilft auch, ist aber natürlich im Prinzip bei jeder Anpassung nun zu tun.

Vielleicht kann das ja hier nun jemand noch gebrauchen und sucht dann nicht so lange.

Ciao
Holger