<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5742906279879067605</id><updated>2012-01-12T18:43:37.893+01:00</updated><category term='pl/sql'/><category term='INSTEAD OF TRIGGER'/><category term='mod_plsql'/><category term='IE'/><category term='session management'/><category term='APEX'/><category term='Forms'/><category term='kaleidoscope'/><category term='odtug'/><category term='ORA-01756: quoted string not properly terminated'/><category term='ExtJS'/><category term='DHTMLX'/><title type='text'>Oracle &amp; Apex Geekery</title><subtitle type='html'>And another thing ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-6645671984987016950</id><published>2011-03-25T01:17:00.005+01:00</published><updated>2011-03-25T13:29:36.247+01:00</updated><title type='text'>OGh APEX Day 2011</title><content type='html'>&lt;p&gt;Due to the overwhelming number of registrations (250+ participants, entirely sold-out) the &lt;a href="http://www.ogh.nl" target="_blank"&gt;OGh Apex Day 2011&lt;/a&gt; “Mini” congress had to be relocated to a different, larger location. This states the enormous interest in APEX in the Netherlands. Oracle Application Express is hot in NL. Another reason for the large number of participants (mainly developers) must have been the subjects of the presentations and the lineup of well known and respected (international) speakers: Dimitri Gielis &amp;amp; John Scott, aka the APEX Evangelists, where scheduled for 3 (!) presentations; Hilary Farrel represented the Oracle APEX development team; Roel Hartman and Iloon Ellen Wolf, both known for their high quality APEX presentations; Peter Raganitsch, APEX expert from Vienna and developer of the OpenSource Framework ApexLib.&lt;/p&gt;&lt;h3&gt;Line-up&lt;/h3&gt;&lt;p&gt;The OGh Apex Day 2011 was kicked off by Tony Andrews en Nigel Blair from Northgate (UK), presenting their experience with migrating a large Oracle Forms application to APEX. It was very interesting to hear, that moving from traditional Forms to browser-based increased customer satisfaction and actually earned Northgate new customers. 1500 forms+ thousands of users: who said APEX isn’t scalable?&lt;/p&gt;&lt;p&gt;Next Hilary Farrel from Oracle revealed some functionality planned (you probably know the usual Oracle disclaimer sheet) for release 4.1. Most of it you will find in Oracle’s SOD. I really liked the APEX &amp;amp; jQuery Mobile demo. Although Hillary mentioned, that jQuery Mobile will only be included with APEX 4.1 if the production release will be available by then. Maybe will hear a release date for jQuery Mobile production from the jQuery Conference in April. Maybe this could be an indication for a release date of APEX 4.1?!&lt;/p&gt;&lt;p&gt;Last session before lunch: the first ever duo-presentation of the two &lt;a href="http://www.apex-evangelists.com" target="_blank"&gt;APEX Evangelists&lt;/a&gt;, John Scott and Dimitri Gielis, demonstrating the AE-way of handling an APEX project. Preconfigured plug-and-play installations, version control and an integrated custom issue tracking (APEX-) application: very impressive. The whole approach showed just how experienced AE is in executing APEX projects.    &lt;br /&gt;
During the presentation Dimitri and Scott revealed the latest AE project : &lt;a href="http://FoogleTwit.com" target="_blank"&gt;FoogleTwit&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;After lunch I had to choose from 3 parallel tracks: &lt;/p&gt;&lt;h5&gt;Core APEX&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;APEX Translation Mechanism (Peter Raganitsch)&lt;/li&gt;
&lt;li&gt;Building APEX 4 Plugins (John Scott)&lt;/li&gt;
&lt;li&gt;Customizing Apex Templates &amp;amp; Themes (Christian Rokitta; Yes, that’s me!)&lt;/li&gt;
&lt;/ul&gt;&lt;h5&gt;APEX and “?”&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;APEX and Security (Iloon Ellen Wolf)&lt;/li&gt;
&lt;li&gt;Charting and Dashboards (Roel Hartman)&lt;/li&gt;
&lt;li&gt;APEX and Locator/Spacial – A Success Story (Dimitri Gielis)&lt;/li&gt;
&lt;/ul&gt;&lt;h5&gt;APEX at Work&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Eneco (Jasper Alblas)&lt;/li&gt;
&lt;li&gt;Province of Zeeland (Hans Quist)&lt;/li&gt;
&lt;li&gt;golfscores.eu (Hans Wijnacker)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I decided to listen to Peter’s and John’s Core APEX presentations.&lt;/p&gt;&lt;p&gt;&lt;a href="http://http://www.click-click.at" target="_blank"&gt;Peter Raganitsch&lt;/a&gt; demonstrated the possibilities of translating APEX applications into different languages. It became clear, translation mechanism in APEX is not trivial and does have some pitfalls.&lt;/p&gt;&lt;p&gt;&amp;#160; &lt;br /&gt;
John walked the audience through the process of developing Plugins for APEX. Some of the examples where extraordinary educational and useful (the “Hello World” Plugin was just amazing). In fact, John dit such a good job, he got an extra 15 min from his audience to teach and demo.    &lt;br /&gt;
&lt;/p&gt;&lt;p&gt;The last presentation of this OGh APEX Day 2011 was my personal highlight: Myself speaking about Templates and Themes. I’m not talking about the quality of the presentation - that’s for others to decide - but the experience to be allowed to speak to a large audience.&lt;/p&gt;&lt;p&gt;Many thanks to the OGh organization for this excellent congress and for the opportunity to present.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-6645671984987016950?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/6645671984987016950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2011/03/ogh-apex-day-2011.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/6645671984987016950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/6645671984987016950'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2011/03/ogh-apex-day-2011.html' title='OGh APEX Day 2011'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-9018766760049032059</id><published>2011-01-03T14:46:00.003+01:00</published><updated>2011-01-03T15:20:06.567+01:00</updated><title type='text'>Book Review: Oracle APEX 4.0 Cookbook</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_cFVy-bGzGXc/TSHTKxm9C2I/AAAAAAAAAGE/k9QN8sljFgU/s1600-h/masterchef%20cookbook%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 20px 20px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="masterchef cookbook" border="0" alt="masterchef cookbook" align="left" src="http://lh5.ggpht.com/_cFVy-bGzGXc/TSHTLb4ubcI/AAAAAAAAAGI/ljD-x0vtGYs/masterchef%20cookbook_thumb%5B1%5D.jpg?imgmax=800" width="244" height="216" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Title: &lt;a href="https://www.packtpub.com/oracle-apex-4-0-cookbook/book?utm_source=rokit.nl&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_006065" target="_blank"&gt;Oracle APEX 4.0 Cookbook&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Language : English      &lt;br /&gt;
Paperback : 328 pages [ 235mm x 191mm ]       &lt;br /&gt;
Release Date : December 2010       &lt;br /&gt;
ISBN : 1849681341       &lt;br /&gt;
ISBN 13 : 978-1-84968-134-6       &lt;br /&gt;
Author(s) : &lt;/strong&gt;&lt;a href="https://www.packtpub.com/authors/profiles/michel-van-zoest"&gt;&lt;strong&gt;Michel van Zoest&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a href="https://www.packtpub.com/authors/profiles/marcel-van-der-plas"&gt;&lt;strong&gt;Marcel van der Plas&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;A cookbook is a book that contains information on cooking. It typically contains a collection of recipes, and may also include information on ingredient origin, freshness, selection and quality. - &lt;a href="http://en.wikipedia.org/wiki/Cookbook"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h3&gt;&lt;b&gt;Entrée&lt;/b&gt;&lt;/h3&gt;&lt;p&gt;The APEX 4 EA release got available almost exactly a year ago. What could be a more appropriate anniversary present than a book entirely dedicated to and based on APEX version 4? I was very much looking forward to this book release, as this is one of the first APEX 4 books and the title suggests that there will be some recipes with new feature as ingredients.&lt;/p&gt;&lt;h3&gt;&lt;b&gt;Main Course&lt;/b&gt;&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;In formal dining, a well-planned main course can function as a sort of gastronomic apex or climax. In such a scheme, the preceding courses are designed to prepare for and lead up to the main course in such a way that the main course is anticipated and, when the scheme is successful, increased in its ability to satisfy and delight the diner. - &lt;a href="http://en.wikipedia.org/wiki/Main_course"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The &lt;a href="https://www.packtpub.com/oracle-apex-4-0-cookbook/book?utm_source=rokit.nl&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_006065" target="_blank"&gt;Oracle APEX 4.0 Cookbook&lt;/a&gt; combines the well known “Create my fist APEX Application” tutorials with detailed step-by-step guides through new APEX functionality. It makes this book suitable for beginning APEX developers. For more advanced developers it is a good reference while working with functionality, introduced in APEX 4.0.&lt;/p&gt;&lt;p&gt;If you are new to APEX, you can start learning APEX by working through the first chapter (Creating a Basic APEX Application). If you have read Oracle’s “2 Day + Application Express Developer’s Guide” (as a beginning APEX Developer you should have!), some of the recipes will look familiar. Both, the book and the 2+Day Guide will take you by the hand while making your first steps with APEX. The book’s introduction does cover more aspects but compared to the 2+Day Guide, the Guide offers more explanation and background. More advanced user’s developers will probably use the recipes when they need it, or browse the chapters instead of working through the whole book chapter by chapter, just as you would do with an actual cookbook.&lt;/p&gt;&lt;p&gt;Each chapter is organized like an OTN Oracle-by-Example articles and one can choose between try-to-understand or just get-it-done-by-following-the-instructions approach:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Getting ready - prerequisites &lt;/li&gt;
&lt;li&gt;How to do it… - step-by-step instructions &lt;/li&gt;
&lt;li&gt;How it works… - short explanation &lt;/li&gt;
&lt;li&gt;There’s more – suggestions and explanation on extending or varying the recipes &lt;/li&gt;
&lt;li&gt;See also – reference to related recipes or documentation &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;All together, this book contains 80+ APEX recipes, varying in complexity ranging from “Creating a simple report” to “Setting up version control with APEX and SVN”. The examples are well selection and cover most of the aspects one has to learn when developing with APEX.&lt;/p&gt;&lt;h3&gt;&lt;b&gt;Dessert&lt;/b&gt;&lt;/h3&gt;&lt;p&gt;This book is a great companion when developing applications with APEX. The recipe’s format helps you to take the necessary steps to &lt;b&gt;get your job done&lt;/b&gt;. In some cases I would wish some more detailed information in the “How it works…” sections. Much of the recipes are not new. Lots of information and How-To’s have been published on &lt;a href="http://www.apexblogs.info/"&gt;blogs&lt;/a&gt; and downloadable documents on the internet since APEX 4.0 has been released, but it’s very convenient to have them in one place in a book, nicely arranged by subject.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Have a look at the &lt;a href="https://www.packtpub.com/toc/oracle-apex-40-cookbook-table-contents" target="_blank"&gt;Table of Contents&lt;/a&gt; on the publisher’s site, to see if it contains your favorite dishes.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_cFVy-bGzGXc/TSHal81WD_I/AAAAAAAAAGo/pcTm1I1BCW8/s1600-h/masterchef%5B6%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px 100px 60px 0px; display: inline; border-top: 0px; border-right: 0px" title="masterchef" border="0" alt="masterchef" align="right" src="http://lh3.ggpht.com/_cFVy-bGzGXc/TSHTLwhOJjI/AAAAAAAAAGY/1W6u4gBOUxQ/masterchef_thumb%5B6%5D.jpg?imgmax=800" width="242" height="166" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Having written this “&lt;a href="https://www.packtpub.com/oracle-apex-4-0-cookbook/book?utm_source=rokit.nl&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_006065" target="_blank"&gt;Oracle APEX 4.0 Cookbook&lt;/a&gt;”    &lt;br /&gt;
Marcel and Michel sure deserve the title of APEX &lt;a href="mailto:M@sterchefs"&gt;M@sterchefs&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_cFVy-bGzGXc/TSHal81WD_I/AAAAAAAAAGs/Gy4h_lOjg40/s1600-h/masterchef%5B1%5D.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_cFVy-bGzGXc/TSHal81WD_I/AAAAAAAAAGs/Gy4h_lOjg40/s1600-h/masterchef%5B1%5D.jpg"&gt;&amp;#160;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-9018766760049032059?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/9018766760049032059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2011/01/book-review-oracle-apex-40-cookbook.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/9018766760049032059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/9018766760049032059'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2011/01/book-review-oracle-apex-40-cookbook.html' title='Book Review: Oracle APEX 4.0 Cookbook'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_cFVy-bGzGXc/TSHTLb4ubcI/AAAAAAAAAGI/ljD-x0vtGYs/s72-c/masterchef%20cookbook_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-4756892816255869636</id><published>2010-12-10T15:12:00.001+01:00</published><updated>2010-12-14T16:04:27.344+01:00</updated><title type='text'>ODTUG Kaleidoscope 2011</title><content type='html'>&lt;p&gt;&lt;a title="Join the Cool Kids at Kscope11" href="http://www.kscope11.com/"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="kscope11" border="0" alt="kscope11" src="http://lh3.ggpht.com/_cFVy-bGzGXc/TQI1T4cBUcI/AAAAAAAAAD8/W3Sv6Wq9u4A/kscope11%5B6%5D.jpg?imgmax=800" width="544" height="155" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;1 ½ years ago I went to Monterey to visit the ODTUG Kaleidoscope 2009 conference. I was very impressed with the presenters, content and great atmosphere of the event. After the conference, on my way home, I promised myself to come back to KScope, as a presenter, if possible. This year is the second time I submitted an abstract. And ...&lt;/p&gt;  &lt;p&gt;This week I received an email from the ODTUG confirming that my abstract has been accepted for presentation at &lt;a href="http://www.kscope11.com/"&gt;ODTUG KScope11&lt;/a&gt;, June 26-30, in Long Beach, CA.&lt;/p&gt;  &lt;p&gt;I feel very honored and happy to get this opportunity.&lt;/p&gt;  &lt;h3&gt;&lt;font color="#0080ff"&gt;&lt;a href="http://www.kscope11.com/"&gt;Join the Cool Kids at Kscope11&lt;/a&gt;&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;Whether you’re interested in my presentation or not, if you are into Oracle Development, have some training time and budget left: Come to Long Beach next year and participate in this unique event. &lt;a href="http://www.kscope11.com/"&gt;Kscope11&lt;/a&gt; offers:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;More than 200 technical sessions on Application Express, BI and Oracle EPM, Database Development, Oracle Fusion Middleware, MySQL&lt;/li&gt;    &lt;li&gt;Five all day symposiums - No extra charge&lt;/li&gt;    &lt;li&gt;Lunch and learn sessions with Oracle ACE Directors&lt;/li&gt;    &lt;li&gt;Plenty of time to meet and talk with the experts and other participants&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;&lt;font color="#0080ff"&gt;My Abstract&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;For who is interested, here is the abstract of my presentation:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Presentation Title:&lt;/strong&gt;&amp;#160; APEX Face/Off - Designing a GUI with APEX Templates and Themes     &lt;br /&gt;&lt;strong&gt;Session Type:&lt;/strong&gt;&amp;#160; 1 Hour Presentation     &lt;br /&gt;&lt;strong&gt;Abstract:&lt;/strong&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A practical guide to the concept of APEX themes and templates.    &lt;br /&gt;Today’s internet sites are often a blend of websites and web applications. Web application interface design is, at its core, Web design. Oracle Application Express provides facilities to customize and manage your application design.     &lt;br /&gt;This presentation is for Oracle APEX developers who wish to learn how to provide their applications with a professional looking custom GUI design using web standards HTML and CSS together with APEX templates and Themes.     &lt;br /&gt;It will outline the skills, tooling and steps necessary to create a custom APEX GUI design using the concept of APEX templates and themes.     &lt;br /&gt;The presentation focuses on the practical aspects, from graphical GUI design to translating and integrating this design into APEX. It will be escorted by live, visual examples, suggest &amp;quot;Best Practices&amp;quot; and discuss the limitations of APEX.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I hope to see you in Long Beach next year.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-4756892816255869636?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/4756892816255869636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2010/12/odtug-kaleidoscope-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/4756892816255869636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/4756892816255869636'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2010/12/odtug-kaleidoscope-2011.html' title='ODTUG Kaleidoscope 2011'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_cFVy-bGzGXc/TQI1T4cBUcI/AAAAAAAAAD8/W3Sv6Wq9u4A/s72-c/kscope11%5B6%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-7579391254989593308</id><published>2010-11-24T17:02:00.002+01:00</published><updated>2011-01-10T13:02:01.639+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJS'/><title type='text'>Pre-Review: Oracle Application Express 4.0 with Ext JS : RAW</title><content type='html'>&lt;p&gt;&lt;a href="https://www.packtpub.com/oracle-application-express-4-0-with-ext-js/book?utm_source=rokitta.blogspot.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_005443"&gt;&lt;img style="border-right-width: 0px; margin: 6px 20px 0px 6px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1063EN_MockupCover" border="0" alt="1063EN_MockupCover" align="left" src="http://lh5.ggpht.com/_cFVy-bGzGXc/TO05vgQ9bgI/AAAAAAAAAD4/7DeiEbwfwYI/1063EN_MockupCover%5B1%5D.jpg?imgmax=800" width="222" height="268" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Language : English      &lt;br /&gt;
Paperback : 320 pages       &lt;br /&gt;
Release Date : March 2011       &lt;br /&gt;
ISBN : 1849681066       &lt;br /&gt;
ISBN 13 : 978-1-84968-106-3       &lt;br /&gt;
Author : Mark Lancaster&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;March 2011 the book “&lt;a href="https://www.packtpub.com/oracle-application-express-4-0-with-ext-js/book?utm_source=rokitta.blogspot.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_005443"&gt;Oracle Application Express 4.0 with Ext JS&lt;/a&gt;”, written by Mark Lancaster, is expected to be published by Packt Publishing, but it’s available NOW already as a RAW edition. &lt;/p&gt;&lt;h4&gt;RAW?&lt;/h4&gt;&lt;p&gt;What is a RAW edition? Well, basically, it’s a prerelease (Read As we Write). Some chapters are still missing and no guaranties, that anything you’re reading in this RAW edition will actually be in the final book release. So, this article will be a pre-review. Is it worth reading? I think it is. You will see: for this book, RAW means VERY WELL DONE already.&lt;/p&gt;&lt;p&gt;Do be mislead by the title. This book is not solely about how to spice up your APEX GUI with ExtJS. This book discusses application GUI development with APEX in general and extending APEX functionality with ExtJS in particular.&lt;/p&gt;&lt;h4&gt;What will you learn from the book?&lt;/h4&gt;&lt;p&gt;The book will guide you through the whole installation and setup process of your APEX development environment, discussing the different web server alternatives. One of my favorite chapters here is the explanation of how to combine APEX with Subversion as version control system to &lt;b&gt;automate your build process&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;If you’re not familiar with Ext you will get an (APEX free) introduction to &lt;b&gt;get acquainted with Ext&lt;/b&gt;, starting with a simple hello-world-like example , learn about CSS manipulation, DOM navigation and manipulation, event handling and finally advance to object notation and namespacing. All in about 30 pages, code examples included. Just enough to get stated without getting bored.&lt;/p&gt;&lt;p&gt;Ext offers lots of web GUI enhancements, but to use those in APEX you will have to work with templates and themes. The book explains the of the APEX model, how to create your own template step-by-step and integrate ExtJS into it.&lt;/p&gt;&lt;p&gt;Once familiar to the basics of ExtJS enabled APEX GUI building, you now will go through a number of detailed examples, creating, modifying and enhancing templates with ExtJS and CSS techniques: Regions, Labels, Lists, Button, Popups, Breadcrumps, Calendars and Reports to start with. Next you will get some examples of how to add some more advanced Ext layout elements to your Application, like the Ext.DatePicker, Auto-growing text areas, auto-completing text fields, tab panels, toolbars and menus.&lt;/p&gt;&lt;p&gt;A book about APEX 4.0, especially when covering GUI aspects, should spent some pages on &lt;b&gt;Plug-ins and Dynamic Actions&lt;/b&gt;. This book will teach you, how to build your (first?) own Plug-in with a simple example, step-by-step and create a &lt;b&gt;AJAX enabled Plug-in and Dynamic Actions&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;So far the well done RAW version of the book. What’s still to come? The Mark Lancaster plans include chapters about:&lt;/p&gt;&lt;p&gt;· &lt;b&gt;Interactive Components&lt;/b&gt;&lt;/p&gt;&lt;p&gt;· &lt;b&gt;IFramed Tabs and Popup Windows&lt;/b&gt;&lt;/p&gt;&lt;p&gt;· &lt;b&gt;Mixing Ext with jQuery&lt;/b&gt;&lt;/p&gt;&lt;p&gt;· &lt;b&gt;Performance tuning your JavaScript&lt;/b&gt;&lt;/p&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;&lt;p&gt;I like this book already. Lots of I’m-going-to-try-this-immediately examples, clear writing, good basics and well explained advanced examples make me recommend this book. You should have some experience with Application Express, experience with Ext is not required.&lt;/p&gt;&lt;p&gt;Pity the complete source code of the examples is not yet available on the Packt Publishing site.&lt;/p&gt;&lt;p&gt;I’m looking forward to the finished version. Meanwhile, if you are interested in the RAW edition of the book. Packt offers a nice deal: &lt;a href="https://www.packtpub.com/oracle-application-express-4-0-with-ext-js/book?utm_source=rokitta.blogspot.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_005443"&gt;buy the RAW version of this book and place a pre-order for the print book right now, with a 40% discount on both&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-7579391254989593308?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/7579391254989593308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2010/11/pre-review-oracle-application-express.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/7579391254989593308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/7579391254989593308'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2010/11/pre-review-oracle-application-express.html' title='Pre-Review: Oracle Application Express 4.0 with Ext JS : RAW'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_cFVy-bGzGXc/TO05vgQ9bgI/AAAAAAAAAD4/7DeiEbwfwYI/s72-c/1063EN_MockupCover%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-5469199727377368289</id><published>2010-11-17T11:22:00.001+01:00</published><updated>2010-12-14T14:33:29.040+01:00</updated><title type='text'>Oracle updates APEX Statement of Direction</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_cFVy-bGzGXc/TOOs-8d_6TI/AAAAAAAAAFk/PNaPfufyLeQ/s1600-h/statementofdirection%5B1%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 20px 20px 0px; display: inline; border-top: 0px; border-right: 0px" title="statementofdirection" border="0" alt="statementofdirection" align="left" src="http://lh3.ggpht.com/_cFVy-bGzGXc/TOOs_Z5Oy_I/AAAAAAAAAFo/5mgMmMThPs4/statementofdirection_thumb.jpg?imgmax=800" width="240" height="192" /&gt;&lt;/a&gt; Oracle just came with an update on its “&lt;a href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/apex-sod-087560.html" target="_blank"&gt;Statement of Direction&lt;/a&gt;” for APEX. Once again Oracle confirms that APEX will continue its efforts to enhance this development platform, which should not be a surprise, but there were often doubts (especially from IT management) whether APEX will be a platform to base long term planning on, preferring ADF as the framework primarily promoted as the-way-to-go. Apex is mature, and will become more mature with the announced enhancements in this SOD. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Oracle continues to invest in the development and support of Oracle Application Express and new versions of Application Express will be released at least annually.&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So, version 4.1 should not be too far away from being released, as 4.0 is almost half a year “old” now (not taking into account the time the EA release was available).&lt;/p&gt;  &lt;p&gt;Oracle lists some features planed for the upcoming version, and I just would like to comment on some of them:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Development for Mobile Applications – Include themes and HTML templates suitable for smart phones and mobile devices.&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Creating an APEX GUI for mobile devices using themes and templates is already possible with the current release, in fact, was possible with earlier releases as well. So I’m very curious what the Apex team comes up with, as I’m currently migrating a web application to Oracle/Apex which must be accessible from both: mobile and PC-based browsers.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Charting - Provide for chart rendering without using Flash (to enable display on mobile devices).&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;iWhatever users will be very thankful ;-).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Interactive Reporting – Allow multiple reports on one page and support pivot queries.&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Great! Finally a pivot feature in Apex. I believe, this is the number 1 missing feature in Interactive reports, which keeps business users from using Apex as “Excel-replacement” analysis tool. Hopefully the user will be able to customize the pivot report just like in Excel.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Tabular Forms – Allow multiple tabular forms on one page and continue to expand tabular forms validations.&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Master-Detail-Detail – Allow the generation of pages to support master-detail-detail relationships.&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Not being able to have multiple tabular forms on one page (out-of-the-box) is one of those annoying things almost every developer has experienced when starting to develop with Apex. Developers and customers/users will appreciate this enhancement.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Use of ROWID – Allow usage of ROWID for Automatic DML processing (as an alternative to identifying the PK columns).&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So a developer will be able to choose between ROWID and (manually identifying) PK columns? That would definitely be nice.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Modal Dialogue - Add ability to display a dialog on top of a page (the rest of the page will be grayed out).&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is possible now too, but only by using some JS library or writing your own DIV based layout. A build-in functionality would be of great help, as this often is a wanted functionality.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Data Upload - Enable end-users to upload data into an existing table (within an application).&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I bet there are numerous Apex applications which have just this functionality. So, no need to come up with custom solutions anymore? Wizard based? How customizable will this feature be? I’m very curious.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-5469199727377368289?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/5469199727377368289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2010/11/oracle-updates-apex-statement-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/5469199727377368289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/5469199727377368289'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2010/11/oracle-updates-apex-statement-of.html' title='Oracle updates APEX Statement of Direction'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_cFVy-bGzGXc/TOOs_Z5Oy_I/AAAAAAAAAFo/5mgMmMThPs4/s72-c/statementofdirection_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-5795861093446430559</id><published>2010-11-01T22:18:00.005+01:00</published><updated>2010-12-14T17:26:44.869+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ORA-01756: quoted string not properly terminated'/><category scheme='http://www.blogger.com/atom/ns#' term='pl/sql'/><title type='text'>It’s the little things in life …</title><content type='html'>&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 6px 20px 20px 6px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="syntax" border="0" alt="syntax" align="left" src="http://lh4.ggpht.com/_cFVy-bGzGXc/TQdvXdcnEqI/AAAAAAAAAFg/qFPffxnkoQc/syntax%5B2%5D.jpg?imgmax=800" width="244" height="153" /&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Sometimes you get information and you ask yourself: &amp;quot;Why didn't I know this? This would have made (certain) things so much easier!&amp;quot; or &amp;quot;I didn't know I could do this&amp;quot;. Well, this just happened to me and after asking a few colleges, I found out: I’m not the only Oracle developer who didn't know this (without being too concerned about the statistical relevance of the sample size, I would estimate that about 80% of PL/SQL developers might not know this). So I decided to write this little post.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Consider this piece of code:&lt;/p&gt;&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;CREATE TABLE examples (sample_str VARCHAR2 (100));

