OBUG Connect, the Oracle Benelux Usergroup conference in Brussels.

Opening ceremony by Wim Coekaerts & Janny Ekelson.
Nothing much to say about this…

First keynote session was brought by Chris Leone about Oracle Fusion applications.
Applications is not my thing, but it was nice to see how everything in Fusion apps is integrated like BI and collaboration.

My first session was “The best way” by Tom Kyte, a session about doing things the “best way” or “best practices”.
Tom quoted Bryn Llewellyn on what brings you to best practices.
It depends on things from “reasoning skills” over “education” to “know oracle inside out” to “know pl/sql inside out”.

An example join two big tables(big… big tables) with little distinct values.
What will be the fastest(best) way to retrieve records for one of those distinct values: hash joins or index scans?
In a batch operation the hash joins will be the fastest, but on a screen that only shows 20 records?

So, when is something the best way?  Well, it depends…

How can you tune using TKPROF?
A best practice…
Get the facts(physical I/O, logical I/O, difference between CPU and elapsed time,…).
Infer more facts.  Know your data, know how oracle works.
Build your context.
Rule things out.
Very interesting session!

Time for lunch!

Next session was one of Lucas Jellema and Patrick Stevens: “Randstad’s modernization of organization, architecture and applications powered by Fusion Middleware”.
They explained how they transformed the IT team to work with the agile approach.
This resulted in a faster develoment(about 4 times) and a team that is more involved.
Randstad also decided to make their applications service based.
So a service layer was build around all core processes using BPEL and OSB.
The only problem is Forms, which still accesses the database directly.
The Forms application will fade away in the future to a web application in ADF…

Last session was another AMIS session by Luc Bors together with Simon Vos of bol.com: “How BOL.COM benefited from ADF”.
Bol.com decided in 2007 to move to ADF.
Some reasons to move:
– Oracle statement of direction:  exit designer
– no authorization/authentication
– forms supported datamodel, not business processes
Where did they want to go to:
– new and extended UI
– add reporting
– no direct database access

So they introduced scrum, ADF and trained they’re inhouse (forms)developers to use JDeveloper, ADF and JHeadstart.
Now they could start to rebuild the forms application in ADF.
The pl/sql and built-ins used in forms are put in the database or, if lucky, they could use an ADF alternative.
Others(little percentage) had to be programmed in Java.

This resulted in a new application with the same functionality(allthough some additional functionality was added) as the forms application with a new look and feel.

Some interesting sessions, allthough I like to see some more demos next time.

Upgrading to Forms 11g

Grant Ronald has just published three references for Oracle Forms upgrades to 11g.
Those references can be found on his blog.

As Grant writes, it’s pretty easy to upgrade, just recompile and deploy.

A big advantage of migrating to Forms 11g is that it opens up the integration of the forms application with other technologies(eg. ADF).

Upgrade your Forms application and enter the age of fusion!

Designer and Forms 11g

More and more customers want to upgrade to Forms 11g, but then questions come like:
“There’s no Designer 11g, do we have to say goodbye to Designer?”
“Can we generate 11g Forms from Designer?”
“When we want to keep using Designer, do we have to stay on Forms 10g?”

A lot of questions…

What can we find on this topic?

First there is the  “Statement Of Direction” :

“As stated in earlier versions of this document, since Oracle Designer 10g there have been no
major new features although the product continues to be supported and development effort is
focused on stability and bug fixes. Oracle Designer is not released as a component of Oracle
Fusion Middleware 11g but will remain as a component in the Oracle Developer Suite 10g.
Future releases of Oracle Designer and support timelines will be within the Oracle Developer
Suite 10g release.”

There’s no new development, but Designer is still supported.
That’s some good news, we don’t have to throw away Designer right now ;-)

And of course there’s the Designer page on OTN, where the latest version can be downloaded.
The latest patch version is, released in May.
In the Release notes are two features that are very intresting concerning Forms 11g

“The Design Capture tool in Oracle Designer captures Oracle Forms 11g FMBs.”

“Configuring Oracle Designer to Work With Oracle Forms 11g”

So, it’s possible to continue working with Designer 10g and start using Forms 11g.
Implementing or capturing new Forms 11g features(external events, new triggers like when-custom-javascript-event) will be a problem in Designer 11g.

Designer is a good tool to keep everthing centralised from ERD to Form and keep everything well documented.   I would not throw that away right now.

Feel free to add your thoughts on this subject…

Update on “Forms 11G and DB function with result cache”

In my previous post I mentioned the problem with compiling a program unit that calls a database function with result cache.

Like I wrote in that post, the problem exists in the PL/SQL Client version.
There’s a patch available to update the PL/SQL client: Oracle Database Server Version Patch 33.

This is a database patch, but it can also be applied to the middleware home.

After applying the patch, the program unit compiles…Problem solved!

So, go and start using Result cache!

Oracle Forms 11g and Apex using external events

