Pre-order Oracle APEX 4.0 Cookbook now!

For the past months I have been working together with Marcel van der Plas on a book on APEX 4.0. The publisher Packt has just released the website, so it can now be pre-ordered.

Find the link here: Oracle APEX 4.0 Cookbook

The book offers more than 70 recipes that cover almost all topics of Application Express 4.0.
We are currently finishing up and expect that the book will come out in January.

Review: Oracle Application Express 3.2 – The Essentials and More

For the past few months I’ve been working together with Marcel van der Plas on a new book that will cover APEX 4.0. But the Application Express 3.2 community is still very much alive.
In May of this year the authors Arie Geller and Matthew Lyon have published a book at Packt Publishing describing some (or most) of the essential features of APEX 3.2. Since I am writing for the same publisher, I have been asked to review the book and give my opinion.

After reading the book description on the internet and on the cover, I was expecting a book that would introduce the reader softly into the world of developing web applications with APEX. So I did what I usually do with a new tech book; I opened it at a random page and start browsing it for a while.

To my big surprise, it scared the living daylights out of me!

Instead of reading the usual descriptions of APEX features that I’ve learned to know in the past few years, I found pages and pages full of stuff I didn’t know! Was there so much that I could still learn? After so many projects, posting blogs, writing my book, could it be that APEX holds many more secrets?

The answer to that would be simply yes. This book taught me new ways of working with APEX. But how did they do that?

From the beginning of the book, the authors are comfortable in mixing the basics with many advanced features. They are not afraid to describe a simple task as creating a new item with an example of javascript calls.
But this is also a bit of a problem with a part of the book. Because the authors have tried to tell -everything- there is to know about APEX, they had to make compromises in how to describe the different aspects. This often results in quickly stepping over the more simple descriptions and start on the advanced bits. Because of this the book looks not as suitable for beginning developers as I would expect.
But don’t let this scare away the developers just starting with Application Express, the book is in fact suited for beginners and advanced users alike. If you can read past the bits that aren’t up your alley, there are many gems to be found for any developer.

Arie and Matthew have described a huge number of subjects in the book. They not only covered the programming side of APEX, but also the server architecture and configuration of the APEX environment.
The subject that immediately drew my attention is Globalization and Localization. Since I’ve had experience in that field, I read this chapter with extra interest. As a bonus Arie explained a great deal about creating right-to-left applications in the next chapter. This is his area of expertise and you can tell by the chapter. A very thorough description, with smart solutions for every developer that needs to make his or her application available for right-to-left reading users.

It’s impossible to describe all chapters of the book, simply because there is so much in the book. The 24 chapters will lead you through all parts of Application Express 3.2 and guide you in building applications and configuring the building environment. I recommend this book as a good read for anyone that is working with or is thinking of working with Application Express.

If this review made you curious about “Oracle Application Express 3.2 – The Essentials and More”. You can buy the book directly at the website of Packt as a hard-copy or eBook.

Passed APEX 3.2 Beta Certification

Oracle Application Express Developer Certified Expert Logo

Yesterday I returned from my summer vacation in the French town of Pierrefite-sur-Sauldre. Me and my family spend 2 wonderful weeks in the Alicourts resort.

This morning I opened my e-mail for the first time and found a nice little surprise from the Oracle Certification Program.
A while ago (in february) I participated in the Application Express 3.2 certification beta program. I took the exam in Utrecht and waited for the beta period to end.
The e-mail I received from Oracle and Pearson VUE contained a link to my Score Report. The verdict was: Passed!

So now I’m officially certified in “1Z1-450: Oracle Application Express 3.2: Developing Web Applications” or Oracle Application Express Developer Certified Expert for “short” :)

“Oracle Application Express 3.2 – The Essentials and More” book published

Last week a new APEX book was published. It was written by Arie Geller and Matthew Lyon. It’s on the current version of APEX and covers basic and advanced features of Application Express 3.2.

I will post a review somewhere in the coming weeks, but since the publisher is the same that will be bringing out my own APEX 4.0 book later this year, I wanted to let you know that this is out there. You can find more information at the website of
Packt Publishing

