Skip to main content

Posts

Showing posts from 2016

OTN Nordic ACE Tour : A Tale of Three Cities

3 days - 3 cities - 6 presentations (4 different ones)
My tour started on Monday afternoon when I left my house around 1.30PM to get on the bus to the train station. The 2PM train left exactly on time for the Amsterdam airport. I arrived at Schiphol around 3:30PM, perfectly on time to catch the 5PM flight to Copenhagen.
The flight to Copenhagen was very uneventful. From the airport I took the train / metro into the city. I already received an email message from one of my co-travellers, Martin Widlake, who was sitting al alone in a bar downtown. The poor guy. So I rescued him and was briefly after that joined by Sten Vesterli - another ACE Director from the organising country. After just one beer we head over to the restaurant where we met the rest of the board of the Danish Oracle User Group and the other two co-travellers, John King and Ludovico Caldera, for a very nice dinner.
As the city was crowded due to another - slightly larger - conference all hotel rooms were either booked or…

APEX 5.1 NF : Show Custom Application Icons in the APEX Builder

It just isn't fair. If you install a Packaged Application - and you should because there is a lot to learn from those apps - in your APEX Workspace they all have a cool looking icon. And your own applications, just show up with two characters in a (random?) coloured box. Why can't I have a nice looking icon for my application?


In APEX 5.1 you can! Upload an image as a Static Application File. According to the help it should by 64 x 64 pixels, but I noticed it can be larger as well. It should be square though to show up nicely. Don't put it in a (sub)directory, it should be placed in the 'root' folder.

