A few hours after my previous post, APEX 4.0 EA2 hit the air.
The url to this new version of APEX 4.0 is still the same: http://tryapexnow.com/apex/
I'll start some proper testing next week, but if you already want to read what is changed, you find more information on Joel Kallman's post.
I created this Blog to share my knowledge especially in Oracle Application Express (APEX) and my feelings ...
Saturday, February 27, 2010
Friday, February 26, 2010
APEX 4.0 EA2 (with Websheets) very very close...
The APEX Development likes to hint and build up our expectations ;-)
It looks like APEX 4.0 Early Adopter 2 is almost there... a couple of hours? a couple of days?
Fact is that Joel is doing some tests on the EA2 build and reading Patrick's tweets says enough!
I really look forward to that release as it should have Websheets (and the DataGrids?) in and a ton of other new features! Keep watching the blogs...
It looks like APEX 4.0 Early Adopter 2 is almost there... a couple of hours? a couple of days?
Fact is that Joel is doing some tests on the EA2 build and reading Patrick's tweets says enough!
I really look forward to that release as it should have Websheets (and the DataGrids?) in and a ton of other new features! Keep watching the blogs...
APEX Listener EA2 with native Excel Upload
Kris Rice blogged about the new version of the APEX Listener here and here. The APEX Listener will become the preferred way of connecting to APEX (before Apache and the Embedded PL/SQL Gateway). If you are not familiar with the APEX Listener, you find more information here.
To install the APEX Listener EA2 (0.10.56.22.08) on my Oracle Linux VM I followed these steps:
To install the APEX Listener EA2 (0.10.56.22.08) on my Oracle Linux VM I followed these steps:
- Download Java SE JDK (before I used the JRE, but Kris told me the debugger doesn't work with that as you need the JDK for that part of the code)
As a side note; now that Oracle and Sun are together, that website already has the "Oracle look". I wasn't expecting that so fast, but it's nice. The theme looks very similar to the APEX 4.0 Theme 1.
- Become root: su
- Go to the path you want java to install: cd /usr/java
- Copy the file you downloaded in that directory
- Change the permission of the file you downloaded to be executable: chmod a+x jdk-6u18-linux-i586-rpm.bin
- Start the installation process: ./jdk-6u18-linux-i586-rpm.bin
If that is done you should see a screen like this and a directory jdk1.6.0_18 should exist: - You find a complete guide of installing Java here.
- Next you need to download and install the APEX Listener
- The APEX Listener needs a webserver, depending the webserver you need to follow different steps. You find a complete guide how to install the webserver and the APEX Listener here.
- I already had Apache Tomcat installed on my VM, so I went with that and just followed the installation notes.
- Basically copy a war file to the webserver and change the config file
- I was interested to test the new Excel upload feature, to get to work I added following line to the config file (apache-tomcat/temp/apex/apex-config.xml)
true - Finally run APEX via the port of the Listener and create a new page with a File Browse item, a button and a report that queries the collection.
- That's it!
select *P1_EXCEL_FILE is the item name of the File Browse Item. The other thing to remember is to call your button XLS2COLLECTION or have that as the request value.
from apex_collections
where collection_name = 'P1_EXCEL_FILE'
Get me a Suite at ODTUG!
If you are going to ODTUG this year and you want me to do a favor... Put in my name "Dimitri Gielis" in "How did you hear about the conference?" when you register.
The person who has the most "referrals" gets a Suite at the Marriott Wardman Park!
I'm not sure about the size of that Suite, but if it's big enough and I win, I'll give a party in the suite and everybody is invited to come! We could even start the "APEX Meetup" in the Suite and have already a couple of drinks before we go further!
Hopefully the mini bar is big enough and has enough drinks, if not there are other ways to get drinks in that room I guess :-)
LOL
Anyway APEX will be big at ODTUG again... in fact it will be the biggest APEX event this year! Not to miss especially with the upcoming 4.0 release. See you there...
The person who has the most "referrals" gets a Suite at the Marriott Wardman Park!
I'm not sure about the size of that Suite, but if it's big enough and I win, I'll give a party in the suite and everybody is invited to come! We could even start the "APEX Meetup" in the Suite and have already a couple of drinks before we go further!
Hopefully the mini bar is big enough and has enough drinks, if not there are other ways to get drinks in that room I guess :-)
LOL
Anyway APEX will be big at ODTUG again... in fact it will be the biggest APEX event this year! Not to miss especially with the upcoming 4.0 release. See you there...
Thursday, February 25, 2010
Branches with Conditions When Button Pressed - be careful
Consider this example; we have a typical APEX Report with Form.
When we click on the Create button we come into the Form and normally you would see just one Create button. If you hit that button you get back into the Report.
In some projects I use a "Create and Create Another" button as people need to enter more records at a time and this way they stay in the Form when they hit that button.
So how do you create such a button? I typically do:
- copy the Create button
- add a Branch that has as Target Page the same page and add a condition to fire on that "Create and Create Another" button. Be sure to put that Branch (sequence) before the unconditional branch.
If you test that Form and you hit on the "Create and Create Another button" you stay on that page. Works great... so you think you are done, however if you hit the Create button you want to go back to the report (like it was before). But this doesn't work anymore, it stays on the same page too. So for some reason, although the Branch has a condition to fire on the "Create and Create Another" button, it ALSO fires on the normal Create button.
After having a closer look at what APEX is doing, it turns out that APEX is using the Request value or incase of a button, the button name. As the buttons have the same name (the condition of) the Branch fires for both buttons.
If you use the standard "Automatic Row Processing (DML)" to handle the insert/update/delete it requires the Request value to be a specific one. In case of Insert you have following options: INSERT, CREATE, CREATE_AGAIN, CREATEAGAIN
So the solution to the above problem is to rename your "Create and Create Another" button to e.g. CREATE_AGAIN
I found it confusing as the select box let you think it's a condition on a button. The behaviour is the same in APEX 3.x and 4.0.
I would suggest to the APEX team to only show the request values or make it so the branch really knows which button got clicked.
When we click on the Create button we come into the Form and normally you would see just one Create button. If you hit that button you get back into the Report.
In some projects I use a "Create and Create Another" button as people need to enter more records at a time and this way they stay in the Form when they hit that button.
So how do you create such a button? I typically do:
- copy the Create button
- add a Branch that has as Target Page the same page and add a condition to fire on that "Create and Create Another" button. Be sure to put that Branch (sequence) before the unconditional branch.
If you test that Form and you hit on the "Create and Create Another button" you stay on that page. Works great... so you think you are done, however if you hit the Create button you want to go back to the report (like it was before). But this doesn't work anymore, it stays on the same page too. So for some reason, although the Branch has a condition to fire on the "Create and Create Another" button, it ALSO fires on the normal Create button.
After having a closer look at what APEX is doing, it turns out that APEX is using the Request value or incase of a button, the button name. As the buttons have the same name (the condition of) the Branch fires for both buttons.
If you use the standard "Automatic Row Processing (DML)" to handle the insert/update/delete it requires the Request value to be a specific one. In case of Insert you have following options: INSERT, CREATE, CREATE_AGAIN, CREATEAGAIN
So the solution to the above problem is to rename your "Create and Create Another" button to e.g. CREATE_AGAIN
I found it confusing as the select box let you think it's a condition on a button. The behaviour is the same in APEX 3.x and 4.0.
I would suggest to the APEX team to only show the request values or make it so the branch really knows which button got clicked.
Monday, February 22, 2010
APEX 4.0: Dynamic Actions - Part 2
If you are interested in a Standard Dynamic Action in APEX 4.0, you should read this blog post.
In this post I'll cover how to create an Advanced Dynamic Action. 'Advanced' allows you to create more complex native dynamic actions such as 'Add Class' or 'Set Value' and also plug-in dynamic actions, that are installed in your application.
In this example I want to retrieve the department for a given employee.
In the Application Builder you find a new region (tree record) called "Dynamic Actions". Right click on that and click Create
In this post we select Advanced, as we want to create an Advanced Dynamic Action, that does more than just show/hide or enable/disable.
Give the dynamic action a meaningfull name e.g. Refresh Employee List
Tell the dynamic action when it needs to fire. In this case I want that something happens whenever I change from Employee (P25_EMPNO).
Select the action you want to do. In this example I want to set the value of an item (the department) for an employee. The value can be retrieved in a number of ways, but in this case I search the department with a SQL Statement.
Finally you tell the dynamic action what item it needs to update. What you want to update can also be a Region, a DOM object or a JQuery Selector.
Hit the Create button and you are good to go! Not a single line of Javascript to get this done!
You see the example in action here.
If you want to combine different actions in one dynamic action, that is possible too. You can add multiple actions when the condition is true or false. (See True/False Actions)
There are many Actions you can chose from. If you imported or created Dynamic Actions plugins, you find them in there too.
Dynamic Actions are VERY VERY powerful and have an unlimited amount of possibilities. Although the above is classified as an "Advanced Dynamic Action" it's still a fairly simple example. In Part 3 I'll show how to combine plugins with dynamic actions to be even more powerful!
The key reasons why I like Dynamic Actions so much:
In this post I'll cover how to create an Advanced Dynamic Action. 'Advanced' allows you to create more complex native dynamic actions such as 'Add Class' or 'Set Value' and also plug-in dynamic actions, that are installed in your application.
In this example I want to retrieve the department for a given employee.
In the Application Builder you find a new region (tree record) called "Dynamic Actions". Right click on that and click Create
In this post we select Advanced, as we want to create an Advanced Dynamic Action, that does more than just show/hide or enable/disable.
Give the dynamic action a meaningfull name e.g. Refresh Employee List
Tell the dynamic action when it needs to fire. In this case I want that something happens whenever I change from Employee (P25_EMPNO).
Select the action you want to do. In this example I want to set the value of an item (the department) for an employee. The value can be retrieved in a number of ways, but in this case I search the department with a SQL Statement.
Finally you tell the dynamic action what item it needs to update. What you want to update can also be a Region, a DOM object or a JQuery Selector.
Hit the Create button and you are good to go! Not a single line of Javascript to get this done!
You see the example in action here.
If you want to combine different actions in one dynamic action, that is possible too. You can add multiple actions when the condition is true or false. (See True/False Actions)
There are many Actions you can chose from. If you imported or created Dynamic Actions plugins, you find them in there too.
Dynamic Actions are VERY VERY powerful and have an unlimited amount of possibilities. Although the above is classified as an "Advanced Dynamic Action" it's still a fairly simple example. In Part 3 I'll show how to combine plugins with dynamic actions to be even more powerful!
The key reasons why I like Dynamic Actions so much:
- it's a declarative way of creating more interactive websites
- it allows people without Javascript experience to create more dynamic websites
- it allows more experienced people to get the job done faster
- the dynamic content is more structured and always in the same format
- the dynamic content can be found at one place, directly in the App Builder (not searching in different javascript files anymore!)
- the javascript is more maintainable (and possible more performant and more secure)
Tuesday, February 16, 2010
Bandwidth problem? investigate your log files
On some of my APEX sites I seem to have a bandwidth problem. Not that the sites become slow, they just eat so much bandwidth without reason.
We set a limit on the bandwidth a site can take a month, just so we are in control about the hosting/bandwidth fees we need to pay. If for some reason we see the site is eating a lot of bandwidth (which we didn't expect) we enable full logging for that site.
Next we investigate the logs. You can read the raw data, but you can compare that with reading a tracefile. You can understand things if you look closely at it, but it's not very user friendly, so for tracefiles you use tkprof to get a more human readable output. Same counts for the Apache logs, there are programs that can format that in a better way. I used AWStats to convert my logs to a nice overview. The result looks very much like statcounter stats (without the chart).
Out of these logs you can get very valuable information about your customers, not only do you see how many people you have per month/day/hour or which IP is accessing your site, you also get statistics about the platform they use.
For me it was interesting to see that for that site Windows and IE are less used than what I expected.
Further on in the log files you see how people reached your site; which keywords they used in a search engine or from which other site they came and how long they stayed on your site.
For me most important was to get an insight where my bandwidth went to. It didn't take me long to see that Robots/Spiders where the problem! It's unbelievable that Yahoo's bot is eating so much bandwidth!
To solve this issue you need to create a robots.txt with some parameters like specified in this link.
Looking at your stats and investigating the full logs can be very useful from time to time...
We set a limit on the bandwidth a site can take a month, just so we are in control about the hosting/bandwidth fees we need to pay. If for some reason we see the site is eating a lot of bandwidth (which we didn't expect) we enable full logging for that site.
Next we investigate the logs. You can read the raw data, but you can compare that with reading a tracefile. You can understand things if you look closely at it, but it's not very user friendly, so for tracefiles you use tkprof to get a more human readable output. Same counts for the Apache logs, there are programs that can format that in a better way. I used AWStats to convert my logs to a nice overview. The result looks very much like statcounter stats (without the chart).
Out of these logs you can get very valuable information about your customers, not only do you see how many people you have per month/day/hour or which IP is accessing your site, you also get statistics about the platform they use.
For me it was interesting to see that for that site Windows and IE are less used than what I expected.
Further on in the log files you see how people reached your site; which keywords they used in a search engine or from which other site they came and how long they stayed on your site.
For me most important was to get an insight where my bandwidth went to. It didn't take me long to see that Robots/Spiders where the problem! It's unbelievable that Yahoo's bot is eating so much bandwidth!
To solve this issue you need to create a robots.txt with some parameters like specified in this link.
Looking at your stats and investigating the full logs can be very useful from time to time...
Supported by hosting
Wednesday, February 10, 2010
Evangelize APEX in Europe
More and more Oracle User Groups include APEX tracks now.
This year I won't go to IOUG Collaborate, instead I'll present at some other conferences in Europe.
My schedule for the next 3 months
I'll also talk on some customer events and do the APEX trainings in Brussels, Belgium.
So there is a chance we meet eachother in the next weeks :-)
This year I won't go to IOUG Collaborate, instead I'll present at some other conferences in Europe.
My schedule for the next 3 months
- March 23: OBUG Connect 2010 in the Netherlands
- March 30: OGh APEX dag in the Netherlands
- April 23-25: Bulgarian Oracle User Group
- May 18-19: Swedish Oracle User Group
I'll also talk on some customer events and do the APEX trainings in Brussels, Belgium.
So there is a chance we meet eachother in the next weeks :-)
Tuesday, February 09, 2010
APEX at OBUG Connect 2010
In November last year I blogged about a new initiative to launch an APEX SIG in the Benelux.
The first results of that you'll see at the biggest Oracle User Group event in the Benelux, called OBUG Benelux Connect. This year it's held in Arnhem, the Netherlands on Tuesday March 23. Every year it changes location between Belgium and the Netherlands.
Where last year there were zero APEX sessions, this year Oracle Application Express became a focus area! There are three APEX sessions planned.
11.30 - 12.15 From subsidy request to payment: fast and flexible with Oracle APEX by Erik van Dongen and Arlette Koeijers is a case study of an app at the Ministry of Agriculture.
14.30 - 15.15 Defending the shores with Oracle Application Express by Arie in't Veld and Bart Meijer is another case study where previous Excel was used and which got replaced by APEX and BI Publisher to print PDF's.
15.45 - 16.30 APEX 4.0 by Dimitri Gielis. I'll speak about the biggest differences in developing in APEX 4.0 compared to earlier versions. Of course I'll demo the coolest APEX 4.0 new features!
You find all information in the program magazine of OBUG Connect 2010 (pdf) or online on the OBUG site.
Hope to see you there!
The first results of that you'll see at the biggest Oracle User Group event in the Benelux, called OBUG Benelux Connect. This year it's held in Arnhem, the Netherlands on Tuesday March 23. Every year it changes location between Belgium and the Netherlands.
Where last year there were zero APEX sessions, this year Oracle Application Express became a focus area! There are three APEX sessions planned.
11.30 - 12.15 From subsidy request to payment: fast and flexible with Oracle APEX by Erik van Dongen and Arlette Koeijers is a case study of an app at the Ministry of Agriculture.
14.30 - 15.15 Defending the shores with Oracle Application Express by Arie in't Veld and Bart Meijer is another case study where previous Excel was used and which got replaced by APEX and BI Publisher to print PDF's.
15.45 - 16.30 APEX 4.0 by Dimitri Gielis. I'll speak about the biggest differences in developing in APEX 4.0 compared to earlier versions. Of course I'll demo the coolest APEX 4.0 new features!
You find all information in the program magazine of OBUG Connect 2010 (pdf) or online on the OBUG site.
Hope to see you there!
Monday, February 01, 2010
Oracle APEX Training in Brussels
This year we'll do more Oracle Application Express trainings. You find the complete schedule on our new site.
Both John and I will travel more in Europe to deliver these APEX trainings, but especially the first couple of months, personally I will concentrate more on the BeNeLux. I really want to see the APEX development increasing in this part of the world.
The APEX trainings for March will take place in Brussels, Belgium. And where before we did more advanced trainings, now we also scheduled beginner trainings!
Introduction to Oracle APEX I (8-10 MARCH 2010 - 3 days)
Introduction to Oracle Application Express is designed for those who have little to no interaction with APEX or for those looking to formalize their understanding of APEX. This course starts out with a review of the architecture of APEX, how it works, and some example projects that have been built with APEX. It then describes the Utilities and SQL Workshop facilities of APEX. The bulk of the class is spent on the application builder. Most of the core components are covered in Intro to APEX I, with hands-on exercises used to reinforce the concepts.
Introduction to Oracle APEX II (11-12 MARCH 2010 - 2 days)
Introduction to Oracle APEX II is intended as a follow-on course to Intro to Oracle APEX I, but can also be taught independently. It starts by explaining how JavaScript and Ajax work in the APEX environment. Students will build working examples using both technologies. It then covers security features of APEX, including new features introduced in APEX 3.2. Next, it covers APEX user interface design. Students will import a custom theme and add additional templates. Basic UI concepts will also be discussed. Intro to APEX II also covers the basics of performance tuning APEX applications within the SQL, PL/SQL and APEX context. Intro to APEX II concludes with a discussion of APEX best practices and how they can be altered to fit specific customer environments.
Advanced Oracle APEX (15-17 MARCH 2010 - 3 days)
Beyond the basics, there is a world that will you to create truly great applications. Applications that rival any other language or technology.
Advanced UI techniques, Error Management, Printing, Security and interactivity (AJAX and JQuery) are just a few of the topics covered in our Advanced APEX course. If you're ready to move beyond wizard driven applications, then this course is for you.
You can find more information and register for the classes by clicking on the titles in this blog post. If you are travelling, on the right hand side you find some hotels that are close to the place the training is held. Lets spread the APEX word and hope to see you soon!
Both John and I will travel more in Europe to deliver these APEX trainings, but especially the first couple of months, personally I will concentrate more on the BeNeLux. I really want to see the APEX development increasing in this part of the world.
The APEX trainings for March will take place in Brussels, Belgium. And where before we did more advanced trainings, now we also scheduled beginner trainings!
Introduction to Oracle APEX I (8-10 MARCH 2010 - 3 days)
Introduction to Oracle Application Express is designed for those who have little to no interaction with APEX or for those looking to formalize their understanding of APEX. This course starts out with a review of the architecture of APEX, how it works, and some example projects that have been built with APEX. It then describes the Utilities and SQL Workshop facilities of APEX. The bulk of the class is spent on the application builder. Most of the core components are covered in Intro to APEX I, with hands-on exercises used to reinforce the concepts.
Introduction to Oracle APEX II (11-12 MARCH 2010 - 2 days)
Introduction to Oracle APEX II is intended as a follow-on course to Intro to Oracle APEX I, but can also be taught independently. It starts by explaining how JavaScript and Ajax work in the APEX environment. Students will build working examples using both technologies. It then covers security features of APEX, including new features introduced in APEX 3.2. Next, it covers APEX user interface design. Students will import a custom theme and add additional templates. Basic UI concepts will also be discussed. Intro to APEX II also covers the basics of performance tuning APEX applications within the SQL, PL/SQL and APEX context. Intro to APEX II concludes with a discussion of APEX best practices and how they can be altered to fit specific customer environments.
Advanced Oracle APEX (15-17 MARCH 2010 - 3 days)
Beyond the basics, there is a world that will you to create truly great applications. Applications that rival any other language or technology.
Advanced UI techniques, Error Management, Printing, Security and interactivity (AJAX and JQuery) are just a few of the topics covered in our Advanced APEX course. If you're ready to move beyond wizard driven applications, then this course is for you.
You can find more information and register for the classes by clicking on the titles in this blog post. If you are travelling, on the right hand side you find some hotels that are close to the place the training is held. Lets spread the APEX word and hope to see you soon!