APEX 4.0 New Features

I did another Whitebook (in dutch). This time the subject is New Features in the APEX 4.0 Early Adopters release.
You can find it at the Whitehorses website.

By the way; besides this personal blog I also publish articles on the blog at the Whitehorses site together with the other Oracle, Java and SOA specialists of the company. These blogs are in english. A direct link to the list of my blogs is in my profile.

New Whitebook and blog

For my employer Whitehorses I have written a new Whitebook on Application Translations in APEX. This Whitebook was written together with colleague Ome-B, the owner of www.Ome-B.nl and author of the book Oracle Application Express Forms Converter.

Following up on this Whitebook I have posted a blog at blog.whitehorses.nl, to explain how these translations work in the early adopters release of APEX 4.0.

Performance checks in APEX

Sometimes an APEX application performs worse than expected. This can have many causes, ranging from wrong parameters in the database (for example the SGA allocation) to less-than-optimal queries.
Besides the tools that a DBA has to check the performance and take action according to his findings, a developer also has some options to use in Application Express.

1. In the Apex Admin application there are some reports under the tab Monitor Activity. In the Page Views by View report that is found in the Page Views section, you can see how long it takes a page to load in the browser. Using this it is possible to see which pages take too long to load.

2. By using the Debug option in the developer toolbar, APEX generates a lot of debug information. Using this information a developer can see how a page is built-up in the browser. In front of each line of debug information is a time-stamp. This information allows a developer to analyze what part of a page is causing the delays.

3. It’s possible to let Application Express generate a trace file from the URL. To do this, simply add &p_trace=YES to the URL and call the page again. This generates a trc file in the user_dump_dest directory (find this using show parameter user_dump_dest). This file can also be analyzed to find where the problems may occur.

Offcourse this list is not a complete overview of all tools that are available to analyze performance problems, but I think you can get a good start.

Using audit columns with APEX

It’s good practice to use audit columns in Oracle to see which user created or modified certain records. Application Express is not different.

Filling audit columns is usually done using Before Insert and Before Update triggers on the related tables. These columns usually are Created_Date, Created_User, Modified_Date and Modified_User. Both date columns are filled with Sysdate, but the user columns are a bit different.

In most environments you can suffice with using the database user by setting the column like this:

:NEW.Created_User := USER;

In Application Express applications that’s not enough when you have an authentication scheme based on a user table. In that case you would like to see the application user that inserted or updated the record in you audit.
A simple and smart way to do this is by using the v() construction in your trigger like this:

:NEW.Created_User := nvl(v('APP_USER'),USER);

When you use this kind of code in your triggers, the audit user is filled with the user that was logged into the application. But when the record is altered directly on the database, you will see the database user.

Application Express Listener available

Oracle has put the Application Express Listener up for download. It’s an early adopters release, so it’s not supported, but I think it’s still worth giving a try.

The download is available at: http://www.oracle.com/technology/products/database/application_express/html/apex_listener_download.html

I think it’s a very significant change in Apex. This allows developers to use their existing web server (like Tomcat or Weblogic), instead of Oracle HTTP Server/mod_plsql or the XDB HTTP protocol server/embedded PL/SQL gateway.

Read the Installation Guide for more information.

Javascript confirmation popup in APEX

In my current project I’ve been trying to get a nice popup message to show when a user presses a button.
This can be done in several ways, of which most are cumbersome or hard to understand.

The easiest and (in my opinion) prettiest way is using a javascript popup. When Ok is pressed, the button performs it’s normal function. When Cancel is pressed, the focus returns to the page without submitting.
The only thing needed is a line of code on the URL target of the submit button.

If you want the button to submit when Ok in the popup is pressed, your code will look like this:

javascript:{if (confirm('Confirmation Message')) doSubmit('<button name>');}

If you want the button to redirect to a different page using a URL when Ok is pressed, you can use this code instead:

javascript:{if (confirm('Confirmation Message')) redirect('f?p=&APP_ID.:&APP_PAGE_ID.:&APP_SESSION.');}