Then edit the Application Definition (either via Shared Components > Application Definition Attributes or by clicking on the "Edit Application Attributes" on the Application Builder home screen. Then scroll down until you see the "Icon File Name" property. Enter the name of the uploaded file there - but don't reference #APP_IMAGES# as you…

It's happening again ... running for the ODTUG Board of Directors 😉

For the third time in a row I'll be running for ODTUG's Board of Directors. But after ending as a runner up twice, I am sure I'm going to make it this time! But not without your help!

My campaign statement this year is:
I have been attending and presenting at Kscope conferences since 2007. This not only resulted in a vast amount of knowledge, but also - and even more important - a huge number of friends from all over the globe.  I want to see ODTUG grow and spread this community feeling even more! 
My experience as an attendee, presenter and content lead has provided the basic foundation to be a director. Next to that, my personality and (global) network will be beneficial to the whole board and organization. 
Since March I have served on the Board of Directors in a limited term for a Director who stepped down due to a career change. This has allowed me to have unique insight of all the things that are going on in and around the ODTUG organization. As the train was already ro…

OTN Nordic ACE Tour

In 1.5 week I'll be travelling to and through the Nordics as one of the speakers during the OTN Nordic ACE Tour. It will be quite a busy schedule!

On Monday afternoon I'll be flying to Copenhagen and will meet my fellow travellers for the week during a dinner hosted by the Danish Oracle User Group. On Tuesday I have two sessions during the event: One about APEX JavaScript API's and one about APEX 5.1.  At the end of the day it's off to the airport to catch the flight to Oslo around 7PM. I foresee an airport dinner here....

Wednesday in Oslo I have even three sessions: About the Universal Theme, APEX 5.1 again and APEX and JET.  At the end of the day it's off to the airport again to catch the flight to Helsinki around 7PM. Probably another airport dinner here ....

Thursday morning Heli will take us for a short (but brisk) walk through Helsinki, before the Finnish event starts around noon. Here I have only one session, about APEX 5.1 again. And again ... back to the …

Fix Interactive Report headers issue when using a Region Display Selector

When you have multiple Interactive Reports (IR) on your page and use a Region Display Selector to mimic tabs, you might notice some weird behaviour in the IR headings if you switch tabs. The headings are not positioned correctly and you get an extra empty row under the headings. It just looks weird and ugly. But if you resize your browser window, it all looks fine again (until you switch to another tab..)

So can we fix this by creating a Dynamic Action that mimics that "browser window resize" event? Yes we can!
Create a Dynamic Action that fires on Click of the jQuery selector li.apex-rds-item a. That should fire a JavaScript snippet :  apex.event.trigger(this.triggeringElement, "apexwindowresized");
So now a click on a tab not only switches from one IR to another but also fires that event that will "autofix" the IR headers. A simple solution for an annoying problem.
This applies to APEX 5.0, I assume it will be solved in 5.1.

Creating an APEX plugin for an Oracle JET component - Part 2

In my previous blogpost I showed how you can embed an Oracle JET component in your APEX application. Now it is time to make a plugin out of the wisdom we gained doing so.
First of all a disclaimer. My intention is to make this plugin and the inner workings as simple as possible. So you can add a lot more functionality, checks etc and therefore add complexity. But this is intended to be as simple as possible.
The plugin consists of three parts: a PL/SQL render function, a snippet of JavaScript and a PL/SQL ajax function.
The render function is defined as :
function render  ( p_region                in  apex_plugin.t_region , p_plugin                in  apex_plugin.t_plugin , p_is_printer_friendly   in  boolean  ) return apex_plugin.t_region_render_result  is
  c_region_static_id      constant varchar2(255)  := apex_escape.html_attribute( p_region.static_id );
begin   -- Add placeholder div   sys.htp.p (      '<div class="a-JET-PictoChart" id="' || c_region_static_id || '…

Creating an APEX plugin for an Oracle JET component - Part 1

In APEX 5.1 (still Early Adaptor 1 at this moment), Oracle JET - Javascript Extension Toolkit -  is included to facilitate charting.
The APEX Development Team recently mentioned that not only the Data Visualisations part of JET will be included in APEX 5.1, but the complete installation of JET. The whole package. That won't do the size of the downloadable install file any good, but more important is: what can we do with it?
A number of the Data Visualisations will be exposed in APEX for the declarative definition of charts as we are used to now using the Anycharts library. But there are more Data Visualisations - check the JET Cookbook for all examples - and other components that might be of interest for an APEX application. So how can we use these in our apps?
As an example, I would like to use the PictoChart component in my application. Fist of all - as we don't have APEX 5.1 yet - we need to download the Oracle JET library and install the files on either your web server or …

Consuming a REST Web Service returning JSON in APEX

In APEX you can define a web service that returns XML as below - all declarative, just a few steps through a wizard.


Then generate a report on top of that web service - again just a few clicks through a wizard. The generated query looks like this:
select xtab."customerName"      , xtab."customerId"   from apex_collections c,            XMLTable('/Response/S_getCustomerListTableArray/S_getCustomerListArrayItem' passing xmltype001             COLUMNS "customerName" PATH 'customerName'                   , "customerId"   PATH 'customerId'           ) xtab  where c.collection_name = 'CUSTOMERLIST'
So the result of the web service is stored in an XMLTYPE column. And it's easy to spot where you're definitions for the Response XPath and Output Parameters are used.
But what if your web service returns JSON - as more and more web services will do so? If you switch the Output Format of the web service definition to JSON, th…

Prevent general row based search in an APEX Interactive Report

At my current project we use Interactive Reports heavily. But in some cases the underlying queries are rather complex and a query without any filter or with just a filter on all columns doesn't perform that well (understatement...). We already implemented a solution to prevent initial loading of the data by adding an additional criterium to the query ( :P400_SEARCH = 'Y' ). The default value of this hidden item is 'N' and on Page Load the value is set to 'Y', so the next search will be executed. But as said, this is good, but not good enough...
So this morning I was looking for a solution to "force" the user to enter a query on one of the columns - either through the "search bar column list" (the magnifier on the left side of the search field) or through the Actions > Filter menu. The first attempt was to use a Dynamic Action that fires on change of the search field, but that doesn't work when the user switches existing filters on…

Create a Navigation Bar based on a SQL statement

Creating a Navigation Bar using static values is very straightforward. Just create a list similar to this example below - and you can easily define multiple levels.
Then, in the User Interface Attributes, set that list to be your application's "Navigation Bar List" and specify the template. And the Navigation Bar pops up nicely in the upper right corner of the screen. So far so good.
But what if you don't want a Static List, but get a list based on a SQL statement? Then you have to enter a statement that adheres to the this structure: select level, labelValue label, [targetValue] target, [is_current] is_current_list_entry, [imageValue] image, [imageAttributeValue] image_attribute, [imageAltValue] image_alt_attribute, [attribute1] attribute1, [attribute2] attribute2, [attribute3] attribute3, [attribute4] attrib…

Me and the ODTUG Board

This afternoon my Twitter timeline exploded with retweets, likes and congratulations. It all started with this tweet:

So it's official now. As Sarah Zumbrum had to step down due to her (dream) move to Oracle, a position on the ODTUG board opened up. And I was asked whether I was still interested. And of course I was! So after an internal voting procedure, I received the good news last weekend - and had to keep quiet for a few days...which was quite hard! Last November I wrote a blog post "I *almost* made it to the ODTUG Board of Directors...", but now the word between the asterisks can be omitted. I am thrilled to serve on the board - even though it's initially only until the end of the year. I'll definitely run again for the board in October - so you'd better become a member a.s.a.p. to vote for me then (if you aren't already)! Hope to see you all at Kscope16 or any other local event. You can read the official statement on the ODTUG site.

Unexpected behaviour using SSO Authentication for APEX

A customer of mine switched to a Singe Sign On Authentication Scheme for their APEX application - using Oracle Access Manager, but that's irrelevant to this case.
In the application there's a function to create an - temporarily - "real" APEX user. That APEX user is used in another JavaScript application that uses ORDS and the built-in APEX authentication - thus requiring the existence of APEX users. That function ran flawlessly when the application was still on APEX Authentication. But after switching to SSO, it complained about "ADMIN" privileges .... although the usernames are identical: SSO and APEX Authentication used the same usernames. So it must be something in the authorization / security realm, isn't it? Thus we tried a smart thing and moved that particular function to another - APEX Authenticated - application, while sharing the login credentials via a cookie. But to no avail. Some complaint. So I contacted the APEX Development team and - as a…

Navigating through your APEX Calendar - the easy way

The renewed Calendar Region in APEX is awesome. With just one SQL statement you can provide your users with a calendar view of their data that looks very familiar to what they already know, use and love. Apart from one thing: Navigating to a specific date is cumbersome.
The shortest route is:

Navigate to the right month (can be any number of clicks) Switch to "Week view" Navigate to the right week (between 0 and 4 clicks) Switch to "Day view" Navigate to the right dat (between 0 and 7 clicks)
Way to many clicks!
So how hard can it be to make it easier - more user-friendly? We would like to navigate from both the Month view and the Week view directly into the Day view of a specific date. So with just one click once we have that day in sight.

Dynamic Actions to the rescue. Of course. What else...

First from the Month view to the Day view:
1. Create a Dynamic Action with the specs as shown to the left. Notice the the Event Scope should be "Dynamic" otherwise i…