Friday, January 30, 2009

Updateable IR...at least sort of ..(a.k.a calling an On Demand Process on a Public Page)

On apex.oracle.com I created an example of an updateable Interactive Report. It is not an in-line update functionality, but you can click on an image and so update the status of a record. It is not rocket science but a nice way to present such a functionality to your end users.
But while creating the example I discovered that the example worked on a Page that requires Authentication, but didn't work on an Public Page... To call the On Demand Process I used the namespaced function apex.ajax.ondemand, instead of the more or less old-fashioned htmldb_Get. But unlike the htmldb_Get, apex.ajax.ondemand has no parameter for the page where the process should run (actually apex.ajax.ondemand passes '0' as the page parameter to htmldb_Get). So in order to get things working I needed to mark Page 0 as Public also...
I guess it would be a nice enhancement if you could either pass a page parameter to apex.ajax.ondemand (default 0 is acceptable) or it should use the current page ($v('pFlowStepId')) as a default. Then you don't need to mark Page 0 as Public also. And I want as less Public Pages as necessary...

Thursday, January 29, 2009

Down memory lane

Very off topic....
Yesterday evening I went to the 40 years old rock opera "Tommy", this time not performed by The Who but by the Dutch band Di-Rect. The did a great show, with the original music, but with all the lyrics translated to Dutch. I really liked it, and I don't think I'm showing my age here, because 75% of the audience wasn't even born when the original record came out...
For an impression, see the video below.

Thursday, January 08, 2009

Returning a value by clicking on a row

In my previous post I showed a generic multi column LOV Report. One withdrawal was that the user has to click the first column to pass the selected value back to the calling form. It would be much nicer if you could click anywhere on the row, wouldn't it? To pass back a value you (used to) create a Named Column Report, but that is much too static.
By adding onclick="javascript:passBack( $(this).children('td:first-child').html() );" to the TR tag in the Before-Each- Row region you can click anywhere in the row and that will pass the value of the first column back to the calling page. Looks much nicer huh?
But (ofcourse) you need to install jQuery first....

Tuesday, January 06, 2009

Creating dynamic multi column LOV's in APEX


The default LOV's in APEX are implemented as a pop-up window, with the restriction that you can only show one display value. This is sometimes just what you need, but mostly it is not sufficient. You can create a longer display value by concatenating strings, but that won't enhance the looks of your application. What you do need is an LOV with multiple columns, more or less something similar as the LOV's you can get in good old Oracle Forms.
You can create an LOV Page for every LOV that you need and create a button with a link to that page for any item, but than you'll end up with lots of pages. Wouldn't it be better to use a similar feature as APEX itself has: Define an LOV query and attach that to an item?


So I created two tables: LOV_ITEMS and LOV_DEFINITIONS. The first one holds a reference to the APEX Page Items and a reference to a LOV Definition. The last one contains the SQL Query that will be used in one generic 'LOV Page' to show a report that acts as an LOV. With some templating for the looks, jQuery to dynamically create the buttons with the links and some javascript (Ajax) to show and hide the LOV the result looks a lot better.

A live demo and more details are available here.

Monday, January 05, 2009

MacMenu for APEX


A MacMenu sounds rather unhealthy, but if you can create your own one.... See it in action at the bottom of this page. The explanation on how to get this kind of result is also on that page.