I remembered an old post of Roel Hartman where he integrated a form into apex.
He used a part of OraFormsFaces by Wilfred van der Deijl: the CommunicatorBean.
Using this CommunicatorBean forms could react on “external messages”.
Now with Forms 11g reacting on external events, this CommunicatorBean isn’t necessary any more(sorry Wilfred).

This is how I did it using external events…
First things first: set up the advanced queueing mechanism.
Check this tutorial which includes setting up advanced queueing.
I created a little form based on emp(nothing fancy)…

The new feature in forms:

With the following properties:

What should forms execute when this event happens?
This has to be specified in the When-event-raised trigger.

In this case we retrieve the payload and extract the empno from it.
The empno is used to set the default where clause on the block.
When there’s an empno on the queue, forms will query that employee.
That’s all for the forms part…
Now I created a little Apex page with two regions:

The Employee details will be our form.
So I put our form in the HTML using an iframe:

Using a “select list” it’s possible to select an employee.

This is the result:

Now the purpose of the select list is to choose an employee and show the detail information in our form.
In order to do this, the select list calls a javascript function.

This javascript function is created in the HTML header

The code behind this:

<script language=”JavaScript” type=”text/javascript”>
function getEmployee (){
var emp = $x(‘P2_EMPNO’);
// send request
var ajaxRequest = new

// get response
ajaxResult = ajaxRequest.get();
ajaxRequest = null;

This javascript function calls an application process and uses the empno as parameter.
The application process put the empno on the queue.

When changing the select list, the form is queried

This is a solution to integrate forms into another application whether it’s Apex, ADF or another web applicaton.
When it can put something on the queue, forms can react on it.
And yes, I could do it using the javascript feature in Forms 11g. I know…
And for Apex it’s probably a better solution, as we can skip the AQ part and make calls to and from forms in Javascript.

Forms 11g javascript integration: Call others

Forms 11g holds a lot of interesting new features focused on event-driven architecture, one of these is javascript integration. There are two ways of using javascript with Forms 11g: “call others” and “let others call you”.

Javascript can call code in Forms(“Let others call you”) using the new forms trigger “when-custom-javacript-event”.

This post is going to show you the first one: “call others”, in other words call javascript from your Oracle Forms application.

During the Forms Modernization Seminar I showed a google map that could be manipulated from an Oracle Form. It’s an easy implementation with only a few lines of code(most of the javascript is taken from the api examples on the google code site: http://code.google.com/apis/maps/).

  • Build a little form with one (control) block, one text field(to enter an address) and one button(to call the javascript code).
  • Next step is to create an HTML-page to display the form.

This code puts the form(in an iframe) and the map side by side:
(Click to enlarge)

And it will look like this:

  • The javascript that will be called is put in another file google.js:

  • The only thing to do is creating a “when-button-pressed” trigger in forms to call the javascript function showAddress.
    This is done by a new built-in procedure web.javascript_eval_expr:
  • Copy the HTML and javascript file to the following directory:
  • Create a new configuration using Enterprise Manager:

  • Make sure the parameter EnableJavascriptEvent is set to “true’ in your configuration!

And the working demo…

Forms Modernization, Part 1: Motivation for change

In the first part of our seminar we discussed some topics that forms customers want to change today.

These changes are mostly focussed on the island most forms applications and teams are working on today, such as:

    1) Internal services that are provided within the enterprise that could uplift the provided functionality to the end users.

    E.g. Order-information that is provided via a webservice of the existing legacy application. This information can be provided to the back-end and forms interface to have real time information provided to the accountancy-department that is using the forms app.

    2) External services that are provided by partners that could uplift the provided functionality to the customers and the business users.

    E.g. a good example of the ROI is explained in the ZLM Case Study.

    3) Existing pl/sql functionality that can be offered as a service to enterprise applications or external partners.

    E.g. the forms application handles the allocation of consultants of iAdvise. To be able to provide customers a better service we could offer the business unit managers, pre-sales and sales a real-time view on the whereabouts (no we don’t play tennis ;o) ) of the consultants. In other words, a customer is facing production problems and needs support asap, the sales person looks up which consultants are nereby the customers with the needed skills. Given the coordinates the sales-person can then call the consultant and give the customer a much better service without needing to cross to many channels to get the necessary information.

    4) Get on the fusion track and let your forms application talk to you jee, adf, apex, custom made application.

    You want to integrate new functionality which is provided through ajax, java server faces, event driven architecture, … to improve look and feel and to let end users profit from the added value such as asynchronous event handling, JavaScript integration, …

In other words when you start thinking about improvements you could make to your existing forms application, the ROI mostly is very obvious.

The investments made in human capital, architecture and infrastructure are protected whilst enabling integration of new technologies and improving your existing skill set and investments.

What I would like to know from other customers, developers, end-users, …:
Is anybody facing integration/modernization issues today within their Forms Apps that can’t be addressed using one of the following scenario’s: modernization, integration, upgrade to 10g/11g?

If so, please provide us this information so we can discuss the different scenario’s, aspects that are applicable to your specific case.