Recent Posts

Set APEX application name for Dev, Test and Prod environment in the same database

Von Tobias Arnhold → 7.18.2018
In case you have a small application where development, test and maybe also production environment are on the same database and your applications in this environment distinguish only by the application IDs. To setup a custom application name based on the ID you could do like this:


We assume our application name is "Training room app" defined in the "Shared Components" > "User Interface Attributes"


To differentiate the environments I add a dynamic action "Page Load" on Page 0.
This dynamic action is executing custom Javascript code:

if ('&APP_ID.' == '200') {
  $('.t-Header-logo').find('span').html('Training room app - <b style="color:#008A34">Test Environment</b>');
}
else if ('&APP_ID.' == '300') {
  $('.t-Header-logo').find('span').html('Training room app - <b style="color:#9366a5">Development Environment</b>');
}


The code is changing the name of the logo area.

 

Copy and Paste to clipboard

Von Tobias Arnhold → 7.17.2018
Well I had the requirement to copy the content of a textarea into the clipboard. There are two ways to do that:

1. Build a dynamic action with custom Javascript code:
Copy Text to Clipboard

Code example - with dynamic action on "Click" and "Execute Javascript Code":
/* Select the text field */
$('#P1_APEX_ITEM').select();

/* Copy the text inside the text field */
document.execCommand("copy");



2. Use an APEX plugin:
Copy to Clipboard (v1.1) - build by Dick Dral



Icons made by Vitaly Gorbachev from www.flaticon.com is licensed by CC 3.0 BY

Enable save button on form change

Von Tobias Arnhold → 6.28.2018
Today I had the requirement that the save button should stay disabled until a form item changed.

After digging around I found a quite easy solution which worked well until now.

Save Button
Static ID: saveBtn
Custom Attributes: disabled

Dynamic Action
Event: Page Load
Execute Javascript Code:
$('#wwvFlowForm').on('input change', function() {
    $('#saveBtn').attr('disabled', false);
});



Simple but effective.

Working with the APEX tree

Von Tobias Arnhold → 6.27.2018
Out of a coincidence I haven't used the APEX tree region for years. Now I got the task to create a customizable tree in my application. Since APEX 5 there is a new tree type called "APEX tree" which supports some really cool functions.

Anyway I had to look around to find out what the APEX tree is actually capable of. First of all start with the APEX "Sample Trees" application which you find in the packaged application area.



Morten Braten took that example and described the features really well:
https://ora-00001.blogspot.com/2016/01/working-with-the-apex-5-treeview.html

John Snyders from the APEX team also created 2 blogposts about the "APEX tree":
APEX 5.0 Converting to the new APEX Tree
Add Checkbox Selection to APEX Tree Region

And as he mentioned there is a Javascript library behind it "libraries/apex/widget.treeView.js." which is documented since APEX 18.1 or at least I think it is. Anyway here is a link which I also have to further investigate:
JS Doc: Widget: treeView

German users can read this document provided by MT AG:
http://files.xmasman.de/20160216_MeetupNRW_TillAlbert_WiePflanzeIchEinenBaumApex.pdf

Check inside your APEX application if debug mode is enabled

Von Tobias Arnhold → 6.08.2018
Sounds like a simple task but whenever I have the requirement to add a region and make it conditional to check if APEX is running in debug mode. I always search for half an hour finding the right solution.

Search example on Google: "Oracle APEX check debug mode conditional PL/SQL"
Trying this or 30 different other ways it always ends up with the wrong results.

But it is so easy - Conditional PL/SQL Expression:
APEX_APPLICATION.G_DEBUG

G_DEBUG returns true or false!
The documentation is a bit imprecise because it says 'Yes' or 'No'.

Anyway it is all well documented in the APEX documentation
> APEX_APPLICATION > Global Variables:
https://docs.oracle.com/database/apex-18.1/AEAPI/Global-Variables.htm#AEAPI29544




Join the NextGEN group at APEX Connect 18

Von Tobias Arnhold → 4.20.2018
The #NextGEN community is planning an after conference evening activity. For that reason we published a German article with all details on doag.org. My dear friend Jonas translated the text via deepl.com/translator.

Original article:
Wir sind EINE Community!

Here you go:

------

Young people who are motivated to get involved in conference planning? Yes, that's right!
And these motivated youngsters bring 24 more youngsters far away from the Oracle APEX universe.
Before the "older ones" among us now fall into shock rigidity - stay relaxed, because we need you!

These 24 students have no idea of our special APEX community.
It's up to us to take them along and show them how much fun, passion and action they can expect in APEX everyday life.

How do you recognize the students? 
Long hair, pale skin, no crutch... well, seriously: all students wear orange bracelets.

What do we expect from you?
Talk to the students! Don't just make them feel like they're in the community, but show them what it means to live the APEX community membership.

How do you do it best?
In addition to the conference and community evening on Wednesday, there are other networking opportunities:
For example, anyone interested can meet after the Speaker Reception on Tuesday at Schweinske (Bolkerstr. 28) from 8:30 p.m. in Düsseldorf's Old Town.
On Wednesday, after the official evening event at the Apollo Varieté, a joint visit to Club El Papagayo, which you can find at Mertensgasse 2 (both on a self-payer basis).

A tip: Give the poor students a drink - this will certainly increase their attention to want to know something about APEX! :slightly_smiling_face:

With these requests and advice we hope as NextGEN to bring the young savages together with the established community.

See you at APEX Connect!

Your NextGen team:

Abby, Caro, Rebecca, Davide, Jonas, Matthias, Philipp, Sebastian and Tobias

------

See on Tuesday! =)

CREATE or COPY master data pages in APEX

Von Tobias Arnhold → 3.07.2018
In this blog post I just want to give a hint about the positive and negatives effects when you COPY master data pages for different master data tables.

Example:
You have two tables: DOCUMENT_CATEGORY and ORDER_CATEGORY
Both tables have the same columns :
ID, CATEGORY_NAME, DESCRIPTION
CREATED_ON, CREATED_BY, CHANGED_ON, CHANGED_BY

In APEX you have a Master - Detail view including 2 pages: report view and modal dialog


If you decide to copy both pages you have to adjust the following things:
Master Data Report:
 - Page Name
 - Breadcrumb
 - Navigation Menu
 - Report DDL: Table Name
 - Report Column Link
 - Create Button Link

Modal Dialog:
 - After Header - Automatic Row Fetch (Name, Table Name)
 - Processing - Automatic Row Processing (Name, Table Name)
 - After Processing - Branch
 - APEX Items (in case you have different names or use prefixes)

What is the advantage?
1. Security
Security settings get copied like "Page Authorization Scheme". Master data pages normally apply to only one role, for example: administration
2. Labels and messages get copied (items, buttons). Really helpful if you named them differently to the standard APEX naming.

What is the disadvantage?
1. Linking
If you forget to change the branches/links then you could end up on the wrong page changing the wrong data. But on the other side this is the first thing you check after you finished the editing of the pages.
2. Automatic processing
If you forget to update the table names then you end up changing the wrong data.

Conclusion:
It is a bit more risky to copy master data pages but it can save you a lot of time changing label names and to remember the security settings.