INSERT INTO examples (sample_str)
VALUES ('It''s the little things in life ...');

DECLARE
v_stm VARCHAR2 (1000);
BEGIN
v_stm := 'insert into examples (sample_str) values (''It''''s the little things in life ...'')';
EXECUTE IMMEDIATE v_stm;
END;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;&lt;br /&gt;
Take a look at the quotation syntax. Most developers will recognize the double-quote as “escape” for the single quote to be able to insert/assign the quote as part of the string value. This syntax can get really messy, especially in combination with concatenations or nested quotes in dynamic SQL. Such code can be a real pain to debug and maintain. The wrong number of quote’s will result in a “ORA-01756: quoted string not properly terminated” error.. &lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;In 10g Oracle introduced a new quoting syntax. This new feature enables us to embed single-quotes in literal strings without having to resort to double, triple or sometimes quadruple quote characters. To use this mechanism, simply prefix the string with a “q”. The syntax is q'[...]', where the &amp;quot;[&amp;quot; and &amp;quot;]&amp;quot; characters can be any of the following (as long as they do not already appear in the string):&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;!&lt;/li&gt;
&lt;li&gt;{}&lt;/li&gt;
&lt;li&gt;[]&lt;/li&gt;
&lt;li&gt;()&lt;/li&gt;
&lt;li&gt;&amp;lt;&amp;gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Using this quoting syntax, the above example would look like this: &lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;INSERT INTO examples (sample_str)
VALUES (q'[It's the little things in life ...]');

DECLARE
v_stm VARCHAR2 (1000);
BEGIN

v_stm := q'[insert into examples (sample_str) values ('It''s the little things in life ...')]';

EXECUTE IMMEDIATE v_stm;

END;
&lt;/pre&gt;&lt;br /&gt;
Looks a lot better, doesn’t it?! Well, there is still one of these double quoted syntax things in this example. Guess what: The mechanism even allows you to code nested single-quoting syntax: &lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;DECLARE
v_stm VARCHAR2 (1000);
BEGIN

v_stm := q'[insert into examples (sample_str) values (q'&amp;lt;It's the little things in life ...&amp;gt;')]';

EXECUTE IMMEDIATE v_stm;

END;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p align="center"&gt;Siquis in hoc artem populo non novit amandi, Hoc legat et lecto carmine doctus amet.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-5795861093446430559?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/5795861093446430559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2010/11/its-little-things-in-life.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/5795861093446430559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/5795861093446430559'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2010/11/its-little-things-in-life.html' title='It’s the little things in life …'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_cFVy-bGzGXc/TQdvXdcnEqI/AAAAAAAAAFg/qFPffxnkoQc/s72-c/syntax%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-1785582331939094394</id><published>2010-09-02T23:46:00.000+02:00</published><updated>2010-09-02T23:46:45.002+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>Book review: Oracle Application Express 3.2 – The Essentials and More</title><content type='html'>&lt;p&gt;&amp;#160;&lt;a href="https://www.packtpub.com/oracle-application-express-3-2/book" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 6px 25px 2px 0px; display: inline; border-top: 0px; border-right: 0px" title="4527EN_MockupCover" border="0" alt="4527EN_MockupCover" align="left" src="http://lh5.ggpht.com/_cFVy-bGzGXc/TIAbBrGaQrI/AAAAAAAAAC0/RRXY0KG88j0/4527EN_MockupCover%5B13%5D.png?imgmax=800" width="168" height="187" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;b&gt;Language : &lt;/b&gt;English    &lt;br /&gt;
&lt;b&gt;Paperback : &lt;/b&gt;644 pages [ 235mm x 191mm ]    &lt;br /&gt;
&lt;b&gt;Release Date : &lt;/b&gt;June 2010    &lt;br /&gt;
&lt;b&gt;ISBN : &lt;/b&gt;1847194524    &lt;br /&gt;
&lt;b&gt;ISBN 13 : &lt;/b&gt;978-1-847194-52-7    &lt;br /&gt;
&lt;b&gt;Authors : &lt;/b&gt;&lt;a href="https://www.packtpub.com/authors/profiles/arie-geller"&gt;Arie Geller&lt;/a&gt;, &lt;a href="https://www.packtpub.com/authors/profiles/matthew-lyon"&gt;Matthew Lyon&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;In June, just before the official release of APEX 4.0 and #APEX4 Twitter messages popping up on my desktop every minute, I noticed a tweet from one of the authors of this book saying something like: “...bad timing…just released our book APEX 3.2 – Essentials and More …”. Well, I agree. Just looking at the books title, you might really think: Bad Timing. But, you should never just judge a book by its cover (or Title, in this case).&lt;/p&gt;&lt;p&gt;Just let´s forget about APEX 4.0 for a moment.&lt;/p&gt;&lt;p&gt;This book covers almost all aspects you probably will encounter when developing with APEX. The authors start the book explaining the concepts of APEX and explaining the “APEX Angle” of related (or required) technologies like HTML, CSS, Javascript and AJAX. Once the basics are covered, Application development with APEX is explained in great detail. And by this, I mean: In great detail! No OTN Hands-On like tutorials (step-by-step-click-through-without-further-explanation). Instead, sparse code samples, no more then necessary screenshots and lots, lots, lots of explanations. That´s exactly what I like about this book. It´s not a tutorial and more then just a reference. The authors explain the essence of developing with APEX and beyond. The book concludes in a “Best Practice” Chapter which I think is an excellent subject to finish. &lt;/p&gt;&lt;p&gt;Although the book covers almost all aspects, some aspects are covered just a bit too brief. The chapter about Themes an Templates, for example, is covering only the very basics and is not inviting to start creating a template or theme on your own. Extending APEX with JavaScript libraries like JQuery could have had more attention, as this is common practice nowadays.&lt;/p&gt;&lt;p&gt;I like this book. It is a great companion for ever APEX developer.&lt;/p&gt;&lt;p&gt;But what about the 3.2 / 4.0 bad-timing thing?&lt;/p&gt;&lt;p&gt;Well, there are still lots of environments and applications based on APEX 3.2. It will take a while until all those have been upgraded.&amp;#160; Apex 4.0 is a great step forward, but the basic principles are still the same as in 3.2. Almost all 3.2 techniques and functionality still is there. So this book will help you too when learning and developing in APEX 4.0. If you are aware of the new functionality and keep in mind that the screenshots and examples might look a bit different, this book is still a valid reference. Anyway, I don´t think you will find an APEX 4.0 book this extensive just yet.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-1785582331939094394?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/1785582331939094394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2010/09/book-review-oracle-application-express.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/1785582331939094394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/1785582331939094394'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2010/09/book-review-oracle-application-express.html' title='Book review: Oracle Application Express 3.2 – The Essentials and More'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_cFVy-bGzGXc/TIAbBrGaQrI/AAAAAAAAAC0/RRXY0KG88j0/s72-c/4527EN_MockupCover%5B13%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-2734770425432043614</id><published>2010-06-08T08:35:00.001+02:00</published><updated>2010-12-14T14:35:21.975+01:00</updated><title type='text'>YAAFPG: Yet Another Apex Football Prediction Game</title><content type='html'>&lt;p&gt;&lt;a href="http://apex.oracle.com/"&gt;&lt;a href="http://www.fifapex.net/"&gt;&lt;img style="border-right-width: 0px; margin: 20px 20px 20px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="test" border="0" alt="test" align="left" src="http://lh4.ggpht.com/_cFVy-bGzGXc/TA3kpubEQsI/AAAAAAAAACc/S8yJfrurOzo/test%5B6%5D.png?imgmax=800" width="248" height="121" /&gt;&lt;/a&gt;Apex.oracle.com&lt;/a&gt; has been upgraded with the 4.0 Release Candidate. Looks like the APEX team will present the official 4.0 release very soon. Without trying to “predict” the When or Where, I regret that I am not able to participate in this year´s &lt;a href="http://www.odtugkaleidoscope.com"&gt;ODTUG Kaleidoscope conference&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;With the upgrade, I have my first public accessible application running on version 4.0 live. I tried to combine two exciting things in life: Soccer (or football, as we say in Europe) and Oracle technology. So, if you are just as much looking forward to the upcoming &lt;a href="http://www.fifa.com"&gt;FIFA South Africa World Cup 2010&lt;/a&gt; and APEX 4.0, join my little predictor game: &lt;a href="http://www.fifapex.net"&gt;FIFAPEX&lt;/a&gt; . It´s free, It´s fun and you can win something: David Peake donated the book “Beginning Oracle Application Express”, written by Rick Greenwald. So, join the game, compare yourself to other enthusiast, and make chance to win and learn all about Oracle Application Express, the tool that was used to build this site.&lt;/p&gt;  &lt;p&gt;(BTW: &lt;a href="http://www.fifapex.net/"&gt;FIFAPEX&lt;/a&gt; still open for sponsoring. If you would like to see your companies banner or logo on &lt;a href="http://www.fifapex.net/"&gt;FIFAPEX&lt;/a&gt; in exchange for a small item participants might find appealing to win, just send an email to &lt;a href="mailto:admin@fifapex.net"&gt;admin@fifapex.net&lt;/a&gt;)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-2734770425432043614?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/2734770425432043614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2010/06/yaafpg-yet-another-apex-football.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/2734770425432043614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/2734770425432043614'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2010/06/yaafpg-yet-another-apex-football.html' title='YAAFPG: Yet Another Apex Football Prediction Game'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_cFVy-bGzGXc/TA3kpubEQsI/AAAAAAAAACc/S8yJfrurOzo/s72-c/test%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-6934065081531727459</id><published>2010-02-10T15:20:00.004+01:00</published><updated>2011-01-10T13:16:45.882+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='INSTEAD OF TRIGGER'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>Tabular Forms on Complex Views - using INSTEAD OF Triggers</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_cFVy-bGzGXc/TQi3TIsXnuI/AAAAAAAAAF0/EshtJ0lxIys/s1600-h/37593089_7cd841cd66%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 10px 10px 20px 20px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="37593089_7cd841cd66" border="0" alt="37593089_7cd841cd66" align="right" src="http://lh6.ggpht.com/_cFVy-bGzGXc/TQi3TRXI0RI/AAAAAAAAAF4/GJXQXzIFY_E/37593089_7cd841cd66_thumb%5B2%5D.jpg?imgmax=800" width="244" height="163" /&gt;&lt;/a&gt; Creating tabular forms in Apex is relative straight forward. One gets fully generated, instant insert/update/delete functionality. Unfortunately (for the form developer), tables are usually part of a more or less complex data model, which is optimized for data storage, rather then for form-layout. Well, Apex offers some possibilities to the developer to enable tabular forms beyond 1:1 table based.&lt;/p&gt;&lt;h3&gt;Collections&lt;/h3&gt;&lt;p&gt;One alternative is to create your tabular form using the Apex Collection API. There is a good &lt;a title="Manually Creating a Tabular Form" href="http://apex-smb.blogspot.com/2008/07/manually-creating-tabular-form.html" target="_blank"&gt;article on Martin Giffy D'Souza’s blog&lt;/a&gt; describing this technique.     &lt;br /&gt;
This collection-approach basically pre-fetches data into a (PL/SQL) collection from a query/cursor. The “collected” data will be displayed in the form. An on-submit page process will store the data submitted from the form into the collection. After this you can perform some validation before submitting the data to table(s) in an on-submit page process.&lt;/p&gt;&lt;h3&gt;Database Views&lt;/h3&gt;&lt;p&gt;Well, I favor an approach that keeps the data-logic in the database, which is (in my opinion) more accessible to developers, more likely to be re-used and less fragmented (code-wise), thus easer to maintain: Database Views.&lt;/p&gt;&lt;p&gt;Views can be based on several tables or other views. Usually views are used to query data only, but in my case, I would like to perform all DML through an Apex form based on a view. As long as my view is “key-preserving” for the joined table I would like to perform the DML on, this is not a problem.&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Key preserved means, the row from the base table will appear AT MOST ONCE in the output view on that table.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;When my SQL becomes more complex, using outer joints, aggregations or sub-queries, the resulting view will probably not be updateable anymore without the use of INSTEAD OF Triggers. The INSTEAD OF trigger(s) will handle all the DML processing and hide the processing complexity from APEX.&lt;/p&gt;&lt;p&gt;Applying this view-Approach, you can keep the UI layer (APEX) separated from the data model layer (database).&lt;/p&gt;&lt;p&gt;Let`s go through this step-by-step:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;create a view which will return all the data you would like to be available in your tabular form &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;implement the DML processing using an INSTEAD OF trigger on this view&lt;/font&gt;&amp;#160; &lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;build the tabular form UI in APEX based on this using standard APEX processing logic&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Example&lt;/h3&gt;&lt;p&gt;This example will implement a simple timesheet in APEX. The timesheet should show all projects of the (APEX-) user for a given month. The user must be able to enter &amp;quot;times spend&amp;quot; for every project assigned to him, for every day. The form should only contain one submit button (no add or remove rows button):&lt;/p&gt;&lt;p align="left"&gt;&amp;#160;&lt;/p&gt;&lt;p align="left"&gt;&lt;table border="1" cellspacing="0" cellpadding="2" width="349"&gt;&lt;tbody&gt;
&lt;tr&gt;         &lt;td valign="top" width="106"&gt;           &lt;p&gt;&lt;strong&gt;Project Name&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;          &lt;td valign="top" width="26"&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;          &lt;td valign="top" width="24"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;          &lt;td valign="top" width="152"&gt;&lt;strong&gt;. . .&lt;/strong&gt;&lt;/td&gt;          &lt;td valign="top" width="22"&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;/td&gt;          &lt;td valign="top" width="17"&gt;&lt;strong&gt;31&lt;/strong&gt;&lt;/td&gt;       &lt;/tr&gt;
&lt;tr&gt;         &lt;td valign="top" width="106"&gt;project 1&lt;/td&gt;          &lt;td valign="top" width="26"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="24"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="152"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="22"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="17"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;
&lt;tr&gt;         &lt;td valign="top" width="106"&gt;project 2&lt;/td&gt;          &lt;td valign="top" width="26"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="24"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="152"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="22"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="17"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;
&lt;tr&gt;         &lt;td valign="top" width="106"&gt;…&lt;/td&gt;          &lt;td valign="top" width="26"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="24"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="152"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="22"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="17"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;
&lt;tr&gt;         &lt;td valign="top" width="106"&gt;project &lt;em&gt;n&lt;/em&gt;&lt;/td&gt;          &lt;td valign="top" width="26"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="24"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="152"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="22"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="top" width="17"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I started creating a new workspace and used the EMP table as starting point. I added some table definitions to hold project-, assignment- and timesheet information.&lt;/p&gt;&lt;p&gt;You can download the complete DDL scripts for this example &lt;a href="http://www.rokit.nl/blog/timesheet_demo.sql" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;h3&gt;Preparations&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;font size="2"&gt;You'll need a workspace associated to a database schema containing the Apex demo objects (DEMO_CUSTOMERS, DEMO_ORDERS, DEMO_STATES, DEMO_USERS, …)&lt;/font&gt; &lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;run the &lt;a href="http://www.rokit.nl/blog/timesheet_demo.sql" target="_blank"&gt;timesheet_demo.sql&lt;/a&gt; script to create the additional table objects (including some demo data)&lt;/font&gt; &lt;/li&gt;
&lt;/ol&gt;&lt;h3&gt;Step 1: Create the Pivot View&lt;/h3&gt;&lt;p&gt;Have a look at these tables and data I added to the demo application's model:&lt;/p&gt;&lt;p&gt;Table &lt;strong&gt;DEMO_PROJECTS&lt;/strong&gt; defines project with start- and end-date:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;select * from demo_projects;

PROJECT_ID PROJECT_NAME                   START_DAT END_DATE 
---------- ------------------------------ --------- --------- 
0 Marketing Campaign Computers   01-OKT-09 31-DEC-10 
1 Marketing Campaign Software    01-JUL-09 31-JUL-10

2 rows selected.&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font face="v"&gt;Table &lt;strong&gt;DEMO_TIMESCHEETS&lt;/strong&gt; holds the time spend on an assignment:&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;select * from demo_timesheets; 

no rows selected.&lt;/pre&gt;&lt;br /&gt;
Now lets join there tables:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;SELECT   pj.project_id,
         pj.project_name,
         am.assignment_id,
         us.user_id,
         us.user_name,
         ts.timesheet_date,
         ts.hours
  FROM   demo_projects pj,
         demo_assignments am,
         demo_users us,
         demo_timesheets ts
 WHERE       pj.project_id = am.project_id
         AND am.user_id = us.user_id
         AND am.assignment_id = ts.assignment_id(+);
   
PROJECT_ID PROJECT_NAME                   ASSIGNMENT_ID    USER_ID USER_NAME  TIMESHEET      HOURS 
---------- ------------------------------ ------------- ---------- ---------- --------- ---------- 
0 Marketing Campaign Computers               3         22 SCOTT                          
1 Marketing Campaign Software                5         22 SCOTT                          
1 Marketing Campaign Software                6         23 FORD                          

3 rows selected.&lt;/pre&gt;&lt;br /&gt;
The timesheet table does not contain any data yet. Even if there would be some timesheet data, there is no guaranty there are no gaps in the dates. I would like to have a result with dense dates for all project assignments:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;SELECT   prj.*, ts.hours
  FROM   (SELECT   d.thedate,
                   pj.project_id,
                   pj.project_name,
                   am.assignment_id,
                   us.user_id,
                   us.user_name
            FROM   (    SELECT   mindat + LEVEL - 1 thedate
                          FROM   (SELECT   MIN (start_date) mindat,
                                           MAX (end_date) maxdat
                                    FROM   demo_projects)
                    CONNECT BY   LEVEL &amp;lt;= maxdat - mindat + 1) d,
                   demo_projects pj,
                   demo_assignments am,
                   demo_users us
           WHERE   pj.project_id = am.project_id AND am.user_id = us.user_id)
         prj,
         demo_timesheets ts
 WHERE   prj.assignment_id = ts.assignment_id(+)
         AND prj.thedate = ts.timesheet_date(+);
   
THEDATE   PROJECT_ID PROJECT_NAME                   ASSIGNMENT_ID    USER_ID USER_NAME       HOURS 
--------- ---------- ------------------------------ ------------- ---------- ---------- ---------- 
01-JUL-09          0 Marketing Campaign Computers               3         22 SCOTT                
01-JUL-09          1 Marketing Campaign Software                6         23 FORD                 
01-JUL-09          1 Marketing Campaign Software                5         22 SCOTT                
02-JUL-09          0 Marketing Campaign Computers               3         22 SCOTT                
02-JUL-09          1 Marketing Campaign Software                6         23 FORD                 
02-JUL-09          1 Marketing Campaign Software                5         22 SCOTT                
03-JUL-09          0 Marketing Campaign Computers               3         22 SCOTT                
03-JUL-09          1 Marketing Campaign Software                6         23 FORD                 
03-JUL-09          1 Marketing Campaign Software                5         22 SCOTT                
04-JUL-09          0 Marketing Campaign Computers               3         22 SCOTT                 
. . .  

28-DEC-10          1 Marketing Campaign Software                5         22 SCOTT                
29-DEC-10          0 Marketing Campaign Computers               3         22 SCOTT                
29-DEC-10          1 Marketing Campaign Software                5         22 SCOTT                
29-DEC-10          1 Marketing Campaign Software                6         23 FORD                 
30-DEC-10          0 Marketing Campaign Computers               3         22 SCOTT                
30-DEC-10          1 Marketing Campaign Software                5         22 SCOTT                
30-DEC-10          1 Marketing Campaign Software                6         23 FORD                 
31-DEC-10          0 Marketing Campaign Computers               3         22 SCOTT                
31-DEC-10          1 Marketing Campaign Software                5         22 SCOTT                
31-DEC-10          1 Marketing Campaign Software                6         23 FORD                

1647 rows selected.&lt;/pre&gt;&lt;br /&gt;
Now we got a dense dataset, let's build the pivot statement. Well, I could use the 11g pivot function, but to make this statement more generic, I'll use the standard pre-11g way to pivot my timesheet data:&lt;br /&gt;
&lt;p /&gt;As shown in my lay-out example for the actual form I want to implement, the result of the query should show one row with all the days of a month containing the time entered for a certain project per user. Here it is:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;  SELECT   theyear || '-' || themonth year_month,
           theyear,
           themonth,
           project_id,
           project_name,
           assignment_id,
           user_id,
           user_name,
           SUM (d1) d1,
           SUM (d2) d2,
           SUM (d3) d3,
           . . .
           SUM (d28) d28,
           SUM (d29) d29,
           SUM (d30) d30,
           SUM (d31) d31
    FROM   (SELECT   EXTRACT (YEAR FROM thedate) theyear,
                     EXTRACT (MONTH FROM thedate) themonth,
                     project_id,
                     project_name,
                     assignment_id,
                     user_id,
                     user_name,
                     CASE WHEN day_in_month = 1 THEN hours ELSE NULL END d1,
                     CASE WHEN day_in_month = 2 THEN hours ELSE NULL END d2,
                     CASE WHEN day_in_month = 3 THEN hours ELSE NULL END d3,
                     . . .
                     CASE WHEN day_in_month = 28 THEN hours ELSE NULL END d28,
                     CASE WHEN day_in_month = 29 THEN hours ELSE NULL END d29,
                     CASE WHEN day_in_month = 30 THEN hours ELSE NULL END d30,
                     CASE WHEN day_in_month = 31 THEN hours ELSE NULL END d31
              FROM   (SELECT   prj.*,
                               ts.hours,
                               EXTRACT (DAY FROM prj.thedate) day_in_month
                        FROM   (SELECT   d.thedate,
                                         pj.project_id,
                                         pj.project_name,
                                         am.assignment_id,
                                         us.user_id,
                                         us.user_name
                                  FROM   (    SELECT   mindat + LEVEL - 1 thedate
                                                FROM   (SELECT   TRUNC(MIN(start_date))
                                                                    mindat,
                                                                 TRUNC (
                                                                    MAX (end_date)
                                                                 )
                                                                    maxdat
                                                          FROM   demo_projects)
                                          CONNECT BY   LEVEL &amp;lt;=
                                                          maxdat - mindat + 1)
                                         d,
                                         demo_projects pj,
                                         demo_assignments am,
                                         demo_users us
                                 WHERE   pj.project_id = am.project_id
                                         AND am.user_id = us.user_id) prj,
                               demo_timesheets ts
                       WHERE   prj.assignment_id = ts.assignment_id(+)
                               AND prj.thedate = ts.timesheet_date(+)))
GROUP BY   theyear,
           themonth,
           project_id,
           project_name,
           assignment_id,
           user_id,
           user_name;

YEAR_MO THEYEAR THEMONTH PROJECT_ID PROJECT_NAME                 ASSIGNMENT_ID USER_ID USER_NAME  D1  D2  D3 … D29 D30 D31 
------- ------- -------- ---------- ---------------------------- ------------- ------- --------- --- --- --- … --- --- --- 
2009-10    2009       10          1 Marketing Campaign Software              6      23 FORD                             
2009-10    2009       10          0 Marketing Campaign Computers             3      22 SCOTT                            
2009-10    2009       10          1 Marketing Campaign Software              5      22 SCOTT                            
2009-11    2009       11          1 Marketing Campaign Software              6      23 FORD                             
2009-11    2009       11          0 Marketing Campaign Computers             3      22 SCOTT                            
2009-11    2009       11          1 Marketing Campaign Software              5      22 SCOTT                            
2009-12    2009       12          1 Marketing Campaign Software              6      23 FORD                             
2009-12    2009       12          0 Marketing Campaign Computers             3      22 SCOTT                            
2009-12    2009       12          1 Marketing Campaign Software              5      22 SCOTT                            
2009-7     2009        7          1 Marketing Campaign Software              6      23 FORD                             
2009-7     2009        7          0 Marketing Campaign Computers             3      22 SCOTT  
. . .  
2010-8     2010        8          0 Marketing Campaign Computers             3      22 SCOTT                            
2010-8     2010        8          1 Marketing Campaign Software              5      22 SCOTT                            
2010-9     2010        9          1 Marketing Campaign Software              6      23 FORD                             
2010-9     2010        9          0 Marketing Campaign Computers             3      22 SCOTT                            
2010-9     2010        9          1 Marketing Campaign Software              5      22 SCOTT                           

54 rows selected.&lt;/pre&gt;&lt;br /&gt;
OK, still no time data, but exactly the lay-out I was looking for.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Step 2: INSTEAD OF view trigger&lt;/h3&gt;&lt;br /&gt;
&lt;br /&gt;
Editing timesheet data will only effect the table DEMO_TIMESHEETS. For users there will be no difference between insert, update or delete as all fields in the pivot/matrix form will always be visible. &lt;br /&gt;
&lt;br /&gt;
To handle a DML for a single row of DEMO_TIMESHEETS, I will provide a procedure which will:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;&lt;strong&gt;insert&lt;/strong&gt; a row if the combination of assignment/date does not exist AND hours is not NULL/0 &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;&lt;strong&gt;update&lt;/strong&gt; a row if combination of assignment/day does exist AND hours is not NULL/0 &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;&lt;strong&gt;delete&lt;/strong&gt; a row if combination of assignment/day does exist AND hours is NULL/0&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;CREATE OR REPLACE PROCEDURE write_to_timesheet (p_asgnmt_id   IN number,
                                                p_date        IN date,
                                                p_hours       IN number)
AS
BEGIN
   IF p_hours IS NOT NULL AND p_hours &amp;lt;&amp;gt; 0
   THEN
      UPDATE   demo_timesheets
         SET   hours = p_hours
       WHERE   assignment_id = p_asgnmt_id
               AND TRUNC (timesheet_date) = TRUNC (p_date);

      IF sql%ROWCOUNT = 0
      THEN
         INSERT INTO demo_timesheets (assignment_id, timesheet_date, hours)
           VALUES   (p_asgnmt_id, TRUNC (p_date), p_hours);
      END IF;
   ELSE
      DELETE FROM   demo_timesheets
            WHERE   assignment_id = p_asgnmt_id
                    AND TRUNC (timesheet_date) = TRUNC (p_date);
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      raise_application_error (-20001, 'Error updating the timesheet!!!');
END;
/
&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;I used the upper pivot SQL-statement to create the view DEMO_TIMESHEET_V. To be able to use this view as basis for my form, I have to make it updateable. The view DEMO_TIMESHEET_V is not inherently updateable. It requires an INSTEAD OF trigger. With an INSTEAD OF trigger, you can write normal UPDATE, INSERT, and DELETE &lt;br /&gt;
&lt;br /&gt;
statements against the view, and the INSTEAD OF trigger works invisibly in the background to make the right actions take place. In this trigger I will call the procedure write_to_timesheet to perform the DML on the underlying table DEMO_TIMESHEETS. In fact, the procedure write_to_timesheet will be called a maximum of 31 times, depending on the month presented in the timesheet. Well, at this point I have to admit, this is not exactly the sexiest code I have ever written, but it does the job and it's pretty easy to understand (and I wonder, why I didn't choose an example with a &lt;strong&gt;weekly&lt;/strong&gt; timesheet form).&lt;/p&gt;&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;CREATE OR REPLACE TRIGGER demo_timesheet_v_io_trg
   INSTEAD OF UPDATE
   ON demo_timesheet_v
   REFERENCING NEW AS new OLD AS old
   FOR EACH ROW
DECLARE
   v_first_day   date;
BEGIN
   v_first_day :=
      TO_DATE ('01' || '-' || :new.themonth || '-' || :new.theyear,
               'DD-MM-YYYY');

   write_to_timesheet (:new.assignment_id, v_first_day + 0, :new.d1);
   write_to_timesheet (:new.assignment_id, v_first_day + 1, :new.d2);
   write_to_timesheet (:new.assignment_id, v_first_day + 2, :new.d3);
   . . .
   write_to_timesheet (:new.assignment_id, v_first_day + 25, :new.d26);
   write_to_timesheet (:new.assignment_id, v_first_day + 26, :new.d27);
   write_to_timesheet (:new.assignment_id, v_first_day + 27, :new.d28);

   -- special treatment for days not valid for some months

   IF EXTRACT (DAY FROM LAST_DAY (v_first_day)) &amp;gt;= 29
   THEN
      write_to_timesheet (:new.assignment_id, v_first_day + 28, :new.d29);
   END IF;

   IF EXTRACT (DAY FROM LAST_DAY (v_first_day)) &amp;gt;= 30
   THEN
      write_to_timesheet (:new.assignment_id, v_first_day + 29, :new.d30);
   END IF;

   IF EXTRACT (DAY FROM LAST_DAY (v_first_day)) &amp;gt;= 31
   THEN
      write_to_timesheet (:new.assignment_id, v_first_day + 30, :new.d31);
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      -- Please, do some error handling and allow me
      -- to skip this part for this time...
      RAISE;
END demo_timesheet_v_io_trg;
/
&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;Now I can issue updates against the view:&lt;/p&gt;&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;UPDATE   demo_timesheet_v 
SET   d1 = 4 
  ,   d10 = 5 
  ,   d28 = 6 
  ,   d31 = 7 
WHERE year_month = '2010-2' 
  AND assignment_id = 5
;&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;And the data will be written into the time sheet table (except the 31-Feb time, so you can't fool your manager):&lt;/p&gt;&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;ASSIGNMENT_ID TIMESHEET      HOURS 
------------- --------- ---------- 
5 01-FEB-10          4 
5 10-FEB-10          5 
5 28-FEB-10          6

3 rows selected.&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;So far I didn't have to code anything in Apex. In the next step I will build the actual form.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Step 3: build the tabular form in APEX&lt;/h3&gt;&lt;p&gt;I promised, that the timesheet form will be completely based on standard Apex functionality (strictly spoken, using the collection approach is standard Apex functionality too), without any additional coding in Apex. Although it's mostly just clicking through the wizards and property screens, I will walk through it step by step:&lt;/p&gt;&lt;p&gt;Assuming you already have created an application or you are using the demo application, the first step will be to create a new page:&lt;/p&gt;&lt;br /&gt;
&lt;font size="2"&gt;&lt;u&gt;Create Page:&lt;/u&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;page type: &lt;strong&gt;Form&lt;/strong&gt;&lt;/font&gt; &lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;now choose: &lt;strong&gt;Tabular Form&lt;/strong&gt;&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;The Create Tabular Form wizard appears:&lt;/p&gt;&lt;br /&gt;
&lt;u&gt;Step &amp;quot;Table / View Owner&amp;quot;:&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;select the schema owning the demo objects &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;For &amp;quot;Allowed Operations&amp;quot; choose &amp;quot;&lt;strong&gt;Update Only&lt;/strong&gt;&amp;quot;. Remember, the pivot view contains all the rows. There is no need to insert or delete rows. &lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Step &amp;quot;Table / View Name&amp;quot;:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;select the view &lt;strong&gt;DEMO_TIMESHEET_V&lt;/strong&gt; from the list &lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Step &amp;quot;Displayed Columns&amp;quot;:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;just select all the columns &lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Step &amp;quot;Primary Key&amp;quot;:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;Each row of the view can be uniquely identified by the column values of &lt;strong&gt;year_month&lt;/strong&gt; and &lt;strong&gt;assignment_id&lt;/strong&gt;. Select these from the lists. &lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;For those folks, who wondered why I created the year_month column: the reason is, I only can assign two columns as PK columns in the Apex wizard (I remember Oracle Portal had the same restriction. I know there was a workaround in Portal to add additional columns; does anybody know such a &amp;quot;backdoor&amp;quot; in Apex?). To overcome the limitation, you might have to combine two or more columns into one, depending on the complexity of your view. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;font color="#ff0000"&gt;Important:&lt;/font&gt;&lt;/strong&gt; you won't get any error message while creating the form, but when submitting changes to the form without the correct key, Apex will throw an error:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;&lt;strong&gt;Error in mru internal routine: ORA-20001: Error in MRU: row= 1, ORA-20001: ORA-20001: Current version of data in database has changed since user initiated update process. &amp;lt;checksum information&amp;gt;, &amp;lt;your MRU statement&amp;gt;.&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;u&gt;Step &amp;quot;Primary Key Source&amp;quot;:&lt;/u&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;Choose &amp;quot;&lt;strong&gt;Existing Trigger&lt;/strong&gt;&amp;quot; for both primary key columns.&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;u&gt;Step &amp;quot;Updateable Columns&amp;quot;:&lt;/u&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;Updateable columns will be &lt;strong&gt;D1 . . . D31&lt;/strong&gt;.&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Step &amp;quot;Page and Region Attributes&amp;quot;:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;Give the page an appropriate &lt;strong&gt;name&lt;/strong&gt; (like &amp;quot;Timesheet&amp;quot;) and accept the defaults for the rest of the properties.&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Step &amp;quot;Tab&amp;quot;:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;just accept the default&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Step &amp;quot;Button Labels&amp;quot;:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;just accept the default&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Step &amp;quot;Branching&amp;quot;:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;just accept the default&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Step &amp;quot;Confirm&amp;quot;:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;Click &amp;quot;Finish&amp;quot; and run the page.&lt;/font&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2"&gt;The lay-out is not ideal yet. After changing the width of columns D1 ... D31 to &amp;quot;1&amp;quot; and, modifying the headers and hiding some of the ID columns my timesheet form look like this:&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="timesheet1s" border="0" alt="timesheet1s" src="http://lh4.ggpht.com/_cFVy-bGzGXc/S3LT-NtZowI/AAAAAAAAACE/VlGDb0KYOx0/timesheet1s%5B2%5D.jpg?imgmax=800" width="722" height="186" /&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Now I will add two parameters (Year and Month) and modify the query, so only the assignments of the current Apex user will be shown. I'm not going to describe this in detail, but eventually I will use these parameters (select lists) in the source query of the form region:&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;a href="http://lh6.ggpht.com/_cFVy-bGzGXc/S3K72Op3lzI/AAAAAAAAAB0/Y6TFTdtMl-o/s1600-h/timesheet3%5B7%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="timesheet3" border="0" alt="timesheet3" src="http://lh3.ggpht.com/_cFVy-bGzGXc/S3K72owS3GI/AAAAAAAAAB4/7nV8dH_Mj7w/timesheet3_thumb%5B5%5D.jpg?imgmax=800" width="732" height="595" /&gt;&lt;/a&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;font size="2" face="ver"&gt;With as result:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_cFVy-bGzGXc/S3K73F97L5I/AAAAAAAAAB8/K5yXWGzSJdM/s1600-h/timesheet4%5B4%5D.jpg"&gt;&lt;font color="#404040" size="2" face="Arial"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="timesheet4" border="0" alt="timesheet4" src="http://lh5.ggpht.com/_cFVy-bGzGXc/S3K73rkgr9I/AAAAAAAAACA/ve7AQmmH8OM/timesheet4_thumb%5B2%5D.jpg?imgmax=800" width="734" height="128" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="2" face="Arial"&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;One last thing to do: prevent the columns of days 29/30/31 from being displayed when not valid for a month. I just place conditions on the Column Attributes of column D29 - D31: &lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_cFVy-bGzGXc/S3lxvbhhc-I/AAAAAAAAACI/ZS29zUfMnGU/s1600-h/timesheet5%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="timesheet5" border="0" alt="timesheet5" src="http://lh4.ggpht.com/_cFVy-bGzGXc/S3lxv1EXVzI/AAAAAAAAACM/9qEtLH7Axpk/timesheet5_thumb%5B1%5D.jpg?imgmax=800" width="647" height="310" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;What I wanted to show is: when developing with Apex, keep in mind that you are running Apex on a very powerful environment: the Oracle database. Preferably use Apex to build your user interface and standard transaction form handling. Complex data logic should preferably be coded in the database, not in the Apex Page processing. No, it's not black &amp;amp; white, eventually you have to find a balance between choosing the database or the Apex approach in individual cases.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-6934065081531727459?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/6934065081531727459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2009/12/tabular-forms-on-complex-views-using.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/6934065081531727459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/6934065081531727459'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2009/12/tabular-forms-on-complex-views-using.html' title='Tabular Forms on Complex Views - using INSTEAD OF Triggers'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_cFVy-bGzGXc/TQi3TRXI0RI/AAAAAAAAAF4/GJXQXzIFY_E/s72-c/37593089_7cd841cd66_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-3944732235264845122</id><published>2009-12-22T14:46:00.001+01:00</published><updated>2009-12-22T14:46:52.355+01:00</updated><title type='text'>Follow-up on my "Flexible Parameter Passing" post</title><content type='html'>&lt;p&gt;I had some reactions on my post, describing an issue that occurred when using the &lt;a href="http://dhtmlx.com/" target="_blank"&gt;DHTMLX&lt;/a&gt; library in combination with APEX:&lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;From Bharadwaz (Bharat) Pappu ,&lt;/strong&gt; &lt;strong&gt;Subject:&lt;/strong&gt; ODTUD- Oracle APEX + DHTMLX integration &lt;/h5&gt;  &lt;div class="Section1"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color: #1f497d"&gt;Hello Christian, &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="color: #1f497d"&gt;The presentation at APEXPOSED will be similar to the one I did at ODTUG. &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="color: #1f497d"&gt;There is one huge change though…Instead of making changes to the .js files or the DHTMLX APIs I use a very powerful DHTMLX API to integrate it&amp;#160; with Oracle APEX.&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color: #1f497d"&gt;As promised to you earlier here is a snippet of the code that will work without changing any APEX or DHTMLX APIs:&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;link rel=&amp;quot;STYLESHEET&amp;quot; type=&amp;quot;text/css&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; href=&amp;quot;/i/javascript/.../dhtmlxSuite/dhtmlxtree/samples/common/style.css&amp;quot;&amp;gt;         &lt;br /&gt;&amp;lt;link rel=&amp;quot;STYLESHEET&amp;quot; type=&amp;quot;text/css&amp;quot;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; href=&amp;quot;/i/javascript/.../dhtmlxSuite/dhtmlxtree/codebase/dhtmlxtree.css&amp;quot;&amp;gt;         &lt;br /&gt;&amp;lt;script&amp;#160; src=&amp;quot;/i/javascript/.../dhtmlxSuite/dhtmlxtree/codebase/dhtmlxtree.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;         &lt;br /&gt;declare         &lt;br /&gt;lv_url varchar2(1000):='f?p='||v('APP_ID')||':31:'||v('SESSION')||'::::P31_ID,P31_UID:';         &lt;br /&gt;BEGIN         &lt;br /&gt;htp.p('         &lt;br /&gt;&amp;lt;div id=&amp;quot;treeboxbox_tree&amp;quot;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160; style=&amp;quot;width:350; height:600;background-color:#f5f5f5;border:1px solid Silver;overflow:auto;&amp;quot;&amp;gt;        &lt;br /&gt;&amp;lt;/div&amp;gt;         &lt;br /&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;         &lt;br /&gt;&amp;lt;script&amp;gt;         &lt;br /&gt;&amp;#160; tree=new dhtmlXTreeObject(&amp;quot;treeboxbox_tree&amp;quot;,&amp;quot;100%&amp;quot;,&amp;quot;100%&amp;quot;,0);         &lt;br /&gt;&amp;#160; tree.setImagePath(&amp;quot;/i/javascript/.../dhtmlxSuite/dhtmlxtree/codebase/imgs/csh_bluebooks/&amp;quot;);         &lt;br /&gt;&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;#160; tree.setXMLAutoLoadingBehaviour(&amp;quot;function&amp;quot;);              &lt;br /&gt;&amp;#160; tree.setXMLAutoLoading(function(id){               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tree.loadXML(&amp;quot;'||lv_url||'&amp;quot;+id+&amp;quot;,&amp;quot;+(new Date()).valueOf());               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });               &lt;br /&gt;              &lt;br /&gt;&amp;#160; tree.loadXML(&amp;quot;'||lv_url||'&amp;quot;);               &lt;br /&gt;&lt;/strong&gt;&lt;/font&gt;          &lt;br /&gt;&amp;#160; tree.attachEvent(&amp;quot;onOpenStart&amp;quot;, function (id, state) {           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tree.setItemImage(id, ''ajax-loader.gif'',''ajax-loader.gif'');           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return true           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; });&amp;#160;&amp;#160; &lt;br /&gt;          &lt;br /&gt;&amp;#160; tree.attachEvent(&amp;quot;onOpenEnd&amp;quot;, function(id, state) {           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tree.setItemImage(id, ''folderOpen.gif'',''folderClosed.gif'');           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; });           &lt;br /&gt;&amp;lt;/script&amp;gt;');           &lt;br /&gt;END;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="color: #1f497d"&gt;The highlighted piece of code is the substitution for my previous integration technique (which worked but not a classy way to do bussiness)…hope you like it. &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;     &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;&lt;font color="#004080"&gt;&lt;span style="font-family: &amp;#39;Arial Narrow&amp;#39;,&amp;#39;sans-serif&amp;#39;; color: black; font-size: 12pt"&gt;Thanks&lt;/span&gt;&lt;span style="font-family: &amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;; color: #1f497d; font-size: 12pt"&gt; &lt;/span&gt;&lt;/font&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;/p&gt;      &lt;p&gt;&lt;/p&gt;      &lt;p&gt;&lt;span style="font-family: &amp;#39;Arial Narrow&amp;#39;,&amp;#39;sans-serif&amp;#39;; color: black"&gt;&lt;font color="#004080" size="2" face="Verdana"&gt;Bharadwaz (Bharat) Pappu&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;h5&gt;&lt;strong&gt;From &lt;a href="http://www.oracle-and-apex.com/" target="_blank"&gt;Peter Raganitsch&lt;/a&gt;,&lt;/strong&gt; &lt;strong&gt;Subject:&lt;/strong&gt; Your Blog posting about mod_plsql flexible parameter &lt;/h5&gt;  &lt;p&gt;Hi Christian,    &lt;br /&gt;    &lt;br /&gt;I found your blog posting and learned something about flexible parameters.     &lt;br /&gt;Very interesting!     &lt;br /&gt;    &lt;br /&gt;I just wanted to tell you, that most dhtmlx-components have a method called &lt;strong&gt;preventIECaching(false);&lt;/strong&gt; to turn off sending of the additional parameter in IE.     &lt;br /&gt;    &lt;br /&gt;brgds     &lt;br /&gt;Peter&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-3944732235264845122?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/3944732235264845122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2009/12/follow-up-on-my-parameter-passing-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/3944732235264845122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/3944732235264845122'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2009/12/follow-up-on-my-parameter-passing-post.html' title='Follow-up on my &amp;quot;Flexible Parameter Passing&amp;quot; post'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-6971068242508823867</id><published>2009-11-19T15:12:00.007+01:00</published><updated>2010-12-14T14:44:34.794+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>Book Review: Oracle Application Express Forms Converter</title><content type='html'>&lt;a href="http://www.packtpub.com/oracle-application-express-forms-converter?utm_source=scamander.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_001222" target="_blank"&gt;&lt;img style="margin: 0px 10px 10px 0px; width: 120px; float: left; height: 150px; cursor: hand" id="BLOGGER_PHOTO_ID_5405818171456823506" border="0" alt="" src="http://1.bp.blogspot.com/_cFVy-bGzGXc/SwVS_FYJINI/AAAAAAAAABQ/iJcY0R8xrIY/s320/apex_forms_converter.jpg" /&gt;&lt;/a&gt; &lt;strong&gt;&lt;a href="http://www.packtpub.com/oracle-application-express-forms-converter?utm_source=scamander.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_001222" target="_blank"&gt;Oracle Application Express Forms Converter&lt;/a&gt;&lt;/strong&gt;  &lt;br /&gt;A migration guide using the APEX conversion utility  &lt;br /&gt;&lt;span style="font-size: 78%"&gt;Convert your Oracle Forms application to Oracle APEX successfully&lt;/span&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;p&gt;by &lt;a href="http://www.ome-b.nl/" target="_blank"&gt;Douwe Pieter van den Bos&lt;/a&gt;&lt;span style="font-size: 85%"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 85%"&gt;Packt Publishing 2009     &lt;br /&gt;&lt;b&gt;ISBN&lt;/b&gt; 1847197760      &lt;br /&gt;&lt;b&gt;ISBN 13&lt;/b&gt; 978-1-847197-76-4&lt;/span&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;br /&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Douwe Pieter van den Bos’s book “Oracle Application Express Forms Converter” covers all the aspects and tasks of your Forms conversion project, step-by-step, well explained and packed with screenshots. &lt;/p&gt;  &lt;p&gt;The books tutorial-like organization guides you through the whole conversion process, from planning and preparation, through conversion and customizing your application, to deploying it.&lt;/p&gt;  &lt;p&gt;If you are thinking of migrating your Oracle Forms and/or Reports to APEX, this book is a “must‑have” on your project teams reading list.&lt;/p&gt;  &lt;p&gt;Nevertheless, you will need some knowledge of Oracle Forms and APEX to make this an easy read. Instead of going into details, in some cases you will find references to the appropriate (Oracle) documentation, which makes this book an easier read, but not the ultimate reference.&lt;/p&gt;  &lt;p&gt;A very convenient, more practical aspect of the book is its size and number of pages, which seems to be optimized to fit laptop bags.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-6971068242508823867?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/6971068242508823867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2009/11/book-review-oracle-application-express.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/6971068242508823867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/6971068242508823867'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2009/11/book-review-oracle-application-express.html' title='Book Review: Oracle Application Express Forms Converter'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_cFVy-bGzGXc/SwVS_FYJINI/AAAAAAAAABQ/iJcY0R8xrIY/s72-c/apex_forms_converter.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-2370913782614213265</id><published>2009-09-30T01:41:00.004+02:00</published><updated>2009-11-20T09:58:42.363+01:00</updated><title type='text'>AJAX Bug in Firefox caused by Firebug 1.4</title><content type='html'>&lt;p&gt;Well, another post on browser behavior. Actually it's about an Add-on. This time it's about a bug I ran into using the Firebug (current version: 1.4.3). Firebug is very popular under Apex Developers, so I thought this might interest you. &lt;/p&gt;  &lt;p&gt;Firebug actually works fine, but if you are using AJAX calls in your Apex application (or any other web application), you will notice that the AJAX call is made, response received, but not processed. I tried all the other browsers, no problems; just Firefox did not behave correctly. I had no idea. A &lt;a href="http://support.mozilla.com/en-US/forum/1/452219"&gt;post&lt;/a&gt; on Firefox Support Forum ... another week of cluelessness ... finally I got a friendly hint, directing me to this blog-post:&lt;/p&gt;    &lt;div align="center"&gt;&lt;a href="http://www.nczonline.net/blog/2009/07/09/firefox-35firebug-xmlhttprequest-and-readystatechange-bug/"&gt;Firefox 3.5/Firebug XMLHttpRequest and readystatechange bug&lt;/a&gt;&amp;quot;&lt;/div&gt;  &lt;br /&gt;  &lt;p&gt;Looks like this problem is caused by Firebug and solved in the upcoming release 1.5 (currently alpha).&lt;/p&gt;  &lt;font color="#0080ff"&gt;   &lt;p&gt;&lt;font color="#0080ff"&gt;&lt;strong&gt;Update 5-nov-2009:&lt;/strong&gt;&lt;/font&gt; &lt;font color="#000000"&gt;Firebug Add-in update 1.4.4 is available. I installed the update and the mentioned problem does not occur anymore.&lt;/font&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt; &lt;/font&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-2370913782614213265?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/2370913782614213265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2009/09/ajax-bug-in-firefox-caused-by-firebug.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/2370913782614213265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/2370913782614213265'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2009/09/ajax-bug-in-firefox-caused-by-firebug.html' title='AJAX Bug in Firefox caused by Firebug 1.4'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-8250534700197817246</id><published>2009-07-23T12:14:00.003+02:00</published><updated>2009-07-23T12:53:03.156+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='session management'/><title type='text'>Session management within Internet Explorer</title><content type='html'>&lt;span style="font-family:verdana;"&gt;When developing web applications you sometimes want to develop/test your app with different users (sessions) simultaneously and not logout-login-logout-login every time to switch. When using Internet Explorer, you might have experienced some differences in session management between IE6/7 and IE8. I found &lt;/span&gt;&lt;a href="http://blogs.msdn.com/askie/archive/2009/05/08/session-management-within-internet-explorer-8-0.aspx" target="NEW"&gt;&lt;span style="font-family:verdana;"&gt;this article&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; on MSDN Blogs, which explains the differences and helped me to configure the behavior I wanted.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-8250534700197817246?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/8250534700197817246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2009/07/session-management-within-internet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/8250534700197817246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/8250534700197817246'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2009/07/session-management-within-internet.html' title='Session management within Internet Explorer'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-1798348515338889890</id><published>2009-07-17T15:52:00.016+02:00</published><updated>2010-12-15T14:20:02.591+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mod_plsql'/><category scheme='http://www.blogger.com/atom/ns#' term='DHTMLX'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>Apex f?p syntax with Flexible Parameter Passing enabled</title><content type='html'>&lt;span style="font-family: verdana"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px 20px 20px 10px; display: inline; border-top: 0px; border-right: 0px" title="url11" border="0" alt="url11" align="left" src="http://lh4.ggpht.com/_cFVy-bGzGXc/TQi_LAuvMrI/AAAAAAAAAF8/eeiYjFXqRPI/url11%5B4%5D.jpg?imgmax=800" width="244" height="162" /&gt; Apex is using its own syntax to pass URL parameters, called the f?p syntax. In fact, there is only one standard URL search-path parameter: &amp;quot;p&amp;quot;. &amp;quot;p&amp;quot; accepts a string build as:     &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new"&gt;App:Page:Session:Request:Debug:ClearCache:itemNames:itemValues:PrinterFriendly      &lt;br /&gt;
&lt;/span&gt;    &lt;br /&gt;
I am not going to explain all the individual arguments. They should be familiar to most APEX developers. I would like to discuss the &lt;span style="font-family: courier new"&gt;itemNames:itemValues&lt;/span&gt; argument pair, which allows us to pass custom parameters to our page calls.     &lt;br /&gt;
When using external libraries, like the &lt;a href="http://developer.yahoo.com/yui/"&gt;&amp;quot;Yahoo! User Interface Library&amp;quot; (YUI)&lt;/a&gt;, &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt; or (in my case) &lt;a href="http://www.dhtmlx.com/"&gt;DHTMLX&lt;/a&gt;, you might find, that the &lt;span style="font-family: courier new"&gt;f?p&lt;/span&gt; syntax is not always usable with these libraries. In some cases, URL’s get assembled by those libraries dynamically, expecting the standard search-path syntax ( &lt;url&gt;?P1&lt;par1&gt;=V1&lt;value1&gt;&amp;amp;...&amp;amp;Pn&lt;parn&gt;=Vn&lt;valuen&gt;).     &lt;br /&gt;
&lt;br /&gt;
I came across this problem when using the xmlLoad functionality in the DHTMLX library. This method adds an additional parameter to the given XML-source URL (a random value to prevent caching, I believe; strange enough only when using IE and not in other browsers).     &lt;br /&gt;
&lt;br /&gt;
One could modify these libraries to work with the &lt;span style="font-family: courier new"&gt;f?p&lt;/span&gt; syntax, and then make the modification every time you will receive an upgrade of the lib. Anyway, you probably loose support (if you have). I rather leave the lib untouched and add functionality to APEX to enable standard search-path syntax.     &lt;br /&gt;
&lt;br /&gt;
The Apex itemNames:itemValues argument pair allows us to add custom parameters in a very flexible way. But wait. &amp;quot;Flexible&amp;quot;? There already is a “flexible” way to pass parameters using PL/SQL Gateway (the very fundament of Apex http calls): &lt;strong&gt;&amp;quot;Flexible Parameter Passing&amp;quot;&lt;/strong&gt;.     &lt;br /&gt;
&lt;/span&gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: verdana"&gt;Usually a PL/SQL Gateway http call has to provide exactly those parameter names of the database procedure handling the call (except those with default values of course). This method is called &amp;quot;Parameter Passing by Name&amp;quot;. Not passing a mandatory parameter will result in an error:&lt;/span&gt;   &lt;br /&gt;
&lt;span style="font-family: verdana"&gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new"&gt;&lt;proc&gt;{proc}: SIGNATURE (parameter names) MISMATCHVARIABLES IN FORM NOT IN PROCEDURE: &lt;/span&gt;    &lt;br /&gt;
&lt;span style="font-family: courier new"&gt;NON-DEFAULT VARIABLES IN PROCEDURE NOT IN FORM: {param}&lt;parameter&gt;&lt;/span&gt;     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Passing a parameter that is not in the procedures parameter list will return a different error (obviously):     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new"&gt;{proc}: SIGNATURE (parameter names) MISMATCHVARIABLES IN FORM NOT IN PROCEDURE: {param}&lt;parameter&gt;&lt;/span&gt;     &lt;br /&gt;
&lt;span style="font-family: courier new"&gt;NON-DEFAULT VARIABLES IN PROCEDURE NOT IN FORM:      &lt;br /&gt;
&lt;/span&gt;    &lt;br /&gt;
With the PL/SQL Gateway’s Flexible Parameter Passing mechanism one can pass any number of parameters to a procedure. The called procedure has to be defined with a specific interface to handle these calls:     &lt;br /&gt;
&lt;br /&gt;
procedure [proc_name] is(name_array IN [array_type],value_array IN array_type])     &lt;br /&gt;
&lt;br /&gt;
Example:     &lt;br /&gt;
&lt;br /&gt;
If you send the following URL:     &lt;br /&gt;
&lt;span style="font-family: courier new"&gt;http://www.acme.com/pls/myDAD/!scott.my_proc?x=john&amp;amp;y=10&amp;amp;z=doe&lt;/span&gt;     &lt;br /&gt;
&lt;br /&gt;
The exclamation mark prefix (!) instructs the PL/SQL Gateway to use flexible parameter passing. It invokes procedure scott.myproc and passes it the following two arguments:     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new"&gt;name_array ==&amp;gt; ('x', 'y', 'z')&lt;/span&gt;     &lt;br /&gt;
&lt;span style="font-family: courier new"&gt;values_array ==&amp;gt; ('john', '10', 'doe')      &lt;br /&gt;
&lt;/span&gt;    &lt;br /&gt;
Using Flexible Parameter Passing, I wrote a new “f” procedure supporting:     &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;the f?p syntax arguments&lt;/li&gt;
&lt;li&gt;passing of (custom) parameters the standard way        &lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I called this procedure &amp;quot;ff&amp;quot; (flexible &amp;quot;f&amp;quot;). Here is the code:      &lt;br /&gt;
&lt;/p&gt;&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;CREATE OR REPLACE PROCEDURE apex_030200.ff (name_array IN OWA.vc_arr, value_array IN OWA.vc_arr) IS
   /******************************************************************************
   NAME:       ff
   PURPOSE:    &amp;quot;flexible parameter passing&amp;quot; enabled APEX f function

   num_entries   The number of name_value pairs in the query string
   name_array    The names from the query string (indexed from 1) in the
   order submitted.
   value_array   The values from the query string (indexed from 1) in the
   order submitted.
   reserved      Not used. It is reserved for future use.

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        15-7-2009   C. Rokitta       Created this procedure.

   NOTE:  All existing f?p syntax parameters are mapped into f?p format
   All other name/value pairs are translated into APEX f call
   syntax itemNames:itemValues:

   APEX f?p syntax:
   ----------------
   f?p=App:Page:Session:Request:Debug:ClearCache:itemNames:itemValues:PrinterFriendly

   This procedures ff syntax:
   ---------------------------
   !ff?App=1&amp;amp;Page=2&amp;amp;Session=12345&amp;amp;...&amp;amp;P1=V1&amp;amp;P2=V2 ... &amp;amp;Pn=Vn

   results in:

   f?p=1:2:12345::::P1,P2,...,Pn:V1,V2,...,Vn:

   ******************************************************************************
   C. Rokitta - christian[at]rokitta.nl
   ******************************************************************************/

   TYPE f_param_array IS TABLE OF VARCHAR2 (32767)
                            INDEX BY VARCHAR2 (20);

   v_f_p_arr   f_param_array;
   v_f_p       VARCHAR2 (32767);
   v_inames    VARCHAR2 (32767);
   v_ivalues   VARCHAR2 (32767);
BEGIN
   v_f_p_arr ('app') := '';
   v_f_p_arr ('page') := '';
   v_f_p_arr ('session') := '';
   v_f_p_arr ('request') := '';
   v_f_p_arr ('debug') := '';
   v_f_p_arr ('clearcache') := '';
   v_f_p_arr ('printerfriendly') := '';

   FOR i IN 1 .. name_array.COUNT LOOP
      IF LOWER (name_array (i)) IN
            ('app', 'page', 'session', 'request', 'debug', 'clearcache', 'printerfriendly') THEN
         v_f_p_arr (LOWER (name_array (i))) := value_array (i);
      ELSE
         IF LENGTH (v_inames) &gt; 0 THEN
            v_inames := v_inames || ',';
            v_ivalues := v_ivalues || ',';
         END IF;

         v_inames := v_inames || name_array (i);
         v_ivalues := v_ivalues || value_array (i);
      END IF;
   END LOOP;

   f (   v_f_p_arr ('app')
      || ':'
      || v_f_p_arr ('page')
      || ':'
      || v_f_p_arr ('session')
      || ':'
      || v_f_p_arr ('request')
      || ':'
      || v_f_p_arr ('debug')
      || ':'
      || v_f_p_arr ('clearcache')
      || ':'
      || v_inames
      || ':'
      || v_ivalues
      || ':'
      || v_f_p_arr ('printerfriendly'));
EXCEPTION
   WHEN OTHERS THEN
      RAISE;
END ff;
/
&lt;/pre&gt;&lt;br /&gt;
This procedure is a wrapper/translater for the Apex f procedure. All &lt;span style="font-family: courier new"&gt;f?p&lt;/span&gt; syntax arguments can be posted as named parameter (and then mapped into the &lt;span style="font-family: courier new"&gt;f?p&lt;/span&gt; syntax) and all non &lt;span style="font-family: courier new"&gt;f?p&lt;/span&gt; arguments will be placed into the &lt;span style="font-family: courier new"&gt;itemNames:itemValues&lt;/span&gt; arguments. So basically the ff procedure does exact the same as the f procedure, but then with standard URL search-path syntax.&lt;br /&gt;
&lt;br /&gt;
You have might noticed, that I created the procedure in the APEX schema. I thought this is a natural place to put, and I don’t have to worry about access right for the f procedure. Grant execute rights to PUBLIC and create a PUBLIC SYNONYM for &amp;quot;ff&amp;quot; , just like it is done for &amp;quot;f&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When testing &amp;quot;ff&amp;quot; I found, that I could not call my new procedure through the apex DAD. The DAD is secured to only allow certain (Apex) procedures to be called. Luckily one can register his own procedure in Apex, by &lt;a href="http://daust.blogspot.com/2006/04/xe-calling-stored-procedures.html"&gt;customizing the Apex function &lt;span style="font-family: courier new"&gt;WWV_FLOW_EPG_INCLUDE_MOD_LOCAL&lt;/span&gt;&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: sql; ruler: false; toolbar: false; tab-size: 3;"&gt;CREATE OR REPLACE FUNCTION wwv_flow_epg_include_mod_local (procedure_name IN VARCHAR2)
   RETURN BOOLEAN IS
BEGIN
   --return false; -- remove this statement when you modify this function
   --
   -- Administrator note: the procedure_name input parameter may be in the format:
   --
   --    procedure
   --    schema.procedure
   --    package.procedure
   --    schema.package.procedure
   --
   -- If the expected input parameter is a procedure name only, the IN list code shown below
   -- can be modified to itemize the expected procedure names. Otherwise you must parse the
   -- procedure_name parameter and replace the simple code below with code that will evaluate
   -- all of the cases listed above.
   --
   IF UPPER (procedure_name) IN ('FF') THEN
      RETURN TRUE;
   ELSE
      RETURN FALSE;
   END IF;
END wwv_flow_epg_include_mod_local;
/
&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-1798348515338889890?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/1798348515338889890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2009/07/apex-fp-syntax-with-flexible-parameter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/1798348515338889890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/1798348515338889890'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2009/07/apex-fp-syntax-with-flexible-parameter.html' title='Apex f?p syntax with Flexible Parameter Passing enabled'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_cFVy-bGzGXc/TQi_LAuvMrI/AAAAAAAAAF8/eeiYjFXqRPI/s72-c/url11%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5742906279879067605.post-8127117735343565178</id><published>2009-06-30T11:53:00.012+02:00</published><updated>2011-01-06T15:34:41.218+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='odtug'/><category scheme='http://www.blogger.com/atom/ns#' term='kaleidoscope'/><title type='text'>ODTUG Kaleidoscope 2009 - Monterey, CA</title><content type='html'>&amp;#160; &lt;br /&gt;
&lt;div&gt;&lt;div&gt;&lt;span style="font-family: verdana"&gt;&lt;img style="margin: 0px 20px 20px 0px; display: inline" align="left" src="http://www.ciphersoftinc.com/images/news/news-odtug.jpg" /&gt;Last week I visited the &lt;a href="http://www.odtugkaleidoscope.com/"&gt;ODTUG Kaleidoscope 2009 Conference&lt;/a&gt; in Monterey, California. Now, that I got over my jetlag and back to work, I'm trying to order and evaluate all the impressions, ideas and inspirations I got during this event.&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: verdana"&gt;     &lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;div&gt;I brought three green flashlight bouncing balls back home for my kids &lt;em&gt;(got them from one of the exhibiting vendors).&lt;/em&gt; Of course they had lots of fun test-bouncing these goodies immediately. This is, kind of, what I feel right now: I really would like to start playing around with some of the techniques, tools and frameworks I learned about (&amp;quot;research&amp;quot;, as I would describe it to my manager).&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;On second thought, evaluating the information I got, putting it into my work's context and then test driving it seems a better approach to me. Definitely when I saw the devastating effect of the bouncing balls on our livingroom's interior. ADF, APEX, jQuery, REST, SOAP, SOA, jXLS, ... when to use what and where? Still, the technique is not the driver, but the result that has to be achieved. So, I’m going to take a step back and take my time for a hype-free, closer look into some topics. I will try to share my findings in this blog.&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5742906279879067605-8127117735343565178?l=rokitta.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rokitta.blogspot.com/feeds/8127117735343565178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rokitta.blogspot.com/2009/06/oditug-kaleidoscope-2009-monterey-ca.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/8127117735343565178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5742906279879067605/posts/default/8127117735343565178'/><link rel='alternate' type='text/html' href='http://rokitta.blogspot.com/2009/06/oditug-kaleidoscope-2009-monterey-ca.html' title='ODTUG Kaleidoscope 2009 - Monterey, CA'/><author><name>Christian Rokitta</name><uri>http://www.blogger.com/profile/07809391154664980631</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-GIXiEvZtEXg/TfjEojs9YFI/AAAAAAAAAHw/pFN47fxEd2o/s220/cro120twtr.jpg'/></author><thr:total>0</thr:total></entry></feed>
