<?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-981234592121277205</id><updated>2012-02-16T18:48:14.218-08:00</updated><category term='tabular form'/><category term='flash'/><category term='APEX 4.0'/><category term='hyperlink'/><category term='jQuery'/><category term='Reports'/><category term='css'/><category term='javascript'/><category term='SQL'/><category term='PDF'/><category term='view'/><category term='ajax'/><category term='plug-in'/><category term='APEX'/><category term='mailing labels'/><category term='template'/><category term='button'/><category term='Conversion'/><category term='LDAP'/><title type='text'>APEX / Javascript / CSS</title><subtitle type='html'>My experience withe Oracle Application Express (APEX), Javascript, and Cascading StyleSheets (CSS).</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Robert Gerstein</name><uri>http://www.blogger.com/profile/16618133192611829467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-8471044456600347706</id><published>2010-06-23T05:40:00.000-07:00</published><updated>2010-06-23T05:57:43.956-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Flash Charts - XML Loading Failed</title><content type='html'>Has this ever happen to you....&lt;br/&gt;&lt;br/&gt;You tested your application, that includes a simple 2D flash chart, throughly in the development environment, then you had your customer test it out as well fixing issues as they come up. When the testing is completed, you put it in the production environment. Everything should work the same. Right????&lt;br/&gt;&lt;br/&gt;
Well, not necesarily in the real world!! In this case, the system had a flash chart on the first page. I was getting a XML Loading Failed error when using IE8 but did not get the message while using Firefox 3.6. Since IE is about 60% of the market, the issue had to be resolved!!!&lt;br/&gt;&lt;br/&gt;
After creating an SR with Oracle Support, I found out it it was related to the reverse proxy server at my office. The reverse proxy server allows the public access to the specified server only. Well, the reverse proxy server has several different settings (I do not know what they are since it was configured by another technical group.). The group had to change the settings to allow Flash charts to be displayed.&lt;br/&gt;&lt;br/&gt;
This issue is described in My Oracle Support Note: 429364.1 Create Flash Chart Region Process Errors With Xml Loading Failed Error Message..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-8471044456600347706?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/8471044456600347706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/06/flash-charts-xml-loading-failed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/8471044456600347706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/8471044456600347706'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/06/flash-charts-xml-loading-failed.html' title='Flash Charts - XML Loading Failed'/><author><name>Robert Gerstein</name><uri>http://www.blogger.com/profile/16618133192611829467</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-5857196558625931275</id><published>2010-05-25T05:58:00.000-07:00</published><updated>2010-05-25T05:59:43.881-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><category scheme='http://www.blogger.com/atom/ns#' term='tabular form'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Tabular Form - Aligning at the Top!</title><content type='html'>I recently created a manual tabular form that consisted of both text as well as textarea items. It seems that, by default, the items are&amp;nbsp;vertically center aligned. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/_qZnioks4Dh4/S_vI-GgZzMI/AAAAAAAAABo/DPaLw2ua8Hs/s1600/align+default.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" height="78" src="http://4.bp.blogspot.com/_qZnioks4Dh4/S_vI-GgZzMI/AAAAAAAAABo/DPaLw2ua8Hs/s320/align+default.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
In order to align all items at the top border, you have to use CSS. You need to identify the class of the table and change the style to align at the top. For example, you would put the following in your page's HTML Header section:&lt;br /&gt;
&lt;pre&gt;&amp;lt;style&amp;gt;
.t15standard td{vertical-align:top}
&amp;lt;/style&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Now the same form looks like this:&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/_qZnioks4Dh4/S_vJMHZ6QVI/AAAAAAAAABs/AYWjpAAbLmE/s1600/align+top.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" height="80" src="http://4.bp.blogspot.com/_qZnioks4Dh4/S_vJMHZ6QVI/AAAAAAAAABs/AYWjpAAbLmE/s320/align+top.jpg" width="320" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-5857196558625931275?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/5857196558625931275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/05/tabular-form-aligning-at-top.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/5857196558625931275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/5857196558625931275'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/05/tabular-form-aligning-at-top.html' title='Tabular Form - Aligning at the Top!'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qZnioks4Dh4/S_vI-GgZzMI/AAAAAAAAABo/DPaLw2ua8Hs/s72-c/align+default.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-2887102652106414491</id><published>2010-05-15T11:09:00.000-07:00</published><updated>2010-05-16T09:44:47.646-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><category scheme='http://www.blogger.com/atom/ns#' term='tabular form'/><title type='text'>Manual Tabular Form</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_qZnioks4Dh4/S-7jIRygehI/AAAAAAAAABM/V_AamxpdYTE/s1600/man_form-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_qZnioks4Dh4/S-7jIRygehI/AAAAAAAAABM/V_AamxpdYTE/s1600/man_form-1.jpg" wt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;The wizard creates a tabular form quickly and the form is optimized for performance. Also, page processing is handled automatically (no custom code). However, it is restricted in the following:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Validations – Errors have to be displayed on an error page. &lt;/li&gt;
&lt;li&gt;Check boxes are not allowed to be displayed (except if it is only an image – not updateable)&lt;/li&gt;
&lt;li&gt;Multiple tabular forms per page – only one tabular form can be displayed on a page&lt;/li&gt;
&lt;/ul&gt;You can overcome these restrictions by creating one or more tabular forms manually. Creating manual forms uses the following features:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Collections &lt;/li&gt;
&lt;li&gt;APEX_ITEM&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Collections&lt;/b&gt;&lt;br /&gt;
Collections are temporary tables that are deleted when the session ends. So they are like temporary storage. They can be used as a holding place for data. You can store up to 50 items (all characters) and one CLOB field.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;APEX_ITEM&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;APEX_ITEM is a package to create items on a page dynamically based on a SQL query instead of creating static items. The following functions can be used to create items:&lt;/li&gt;
&lt;li&gt;CHECKBOX &lt;/li&gt;
&lt;li&gt;DATE_POPUP &lt;/li&gt;
&lt;li&gt;DISPLAY_AND_SAVE &lt;/li&gt;
&lt;li&gt;HIDDEN &lt;/li&gt;
&lt;li&gt;MD5_CHECKSUM &lt;/li&gt;
&lt;li&gt;MD5_HIDDEN &lt;/li&gt;
&lt;li&gt;POPUP_FROM_LOV &lt;/li&gt;
&lt;li&gt;POPUP_FROM_QUERY &lt;/li&gt;
&lt;li&gt;POPUPKEY_FROM_LOV&amp;nbsp;&lt;/li&gt;
&lt;li&gt;POPUPKEY_FROM_QUERY &lt;/li&gt;
&lt;li&gt;RADIOGROUP &lt;/li&gt;
&lt;li&gt;SELECT_LIST &lt;/li&gt;
&lt;li&gt;SELECT_LIST_FROM_LOV&amp;nbsp;&lt;/li&gt;
&lt;li&gt;SELECT_LIST_FROM_LOV_XL &lt;/li&gt;
&lt;li&gt;SELECT_LIST_FROM_QUERY&amp;nbsp;&lt;/li&gt;
&lt;li&gt;SELECT_LIST_FROM_QUERY_XL &lt;/li&gt;
&lt;li&gt;TEXT &lt;/li&gt;
&lt;li&gt;TEXTAREA &lt;/li&gt;
&lt;li&gt;TEXT_FROM_LOV&amp;nbsp;&lt;/li&gt;
&lt;li&gt;TEXT_FROM_LOV_QUERY &lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;b&gt;Steps to Create a Manual Tabular Form&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;In order to create a manual tabular form, you following a six-step process:&lt;br /&gt;
1. Create Collection &lt;br /&gt;
2. Create a Report based on the Collection&lt;br /&gt;
3. Create Buttons&lt;br /&gt;
4. Update the Collection&lt;br /&gt;
5. Add new Row&lt;br /&gt;
6. Update the Database from the Collection&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;b&gt;1. Create Collection&lt;/b&gt;&lt;br /&gt;
Create a Process that executes on loading the page (On Load – Before Header process). The process checks if the collection already exists. If it does, delete it. Then you create the collection from a query. Lastly, you set a condition on the process to only create the condition if the collection doesn’t exists or if the RESET button is pressed.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Source:&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: sql"&gt;&lt;span style="font-size: x-small;"&gt;IF apex_collection.collection_exists (Collection name) = TRUE THEN
     apex_collection.delete_collection(p_collection_name =&amp;gt; 'OEHR_EMPLOYEES_COLL' );
END IF;
apex_collection.create_collection_from_query(
     p_collection_name =&amp;gt; Collection name,
     p_query =&amp;gt; 'select field1 alias1
          , field2 alias2
     , field3 alias3
          .
          .
          .
     , fieldn aliasn
     , ''O'' original_flag
     , wwv_flow_item.md5(field1, field2, field3,…, fieldn)
          from Table Name',
     p_generate_md5 =&amp;gt; 'YES');
&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
CONDITIONS: &lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;Example:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_qZnioks4Dh4/S-7hjUhI34I/AAAAAAAAAAs/7FXaP5x_fBY/s1600/man_form_load_cond-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_qZnioks4Dh4/S-7hjUhI34I/AAAAAAAAAAs/7FXaP5x_fBY/s1600/man_form_load_cond-1.jpg" wt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Create a Report based on the Collection&lt;/b&gt;&lt;br /&gt;
Instead of selecting the data directly from the table (or view), you will select the columns from the collection itself (or you can create a view of the collection and use the view instead). Remember the collection will be updated throughout your session so the database will remain intact. Collections can have up to 50 columns with character datatype(varchar2(4000)) named C001,0C02, C003,…., C050 and one large character attribute (CLOB) column named CLOB001. C001 is usually used for the key field (it will be hidden on the screen and populate via Before Insert Trigger using a Sequence). Also, you need to append the select statement with a null row so you can insert records as well. Lastly, in the Report Attributes, re-order the columns so that the checkbox item (i.e., chkbx) is the first column.&lt;br /&gt;
&lt;i&gt;Source (Example):&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: sql"&gt;&lt;span style="font-size: x-small;"&gt;SELECT
     apex_item.hidden(1,c001) id 
     ,decode(c010,'N',apex_item.text(2,c002)
     ,apex_item.display_and_save(2,c002)) last_name
     ,apex_item.text(3,c003,8) email
     ,apex_item.date_popup (4,null,c004,'DD-MON-YYYY',10,null,null
     ,lpad(to_char(rownum),4,'0')) hiredate
     ,apex_item.select_list_from_query(5,c005,
          'select distinct job_id, job_id 
           from oehr_employees order by 1 asc ',10) job
     , apex_item.text(6,c006,6) salary
     , apex_item.text(7,c007,6) commission
     , apex_item.popupkey_from_query(8,c008,
          'select last_name, employee_id 
           from oehr_employees order by 1 asc ',10) manager
     , apex_item.select_list_from_query(10,c009,
          'select department_name, department_id 
           from oehr_departments order by 1 asc',10) dname
     , apex_item.hidden(11, c010) status
     , apex_item.checkbox(12, seq_id) chkbx
     , apex_item.hidden(13, seq_id) seq_id
FROM apex_collections
WHERE collection_name= 'OEHR_EMPLOYEES_COLL' 
     AND c010 IN ('O','N','U') -- no deletes
union all -- add a blank row
SELECT
     apex_item.hidden(1,null) id
     , decode(null,'N',apex_item.text(2,null),apex_item.text(2,null)) last_name
     , apex_item.text(3,null,8) email
     , apex_item.date_popup(4,null,null,'DD-MON-YYYY',10,null,null,
lpad(to_char(rownum),4,'0')) hiredate
     , apex_item.select_list_from_query(5,null,
'select distinct job_id, job_id 
       from oehr_employees order by 1 asc ',10) job
     , apex_item.text(6,null,6) salary
     , apex_item.text(7,null,6) commission
     , apex_item.popupkey_from_query(8,null,
     'select last_name,employee_id 
          from oehr_employees order by 1 asc ',10) manager
     , apex_item.select_list_from_query(10,null,
     'select department_name,department_id 
          from oehr_departments order by 1 asc ',10) dname
     , apex_item.hidden(11, null) status
     , apex_item.checkbox(12, null) chkbx
     , apex_item.hidden(13, null) seq_id
from dual
&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Create Buttons&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_qZnioks4Dh4/S-7h0vcwnZI/AAAAAAAAAA0/tlgtI5fXBzU/s1600/man_form_buttons-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="46" src="http://1.bp.blogspot.com/_qZnioks4Dh4/S-7h0vcwnZI/AAAAAAAAAA0/tlgtI5fXBzU/s400/man_form_buttons-1.jpg" width="400" wt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to create four buttons: Apply Changes (to post all changes to the database), Add button (to add new rows), delete button (to delete rows that are checked), and the reset button (to null all changes that were not posted and return to the data from the database. These buttons should be positioned at the top of the form (see above). For example, the follow buttons are for the Employee example. &lt;br /&gt;
When you create each button, supply the following information as described in the figure below:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Button Name: name of the button (this name can be referenced by the :REQUEST variable)&lt;/li&gt;
&lt;li&gt;Text Label/Alt: the text that would appear within the button (e.g., Apply Changes)&lt;/li&gt;
&lt;li&gt;Display in Region: select the manual tabular form region&lt;/li&gt;
&lt;li&gt;Button Position: Top of Region&lt;/li&gt;
&lt;li&gt;Button Alignment: Right&lt;/li&gt;
&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_qZnioks4Dh4/S_AetgR4-hI/AAAAAAAAABY/vAA2zfM9lw8/s1600/button_def_small.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_qZnioks4Dh4/S_AetgR4-hI/AAAAAAAAABY/vAA2zfM9lw8/s320/button_def_small.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;For Reset Button Only - Optional URL Direct &amp;gt;Target is a : &lt;i&gt;Page in this Application&lt;/i&gt;, Page: &lt;i&gt;current page&lt;/i&gt;, Clear cache: &lt;i&gt;current page&lt;/i&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_qZnioks4Dh4/S_Af5ZhZ29I/AAAAAAAAABg/k8ziw6VTosw/s1600/button_def_small.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_qZnioks4Dh4/S_Af5ZhZ29I/AAAAAAAAABg/k8ziw6VTosw/s320/button_def_small.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="border: medium none;"&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Update the Collection&lt;/b&gt;&lt;br /&gt;
When either updates or deletions are done to the tabular form or pagination is performed, the collection needs to be updated. The database will not be updated until the APPLY CHANGES button is pressed. Until then, the collection will be updates (i.e., it is in a state of flux). Create a process that will fire before validation (Process Point: On Submit – Before Computation). You also have to set a condition so that the process will not fire when the ADD ROW button (e.g., ADD EMPLOYEE) is pressed.&lt;br /&gt;
Source: (An example)&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: sql"&gt;&lt;span style="font-size: x-small;"&gt;DECLARE
     l_status VARCHAR2(1);
     l_seq_id NUMBER;
     l_original_md5 VARCHAR2(4000);
     l_array_md5 VARCHAR2(4000);
     l_exists boolean := FALSE;
BEGIN
--
FOR i IN 1..apex_application.g_f01.count LOOP
   if apex_application.g_f13(i) IS NOT NULL THEN
      SELECT c010
         , c011
      INTO l_status
         , l_original_md5
      FROM apex_collections
      WHERE collection_name = 'OEHR_EMPLOYEES_COLL'
         AND seq_id = apex_application.g_f13(i);
--
-- For existing rows only
-- 1. calculate the new md5
-- 2. if md5 changed, set status to 'U'
-- For new or updated rows, update collection
--
--
-- For existing rows: create an mad5 calculation and if it is different from original md5 calculation, set it status to ‘U’
--
IF l_status &amp;lt;&amp;gt; 'N' THEN
   SELECT wwv_flow_item.md5(apex_application.g_f01(i)
      , apex_application.g_f02(i)
      , apex_application.g_f03(i)
      , apex_application.g_f04(i)
      , apex_application.g_f05(i)
      , apex_application.g_f06(i)
      , apex_application.g_f07(i)
      , apex_application.g_f08(i)
      , apex_application.g_f10(i))
INTO l_array_md5
FROM DUAL;
   IF l_original_md5 != l_array_md5 THEN
      l_status := 'U';
   END IF;
END IF;
--
-- For new or updated rows: update the collection member
--
IF l_status IN ('N','U') THEN
   apex_collection.update_member(p_collection_name =&amp;gt; 'OEHR_EMPLOYEES_COLL'
      , p_seq =&amp;gt; apex_application.g_f13(i)
      , p_c001 =&amp;gt; apex_application.g_f01(i)
      , p_c002 =&amp;gt; apex_application.g_f02(i)
      , p_c003 =&amp;gt; apex_application.g_f03(i)
      , p_c004 =&amp;gt; apex_application.g_f04(i)
      , p_c005 =&amp;gt; apex_application.g_f05(i)
      , p_c006 =&amp;gt; apex_application.g_f06(i)
      , p_c007 =&amp;gt; apex_application.g_f07(i)
      , p_c008 =&amp;gt; apex_application.g_f08(i)
      , p_c009 =&amp;gt; apex_application.g_f10(i)
      , p_c010 =&amp;gt; l_status
      , p_c011 =&amp;gt; l_original_md5
   );
   END IF;
END IF;
END LOOP;
--
-- DELETE EMPLOYEE - if employee was added, delete member from collection
-- if employee already existed, set status to 'D'
--
IF :REQUEST = 'DELETE_EMPLOYEE' THEN
   FOR i IN 1..apex_application.g_f12.count LOOP
      if apex_application.g_f12(i) IS NOT NULL THEN
         :p22_num_deleted := :p22_num_deleted + 1;
         SELECT seq_id
            , c010
         INTO l_seq_id
            , l_status
         FROM wwv_flow_collections
         WHERE collection_name = 'OEHR_EMPLOYEES_COLL'
            AND seq_id = apex_application.g_f12(i);
         IF l_status = 'N' THEN
            apex_collection.delete_member(p_collection_name =&amp;gt; 'OEHR_EMPLOYEES_COLL'
               , p_seq =&amp;gt; l_seq_id
            );
         ELSE
            apex_collection.update_member_attribute(            p_collection_name =&amp;gt; 'OEHR_EMPLOYEES_COLL'
               , p_seq =&amp;gt; l_seq_id
               , p_attr_number =&amp;gt; '10'
               , p_attr_value =&amp;gt; 'D'
            );
         END IF;
      END IF;
   END LOOP;
END IF;
--
-- Set the success message
--
if to_number (:p22_num_deleted )&amp;gt; 0 then
   apex_application.g_print_success_message :=          apex_application.g_print_success_message ||
:p22_num_deleted ;
   if to_number (:p22_num_deleted) = 1 then
      apex_application.g_print_success_message := apex_application.g_print_success_message ||
' Employee Deleted';
   else
      apex_application.g_print_success_message := apex_application.g_print_success_message ||
' Employees Deleted';
   end if;
end if;
END;
&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
CONDITIONS (Example)&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_qZnioks4Dh4/S-7hjUhI34I/AAAAAAAAAAs/7FXaP5x_fBY/s1600/man_form_load_cond-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_qZnioks4Dh4/S-7hjUhI34I/AAAAAAAAAAs/7FXaP5x_fBY/s1600/man_form_load_cond-1.jpg" wt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. Add New Row&lt;/b&gt;&lt;br /&gt;
When either add new row is pressed, the collection needs to be updated to include the new row. The database will not be updated until the APPLY CHANGES button is pressed. Until then, the collection will be updates (it is in a state of influx). Create a process that will fire before validation (Process Point: On Submit – Before Computation). You also have to set a condition so that the process will only fire when the ADD ROW button (e.g., ADD EMPLOYEE) is pressed.&lt;br /&gt;
&lt;br /&gt;
Source: (Example)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: sql"&gt;&lt;span style="font-size: x-small;"&gt;declare
   l_status varchar2(1);
begin
   l_status := 'N';
   for i IN 1..apex_application.g_f01.count LOOP
      if apex_application.g_f01(i) is null then
         apex_application.g_f13(i) := apex_collection.add_member(
            p_collection_name =&amp;gt; 'OEHR_EMPLOYEES_COLL',
            p_c001 =&amp;gt; apex_application.g_f01(i),
            p_c002 =&amp;gt; apex_application.g_f02(i),
            p_c003 =&amp;gt; apex_application.g_f03(i),
            p_c004 =&amp;gt; apex_application.g_f04(i),
            p_c005 =&amp;gt; apex_application.g_f05(i),
            p_c006 =&amp;gt; apex_application.g_f06(i),
            p_c007 =&amp;gt; apex_application.g_f07(i),
            p_c008 =&amp;gt; apex_application.g_f08(i),
            p_c009 =&amp;gt; apex_application.g_f10(i),
            p_c010 =&amp;gt; l_status,
            p_generate_md5 =&amp;gt; 'YES' );
      end if;
   END LOOP;
end;
&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
CONDITIONS (Example)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_qZnioks4Dh4/S-7hjUhI34I/AAAAAAAAAAs/7FXaP5x_fBY/s1600/man_form_load_cond-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_qZnioks4Dh4/S-7hjUhI34I/AAAAAAAAAAs/7FXaP5x_fBY/s1600/man_form_load_cond-1.jpg" wt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;6. Update the Database from the Collection&lt;/b&gt;&lt;br /&gt;
When either APPLY CHANGES is pressed, it is now time to update the database from the collection. Create a process that will fire before validation (Process Point: On Submit – After Computation). You also have to set a condition so that the process will only fire when the APPLY CHANGES button (e.g.,UPDEMP) is pressed. In this procedure, you calculate the number of rows deleted, added, and updated and display the result in the success message (i.e., apex_application.g_print_success_message).&lt;br /&gt;
Source: (An example)&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: sql"&gt;&lt;span style="font-size: x-small;"&gt;DECLARE
   l_table_md5 VARCHAR2(4000);
   l_array_md5 VARCHAR2(4000);
   l_collection_md5 VARCHAR2(4000);
BEGIN
   :p22_num_updated := 0;
   :p22_num_added := 0;
   :p22_num_deleted := 0;
   FOR c1 IN (SELECT c001, c002, c003, c004, c005, c006, c007, c008, c009, c010, c011, seq_id
      FROM apex_collections
      WHERE collection_name = 'OEHR_EMPLOYEES_COLL'
   ) LOOP
--
-- New - insert it
--
      IF c1.c010 = 'N' THEN
         :P22_NUM_ADDED:= :P22_NUM_ADDED+ 1;
         INSERT INTO v_oehr_employees (employee_id, last_name, email, hire_date, job_id, salary,
            commission_pct, manager_id, department_id )
         VALUES (c1.c001, c1.c002, c1.c003, c1.c004, c1.c005, c1.c006, c1.c007, c1.c008, c1.c009 );
--
-- Delete row
--
      ELSIF c1.c010 = 'D' THEN
         DELETE FROM v_oehr_employees WHERE employee_id = c1.c001;
--
-- Update changed row
--
      ELSIF c1.c010 = 'U' THEN
         SELECT wwv_flow_item.md5(employee_id, last_name, email, hire_date, job_id, salary,
         commission_pct, manager_id, department_id)
         INTO l_table_md5
         FROM v_oehr_employees
         WHERE employee_id = c1.c001;
         IF l_table_md5 != c1.c011 THEN
            raise_application_error( -20001, 'Current version of data in database has changed since user initiated update process.');
            RETURN;
         END IF;
         SELECT wwv_flow_item.md5(to_number(c1.c001), c1.c002, c1.c003, to_date(c1.c004), c1.c005, to_number(c1.c006),
            to_number(c1.c007), to_number(c1.c008), to_number(c1.c009))
         INTO l_array_md5 
         FROM dual;
         IF c1.c011 &amp;lt;&amp;gt; l_array_md5 THEN 
            :p22_num_updated := :p22_num_updated + 1;
            UPDATE v_oehr_employees
            SET last_name = c1.c002,
               email = c1.c003,
               hire_date = c1.c004,
               job_id = c1.c005,
               salary = c1.c006,
               commission_pct = c1.c007,
               manager_id = c1.c008,
               department_id = c1.c009
          WHERE employee_id = c1.c001;
      END IF;
   END IF;
END LOOP;
--
-- Set Success Message
--
if to_number (:p22_num_updated )&amp;gt; 0 then
   apex_application.g_print_success_message :=    apex_application.g_print_success_message || :p22_num_updated ;
if to_number (:p22_num_updated) = 1 then
   apex_application.g_print_success_message := apex_application.g_print_success_message || ' Employee Updated';
else
   apex_application.g_print_success_message := apex_application.g_print_success_message || ' Employees Updated';
   end if;
end if;
if to_number (:p22_num_deleted )&amp;gt; 0 then
   apex_application.g_print_success_message := apex_application.g_print_success_message ||:p22_num_deleted ;
   if to_number (:p22_num_deleted) = 1 then
      apex_application.g_print_success_message := apex_application.g_print_success_message || ' Employee Deleted';
   else
      apex_application.g_print_success_message := apex_application.g_print_success_message || ' Employees Deleted';
   end if;
end if;
if to_number (:P22_NUM_ADDED )&amp;gt; 0 then
   apex_application.g_print_success_message := apex_application.g_print_success_message ||:P22_NUM_ADDED ;
   if to_number (:P22_NUM_ADDED) = 1 then
      apex_application.g_print_success_message :=       apex_application.g_print_success_message || ' Employee Added';
   else
      apex_application.g_print_success_message := apex_application.g_print_success_message || ' Employees Added';
   end if;
end if;
--
-- Clean up: delete collection
--
apex_collection.delete_collection( p_collection_name =&amp;gt; 'OEHR_EMPLOYEES_COLL' );
END;
&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
CONDITIONS (Example):&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_qZnioks4Dh4/S-7hjUhI34I/AAAAAAAAAAs/7FXaP5x_fBY/s1600/man_form_load_cond-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_qZnioks4Dh4/S-7hjUhI34I/AAAAAAAAAAs/7FXaP5x_fBY/s1600/man_form_load_cond-1.jpg" wt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;
Creating a manual tabular form is only a five-step process that provides more flexibility and overcomes restrictions of declarative tabular form (i.e., created by a wizard). APEX 4.0 will have validations as well as additional item types (such as radio buttons) for tabular forms. Until APEX 4.0 is available (rumors have circulated that will be in June 2010 or July 2010), all tabular forms should be created manually using collections.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-2887102652106414491?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/2887102652106414491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/05/manual-tabular-form.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/2887102652106414491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/2887102652106414491'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/05/manual-tabular-form.html' title='Manual Tabular Form'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qZnioks4Dh4/S-7jIRygehI/AAAAAAAAABM/V_AamxpdYTE/s72-c/man_form-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-4250468165756640766</id><published>2010-04-22T07:32:00.000-07:00</published><updated>2010-04-22T09:47:20.788-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>APEX Error Page</title><content type='html'>I recently had to use the Error Page for Tabular Form's validation errors. It was not pretty. It includes the error message , OK hyperlink, an Error icon, and the error message created in your function. The page does not have any formatting. It is UGLY!!&lt;br /&gt;
&lt;br /&gt;
I found out (form the Discussion Forum) that the template used is in your Theme. I found out mine was using the Login template. That is why it was so UGLY! So I created a new template for the Error Page...&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;I copied the Login template to a new template (let's call it Error Page).&lt;/li&gt;
&lt;li&gt;I modified the template to place a box around it with a background color of light grey. In the "Body" of the template, I wrapped BOX_BODY in a table.&lt;/li&gt;
&lt;pre class="brush: html"&gt;&amp;lt;table border="1" style="background-color:#E0E0E0;border-width: 1px;border-spacing: ;border-style: solid;border-color: black;border-collapse: collapse;"&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;#BOX_BODY#&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
&lt;/pre&gt;&lt;li&gt;In the theme,I changed template for Error Page to ERROR PAGE&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
...now I have a better looking Error Page.&lt;br /&gt;
&lt;br /&gt;
Now, I want to format my error so the error would stand out to the user:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Bold the general error message. In the error message in the validation, wrap the &amp;lt;span style="font-weight:bold"&amp;gt; ... &amp;lt;/span&amp;gt; tag around the error message.&lt;/li&gt;
&lt;li&gt;Highlight the detailed error message in red.In the detailed error message in the validation, wrap the &amp;lt;span style="color:red"&amp;gt; ... &amp;lt;/span&amp;gt; tag around the detailed error message in your function.&lt;/li&gt;
&lt;li&gt;Close the error message with "Click OK to correct your error" by appending it to your message is the function (e.g. l_error := l_error || 'Click OK to correct your error.';).&lt;/li&gt;
&lt;li&gt;Separate the closing message from the error message with a line.e.g. l_error := l_error || &amp;lt;hr /&amp;gt;;). (before the previous step)&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
... now I have a better looking Error message.&lt;br /&gt;
&lt;br /&gt;
But....&lt;br /&gt;
&lt;br /&gt;
I have to replicate the above in each of the error messages for each tabular form. That can be extensive. So I decided to create two functions in the package that I am using for the application:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;error_line_wrap - this function wraps each error message with the needed format. A tabular form may have a message for each row.&lt;/li&gt;
&lt;li&gt;error_close_wrap - this function adds the line and "Click OK to correct your error" to the end of the message.&lt;/li&gt;
&lt;/ul&gt;While each validation function has to reference these two functions, it has several advantages:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;If I want to change the format of the error line or closing error message, I only have to change it one place.&lt;/li&gt;
&lt;li&gt;A consistent look throughout the application.&lt;/li&gt;
&lt;li&gt;If the application is developed by several developers, each developer would just need to use the same functions.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Now I have a formatted error page and messages that are easy to create.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-4250468165756640766?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/4250468165756640766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/04/apex-error-page.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/4250468165756640766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/4250468165756640766'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/04/apex-error-page.html' title='APEX Error Page'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-1973944976719539472</id><published>2010-04-15T18:53:00.000-07:00</published><updated>2010-04-22T06:40:22.787-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery</title><content type='html'>&lt;b&gt;&lt;i&gt;Introduction to JQuery&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div id="tabs"&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=981234592121277205&amp;amp;postID=1973944976719539472#tab1"&gt;Why jQuery?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=981234592121277205&amp;amp;postID=1973944976719539472#tab2"&gt;Install jQuery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=981234592121277205&amp;amp;postID=1973944976719539472#tab3"&gt;Tutorial - Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=981234592121277205&amp;amp;postID=1973944976719539472#tab4"&gt;Animation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=981234592121277205&amp;amp;postID=1973944976719539472#tab5"&gt;jQuery UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=981234592121277205&amp;amp;postID=1973944976719539472#tab6"&gt;UI widgets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div id="tab1"&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp;What does jQuery do for you? It makes your life easier on the Web. That is what!&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;It is cross-browser!&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
That means it works in all major browsers including older versions such as IE5 and IE6. You don't have to wonder if it will work in IE and FoxPro.&amp;nbsp; You don't have to test in all browsers. If you use jQuery, it will work. It was already tested!&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;Small in size &lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
The base javascript library is about 55K, less than most image fileswebpage. If you use the UI, you only need to include the one for your theme, not all themes.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;Great widgets!! Some of the ones included are:&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Date Picker&lt;/li&gt;
&lt;li&gt;Dialog Box&lt;/li&gt;
&lt;li&gt;Accordion&lt;/li&gt;
&lt;li&gt;Tabs&lt;/li&gt;
&lt;li&gt;Drop and Drag&lt;/li&gt;
&lt;li&gt;Fixed-length Formatted Fields&lt;/li&gt;
&lt;li&gt;Tooltips&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Only one line is usually needed!&lt;/b&gt; &lt;br /&gt;
&lt;i&gt;$(node).method&lt;/i&gt; &lt;br /&gt;
For example, $("#accordion").accordion will create an accordion widget for div with an id accordion.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;You keep events, widgets, css changes, etc. away from your HTML.&amp;nbsp; &lt;/b&gt;&lt;br /&gt;
It is kept within the javascript code in the header.&amp;nbsp; Usually it run in a function called by &amp;nbsp; $(initialize_function) where initialize_function will run all your events, widgets, etc.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;It can be used in APEX&lt;/b&gt; (Also, APEX 4.0 will be using jQuery in the tool itself). &lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div id="tab2"&gt;&lt;b&gt;&lt;i&gt;Install jQuery&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
You can install two ways:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Download jQuery and Install it on your server &lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Go to http://www.jquery.com and download the latest version.&lt;/li&gt;
&lt;li&gt;Add the following code to your header.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: js"&gt;&amp;lt;script type="text/javascript" src="jquery-1.3.2.min.js"&amp;gt;&amp;lt;script&amp;gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Importing jQuery from Google&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Add the following in your header (i.e., &amp;lt;HEAD&amp;gt;) (Please note: the number parameter is the version.): &lt;br /&gt;
&lt;pre class="brush: js"&gt;&amp;lt;script type="text/javascript" src="http://www.google.com/jsapi"&amp;gt;
&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" &amp;gt;
  google.load("jquery", "1.4.2");
  google.load("jqueryui", "1.7.2");
&amp;lt;/script&amp;gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Structure of a jQuery Statement&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
The jQuery statement has usually two parts: node and method:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;jQuery node -&lt;i&gt;&amp;nbsp;&lt;/i&gt;$("&lt;/b&gt;identifier"&lt;b&gt;) &lt;/b&gt;where identifier is an id (&lt;i&gt;#div_id_name&lt;/i&gt;) or a class (&lt;i&gt;.class_name&lt;/i&gt;) or tag (for example, h1). &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;method - jQuery node.method &lt;/b&gt;such as $("#&lt;i&gt;div_id_name&lt;/i&gt;").html ("&lt;i&gt;html_code&lt;/i&gt;"). So $(h1).hide will hide all H1. And, $(#accordion_section).accordion will create an accordion for a DIV that has an id accordion_section. Lastly, $(.reg_hdr).tab will create tabs for a div whose class is reg_hdr.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Simple Methods&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;&lt;ul&gt;&lt;li&gt;html&amp;nbsp; to create html - html ("html_code");&lt;/li&gt;
&lt;li&gt;css ("style_rule","value") e,g, $("h1).css ("backgroundColor","yellow"); or JSON$("#my_div_id").css({"backgroundColor":"black","color": "white"});&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;em&gt;&lt;strong&gt;Cheat Sheet&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;
Click &lt;a href="http://www.futurecolors.ru/jquery/"&gt;here&lt;/a&gt; for jQuery 1.4 Cheat Sheet:&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Events&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;blockquote&gt;Events can be issued with jQuery statements without affecting the HTML code. You usually call a function to perform the action.&lt;/blockquote&gt;&lt;blockquote&gt;Some examples are: &lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;hover - $(node).hover(&lt;i&gt;hover_function&lt;/i&gt;, &lt;i&gt;no_hover_function&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;click - $(node).click (&lt;i&gt;click_function&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;change - $(node).change (&lt;i&gt;change_function&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;dblclick - $(node).dblclick (&lt;i&gt;double_click_function&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;focus - $(node).focus (&lt;i&gt;focus_function&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;keydown&amp;nbsp;- $(node).keydown (&lt;i&gt;keydown_function&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;mousedown - $(node).mousedown&amp;nbsp; (&lt;i&gt;mouse_down_function&lt;/i&gt;);&lt;/li&gt;
&lt;li&gt;select - $(node).select (&lt;i&gt;select_function&lt;/i&gt;); &lt;/li&gt;
&lt;/ul&gt;&lt;i&gt;&lt;b&gt;Ajax&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Create an empty div in the html&lt;/li&gt;
&lt;li&gt;In script:&lt;/li&gt;
&lt;/ol&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).ready (getAJAX_function); or&amp;nbsp;&amp;nbsp; $(getAJAX_function)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getAJAX_function(){ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; $("#div id").load ("text filename"};&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;div id="tab4"&gt;&lt;br /&gt;
&amp;nbsp;&lt;b&gt;&lt;i&gt;Animation&lt;/i&gt;&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Show a hidden area&lt;/b&gt; &lt;i&gt;- $("#div_id"&lt;/i&gt;).show():&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Hide a visible area&lt;/b&gt; &lt;i&gt;- $("#div_id")&lt;/i&gt;.hide():&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Toggle area&lt;/b&gt;&lt;i&gt; -&amp;nbsp; $("#div_id").&lt;/i&gt;toggle():&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Slide Down an area&lt;/b&gt; &lt;i&gt;- $("#div_id").&lt;/i&gt;slidedown&lt;i&gt;("speed"): speed = low, medium, fast or milliseconds&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Slide Up an area&lt;/b&gt;&lt;i&gt;- $("#div_id").&lt;/i&gt;slideup&lt;i&gt;("speed"): speed = low, medium, fast or milliseconds&lt;/i&gt; &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Fade In an area&lt;/b&gt;-&lt;i&gt; $("#div_id").&lt;/i&gt;fadeIn&lt;i&gt;("speed", function): speed = low, medium, fast or milliseconds&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Fade Out an area&lt;/b&gt; &lt;i&gt;- $("div_id").&lt;/i&gt;fadeout&lt;i&gt;("speed"): speed = low, medium, fast or milliseconds&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div id="tab5"&gt;&lt;b&gt;&lt;i&gt;UI (User Interface)&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;b&gt;Adding an icon&amp;nbsp;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;1. you add a theme&lt;br /&gt;
2. make sure the icons are accessible&lt;br /&gt;
3. $("&lt;i&gt;div id&lt;/i&gt;").append('&amp;lt;span class = "ui-icon &lt;i&gt;ui-icon-name&lt;/i&gt;"&amp;gt;&amp;lt;span&amp;gt;');&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;b&gt;Drag and Drop&lt;/b&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;You make a clone of the draggle area&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: js"&gt;function clone_function () {
// make four clones
for (i-1, i&amp;lt;=4;i++) {
// indicate the overlapping of elements
zValue = (101+1) + "";
// each successive copy of the element to be a bit lower
yPos = 100 + (i*20) + "px";
// make a clone, insert , set the vertical position, set zIndex
$("div:first").clone()
   .insertAfter ("div:first")
   .css         ("top",yPos)
   .css         ("zIndex",zValue)
   .append      (" #" + i);
} // end of loop
} // end clone_function
}
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Make the area draggable ($(&lt;i&gt;".drag_class"&lt;/i&gt;).draggable(); &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Bind&amp;nbsp; a drop event to the target area &lt;/b&gt;($("#&lt;i&gt;target_div_id&lt;/i&gt;").bind("drop", &lt;i&gt;change_target_function&lt;/i&gt;);) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Bind a dropout event to the target area&lt;/b&gt; ($("#&lt;i&gt;target div id&lt;/i&gt;").bind("dropout", &lt;i&gt;rest_function&lt;/i&gt;);) &lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;div id="tab6"&gt;&lt;i&gt;&lt;b&gt;jQuery UI (User Interface) Widgets:&lt;/b&gt;&lt;/i&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Accordion&lt;/b&gt; - &amp;nbsp; $(&lt;i&gt;"#div id"&lt;/i&gt;).accordion;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Slider&lt;/b&gt; - $(&lt;i&gt;"div id'&lt;/i&gt;).slider() .bind("slide", &lt;i&gt;function&lt;/i&gt;); The function can read the slider's value via $(&lt;i&gt;"div id"&lt;/i&gt;).slider("value");&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Date Picker&lt;/b&gt; - $(&lt;i&gt;"#div id'&lt;/i&gt;).datepicker;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tabs&lt;/b&gt; - $(&lt;i&gt;"#div id"&lt;/i&gt;).tabs();&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sortable list&lt;/b&gt;&amp;nbsp;- $(&lt;i&gt;"#div id'&lt;/i&gt;).sortable(); [Sortable elements are usually lists (ul/li) with an id]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Selectable elements&lt;/b&gt;&amp;nbsp;- $(&lt;i&gt;"#div id"&lt;/i&gt;).selectable(); [Selectable elements are usually lists (ul/li) with an id]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Dialog Box&lt;/b&gt; -$(&lt;i&gt;"#div id"&lt;/i&gt;).dialog ("close"), $(&lt;i&gt;"div id"&lt;/i&gt;).dialog ("open");&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-1973944976719539472?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/1973944976719539472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/04/jquery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/1973944976719539472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/1973944976719539472'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/04/jquery.html' title='jQuery'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-2285013203024134288</id><published>2010-04-09T08:48:00.000-07:00</published><updated>2010-04-09T09:36:06.795-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>Pull_Multi_Values Javascript Issue</title><content type='html'>Recently, I had a problem with a version of the pull_multi_values javascript function, which uses AJAX to populate four fields (county, city, state, and zip code) from a Zip Code lookup field. It populated county, city, and zip code fine but did not populate state. The only difference between these fields is that county, city, and zip code fields are text fields while state field is a select field. The original javascript function code was:&lt;br /&gt;
&lt;pre class="brush: js"&gt;&amp;lt;script language="JavaScript" type="text/javascript"&amp;gt;
&amp;lt;!--
function pull_company_city_state(pValue){
var get = new htmldb_Get(null,html_GetElement('pFlowId').value,
'APPLICATION_PROCESS=SET_CITY_STATE',$v('pFlowStepId'));
if(pValue){
get.add('TEMPORARY_APPLICATION_ITEM',pValue)
}else{
get.add('TEMPORARY_APPLICATION_ITEM','null')
}    
gReturn = get.get('XML');
if(gReturn){
var l_Count = gReturn.getElementsByTagName("item").length;
for(var i = 0;i&amp;lt;l_Count;i++){
var l_Opt_Xml = gReturn.getElementsByTagName("item")[i];
var l_ID = l_Opt_Xml.getAttribute('id');
var l_El = html_GetElement(l_ID);    
if(l_Opt_Xml.firstChild){
var l_Value = l_Opt_Xml.firstChild.nodeValue;
}else{
var l_Value = '';
}
if(l_El){
if(l_El.tagName == 'INPUT'){
l_El.value = l_Value;
}
else if(l_El.tagName == 'SPAN' &amp;amp;&amp;amp; 
l_El.className == 'grabber'){
l_El.parentNode.innerHTML = l_Value;
l_El.parentNode.id = l_ID;
}else{
l_El.innerHTML = l_Value;
}
}
}
}
get = null;
}
//--&amp;gt;
&amp;lt;/script&amp;gt;


&lt;/pre&gt;&lt;br /&gt;
Since I am a relative newbit to javascript and AJAX, I could not resolve the problem on my own. So what did I do? You guessed it, I posted a thread on the APEX Discussion Forum hoping one of the Gurus would respond. One of the gurus, Jari, assisted me and informed me that I had no test for SELECT items. So asked me to include the following line in the nested if statement:&lt;br /&gt;
&lt;pre class="brush: js"&gt;else if(l_El.tagName == 'SELECT'){
           $s( l_El, l_Value) // Case for select
&lt;/pre&gt;&lt;br /&gt;
Based on the documentation (&lt;a href="http://download.oracle.com/docs/cd/E14373_01/apirefs.32/e13369/javascript_api.htm#CHDFBJGD"&gt;http://download.oracle.com/docs/cd/E14373_01/apirefs.32/e13369/javascript_api.htm#CHDFBJGD&lt;/a&gt;), $s(pNd, pValue) sets the Application Express item value taking into account what type of item it is.&lt;br /&gt;
So the revised javascript is as follows:&lt;br /&gt;
&lt;pre class="brush: js"&gt;&amp;lt;script language="JavaScript" type="text/javascript"&amp;gt;
&amp;lt;!--
function pull_company_city_state(pValue){
var get = new htmldb_Get(null,html_GetElement('pFlowId').value,
'APPLICATION_PROCESS=SET_CITY_STATE',$v('pFlowStepId'));
if(pValue){
get.add('TEMPORARY_APPLICATION_ITEM',pValue)
}else{
get.add('TEMPORARY_APPLICATION_ITEM','null')
}    
gReturn = get.get('XML');
if(gReturn){
var l_Count = gReturn.getElementsByTagName("item").length;
for(var i = 0;i&amp;lt;l_Count;i++){
var l_Opt_Xml = gReturn.getElementsByTagName("item")[i];
var l_ID = l_Opt_Xml.getAttribute('id');
var l_El = html_GetElement(l_ID);    
if(l_Opt_Xml.firstChild){
var l_Value = l_Opt_Xml.firstChild.nodeValue;
}else{
var l_Value = '';
}
if(l_El){
if(l_El.tagName == 'INPUT'){
l_El.value = l_Value;
}
else if(l_El.tagName == 'SPAN' &amp;amp;&amp;amp; 
l_El.className == 'grabber'){
l_El.parentNode.innerHTML = l_Value;
l_El.parentNode.id = l_ID;
}
else if(l_El.tagName == 'SELECT'){
$s( l_El, l_Value) // Case for select}
else{
l_El.innerHTML = l_Value;
}
}
}
}
get = null;
}
//--&amp;gt;
&amp;lt;/script&amp;gt;


&lt;/pre&gt;&lt;br /&gt;
After I changed it, it worked like a charm. Thanks to APEX Discussion Forum (and Jari, of course). I couldn't have done it without you guys. APEX Discusssion Forum is such a valuable resource. I learned so much from it. The people who responds to the questions are very helpful.&lt;br /&gt;
&lt;br /&gt;
Robert&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-2285013203024134288?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/2285013203024134288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/04/pullmultivalues-javascript-issue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/2285013203024134288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/2285013203024134288'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/04/pullmultivalues-javascript-issue.html' title='Pull_Multi_Values Javascript Issue'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-6236565032277803419</id><published>2010-03-24T14:44:00.000-07:00</published><updated>2010-03-24T14:53:35.728-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>APEX and AJAX for Public Pages</title><content type='html'>I have been using AJAX in my APEX applications so I can create cascading select list, filtered shuttle items, and lately, filling in fields from a database based on an input fields. I had very little problems with it until recently.&lt;br /&gt;
&lt;br /&gt;
I had an application that fills in city and state based on a zip code entered. It worked fine until I set up the application for public access (i.e., Page is Public and does not required authentication). When I entered the 5-digit zip code and press tab, city and state did not get filled in. I looked at the javascript and the On-Demand Process and could not find anything wrong with it. Tried even to use Firebug to debug it but that did not help as well. So I put in an alert(i.e., &lt;strong&gt;alert('gReturn'+gReturn);&lt;/strong&gt; where gReturn was set to &lt;strong&gt;get.get('XML');&lt;/strong&gt;). I got &lt;b&gt;gReturnNULL&lt;/b&gt; as a result. So something was messed with the XML. Since the get was a call to my ODP, I didn't know what was causing the problem.&lt;br /&gt;
&lt;pre&gt;var get = new htmldb_Get(null,html_GetElement('pFlowId').value,
    'APPLICATION_PROCESS=SET_CITY_STATE',0);
&lt;/pre&gt;So what does someone do in this circumstance. You create a new thread on APEX Discussion Forum. What else!! And hope that someone will respond to your threat quickly. Thank goodness one of the top gurus (varad) of the forum answered within an hour or so. After about an hour, he fixed my problem. It turned out that for public pages you have to use&lt;strong&gt; 'PFlowStepId'&lt;/strong&gt;, which contains the value corresponding to the APEX page-id from where the AJAX call was made, instead of '0', when it is a public page. So once I changed it to :&lt;br /&gt;
&lt;pre&gt;var get = new htmldb_Get(null,html_GetElement('pFlowId').value,
    'APPLICATION_PROCESS=SET_CITY_STATE',$v('pFlowStepId'));
&lt;/pre&gt;and removed a htp.p statement (for debugging purposes), it worked!! Thank goodness for the forum and for varad! I wouldn't have been able to figure it out without either one.&lt;br /&gt;
&lt;br /&gt;
So remember, for public pages you must use $v('pFlowStepId') instead of 0 where accessing your ODP in your javascript.&lt;br /&gt;
&lt;br /&gt;
I hope this helps someone else.&lt;br /&gt;
&lt;br /&gt;
Robert&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-6236565032277803419?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/6236565032277803419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/03/apex-and-ajax-for-public-pages.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/6236565032277803419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/6236565032277803419'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/03/apex-and-ajax-for-public-pages.html' title='APEX and AJAX for Public Pages'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-2947821934618794796</id><published>2010-03-12T08:30:00.000-08:00</published><updated>2010-04-22T09:49:52.139-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mailing labels'/><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>How to Create Mailing Labels in APEX</title><content type='html'>Originally my customer wanted to be able to print company addresses on mailing labels using a specific Avery format. This involve three steps:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Create an additional report for the mailing label consisting of two fields: contact/address and company name. The first field (contact/address) will be displayed and the 2nd field (firm name) will not be displayed but will be used for sorting purposes. The first field will contact contact name, company name, and address.&lt;/li&gt;
&lt;li&gt;Create a 'mailing label' button on the original report. This button will redirect to another page that contains the new report (see #1 above).&lt;/li&gt;
&lt;li&gt;Create a new template for the mailing label.&lt;/li&gt;
&lt;/ol&gt;&amp;nbsp;Let's discuss each step in depth:&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Create a new report&lt;/u&gt;&lt;br /&gt;
The report consist of a simple query with two fields: contact/address and company name. The contact/address field will consists of a concatenation of the contact, company name and address separated with breaks (i.e., &amp;lt;BR /&amp;gt;). The second field will be company name which will be the sort field. Here is an example of the query:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
SELECT contact_name ||&lt;br /&gt;
'&amp;lt;BR /&amp;gt;'||&lt;br /&gt;
company_name ||'&amp;lt;BR /&amp;gt;'||&lt;br /&gt;
street_address||'&amp;lt;BR /&amp;gt;'||&lt;br /&gt;
city||' '||state||' '|| postal_code, &lt;br /&gt;
company_name &lt;br /&gt;
from&lt;br /&gt;
COMPANY&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Created a 'mailing label' button&lt;/u&gt;&lt;br /&gt;
Create a button on the region where your report is displayed:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Create a button&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Button Region: Select the region of your report..Click Next.&lt;/li&gt;
&lt;li&gt;Button Position:&lt;span class="fielddata"&gt;&lt;label for="P379_WHERE_0"&gt;Create a button in a region position&lt;/label&gt;.&lt;/span&gt;Click Next.&lt;/li&gt;
&lt;li&gt;Button Attributes: enter button name (label will be automatically filled in, change it if you like), click on template driven, click &lt;span class="fielddata"&gt;&lt;label for="F4000_P4731_PROCESSING_0"&gt;Submit Page and Redirect to URL&lt;/label&gt;.&lt;/span&gt;Click Next.&lt;/li&gt;
&lt;li&gt;Image Attributes or Template : Click on the button template.Click Next.&lt;/li&gt;
&lt;li&gt;Display Properties: Position : Top and Bottom of Region.Click Next.&lt;/li&gt;
&lt;li&gt;Branching: Branch to Page(when button is pressed): enter page of the mailing label report. Click Next.&lt;/li&gt;
&lt;li&gt;Click on Create Button&lt;/li&gt;
&lt;/ol&gt;&lt;u&gt;Create a new template for the mailing label&lt;/u&gt;&lt;br /&gt;
You now need to create a new template for the report you created in #1 since the mailing label needs to be printed on each physical label that can be a number of labels across and a number of label down a page. For example, Label #5360 has 21 labels per page, 7 rows by 3 columns. This is where the tricky part comes in. You need to create a row template with four different versions based on&amp;nbsp; a PL/SQL Expression (one for the 1st label of a new page, the 1st label of the row, the 2nd label of the row, the 3rd label of the row)&lt;br /&gt;
&lt;br /&gt;
The &lt;b&gt;first row template &lt;/b&gt;is for a new page because you want to issue a "page break before" style so the printer advances to the next page after the cell is printed. So the code would look like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: html"&gt;Row Template 1 
&amp;lt;td&amp;gt;#1#&amp;lt;p STYLE="page-break-before: always;"&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;
 
Row Template 1 Condition : Select &lt;b&gt;Use Based on PL/SQL Expression&lt;/b&gt;

Row Template 1 Expression 
mod(#rownum#,21) = 0 (this will catch it on the 21st, 42nd, 63rd, etc... address)
&lt;/pre&gt;&lt;br /&gt;
The &lt;b&gt;second row template &lt;/b&gt;is for the first label on the page. You need to start the row and put the define the 1st cell of the row. So the code would look like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: js"&gt;Row Template 2

&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;#1#&amp;lt;/td&amp;gt;

Row Template 2 Condition : Select &lt;b&gt;Use Based on PL/SQL Expression&lt;/b&gt;

Row Template 2 Expression 
mod(#rownum#,21) = 1  (this will catch it on the 22nd, 43rd, 64th, etc... address)
&lt;/pre&gt;&lt;br /&gt;
The &lt;b&gt;third row template &lt;/b&gt;is for the third label on each row. You need to define the 3rd cell of the row and end the row. So the code would look like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: html"&gt;Row Template 3

&amp;lt;td&amp;gt;#1#&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
 
Row Template 3 Condition : Select &lt;b&gt;Use Based on PL/SQL Expression&lt;/b&gt;

Row Template 3 Expression 
mod(#rownum#,3) = 0
&lt;/pre&gt;&lt;br /&gt;
The &lt;b&gt;fourth row template &lt;/b&gt;is for the all other labels. You need to define the cell of the row.So the code would look like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: html"&gt;Row Template 4

&amp;lt;td&amp;gt;#1#&amp;lt;td&amp;gt;

Row Template 4 Condition : Select &lt;b&gt;Use Based on PL/SQL Expression&lt;/b&gt;

Row Template 4 Expression 
#rownum#!=1
&lt;/pre&gt;&lt;br /&gt;
Lastly, you assign this new template for the label report.&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="fielddata"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-2947821934618794796?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/2947821934618794796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/03/how-to-create-mailing-labels-in-apex.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/2947821934618794796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/2947821934618794796'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/03/how-to-create-mailing-labels-in-apex.html' title='How to Create Mailing Labels in APEX'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-1417395534287775347</id><published>2010-02-03T18:20:00.000-08:00</published><updated>2010-02-04T07:42:40.545-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conversion'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='view'/><title type='text'>Converting UTC to Local Time</title><content type='html'>I am on a project that had several date fields in UTC&lt;br /&gt;
number format. The reason is that the data was loaded from another system's csv file and the system stores all dates in number format (in UTC). UTC is another name for Greenwich Time. So I had to convert the UTC number to a date field . I did some research (via Google) and found the following conversion technique:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;to_date(TO_CHAR(to_date('01.01.70','dd.mm.rr')+ (&lt;em&gt;number_UTC_field&lt;/em&gt;/(60*60*24)),'mm-dd-yyyy hh24:mi:ss'),'mm-dd-yyyy hh24:mi:ss')&lt;/blockquote&gt;It turns out that UTC dates are seconds from January 1, 1970. So you need to convert&amp;nbsp;the UTC number to days (i.e., 60 seconds * 60 minutes * 24 hours). Great!! I was able to convert the UTC number to date format. But there was still one more issue, the date is in Greenwich (UTC) Time. So I had to convert it&amp;nbsp;to my local time which is Eastern Daylight Savings Time. How could I do that? So I researched again (via Google!!) and found the new_time function&amp;nbsp; which accepts three parameters ( a date, &lt;em&gt;from_format&lt;/em&gt;, &lt;em&gt;to_format&lt;/em&gt;). To convert from UTC to Eastern Daylight Savings Time (EDT), it would be NEW_TIME (&lt;em&gt;date_field, 'GMT','EDT'), &lt;/em&gt;so I changed the above code to &lt;br /&gt;
&lt;div&gt;&lt;blockquote&gt;new_time(to_date(TO_CHAR(to_date('01.01.70','dd.mm.rr')+ (&lt;em&gt;number_UTC_field&lt;/em&gt;/(60*60*24)),'mm-dd-yyyy hh24:mi:ss'),'mm-dd-yyyy hh24:mi:ss'),'GMT','EDT') &lt;/blockquote&gt;&lt;/div&gt;Okay, now I'm fine with the date fields. Now I can focus on some other fields which were phone number fields. These fields could be internal or external number. Internal numbers consisted of the tie line (i.e., location) and the last four digits of the phone number. For example, 105555 is 10 for the tie-line and 5555 for the phone number. I needed to convert it to xx-xxxx (i.e., tie line - phone number). External numbers consists of area code and 7 digit phone number. So I needed to convert external numbers from xxxxxxxxxx to xxx-xxx-xxxx. Therefore, the conversion techique is as follows: &lt;br /&gt;
&lt;blockquote&gt;DECODE( LENGTH(&lt;em&gt;PHONE1&lt;/em&gt;), &lt;br /&gt;
&amp;nbsp; 6,SUBSTR(&lt;em&gt;PHONE1&lt;/em&gt;,1,2)||'-'||SUBSTR(&lt;em&gt;PHONE1&lt;/em&gt;,3) , &lt;br /&gt;
10, SUBSTR(&lt;em&gt;PHONE1&lt;/em&gt;,1,3)||'-'||SUBSTR(&lt;em&gt;PHONE1&lt;/em&gt;,4,3)||'-'|| SUBSTR(&lt;em&gt;PHONE1&lt;/em&gt;,7) ,&lt;em&gt;PHONE1&lt;/em&gt;)&lt;/blockquote&gt;Okay. the select statement for the source of the report is fine now. It now displays the correct format for dates and phone numbers. But now I have another dilemma...&lt;br /&gt;
&lt;br /&gt;
For each report, I need to do these conversions for each date and/or phone numbers. Also, the select statement is so unreadable!! The solution came to me while on my morning train commute. I sometimes do my best thinking in "non-office" settings such as the shower, train, before I go to sleep. Anyway, the answer is a view!! I'll create a view based on the table that contains all the conversion formats. Therefore, in each report, all I need to do is reference the view's column(s) -- that is already formatted. Also, if the format needs to be changed, such as changing EDT to EST or adding external calls to foreign countries, all I need to do is change the view. That way, instead of changing all the reports, I just change it in one place, the view, and it will automaticallly be reflected in all the reports. That will make my life on this project so much easier!!&lt;br /&gt;
&lt;br /&gt;
So, in summary, in order to reference UTC number fields and phone number fields, I did the following:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Convert UTC number to date (i.e., to_date('01.01.70','dd.mm.rr')+ number / (60*60*24),'MM/DD/YYYY HH12:MI')&lt;/li&gt;
&lt;li&gt;Convert UTC dates to dates in local time (i.e., NEW_TIME)&lt;/li&gt;
&lt;li&gt;Format&amp;nbsp;phone numbers via DECODE and concatenation&lt;/li&gt;
&lt;li&gt;Create a view that includes the above conversions.&lt;/li&gt;
&lt;/ol&gt;I hope this helps others that have the similiar issues!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-1417395534287775347?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/1417395534287775347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/02/converting-utc-to-local-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/1417395534287775347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/1417395534287775347'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/02/converting-utc-to-local-time.html' title='Converting UTC to Local Time'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-605645322014758645</id><published>2010-02-03T08:01:00.000-08:00</published><updated>2010-02-05T06:58:22.882-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plug-in'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>APEX 4.0 Early Adopter - Creating Plugin for Masked Input</title><content type='html'>In APEX 4.0 Early Adopter, I attempted to create a Masked-input plug-in following Patrick Wolf's article &lt;a href="http://www.inside-oracle-apex.com/oracle-apex-4-0-how-to-create-a-plug-in/"&gt;Oracle APEX 4.0: How to create a Plug-in&lt;/a&gt;&amp;nbsp;but when I attempted to upload jquery.maskedinput-1.2.2.min.js, I received the following error:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;ORA-01407: cannot update ("APEX_040000"."WWV_FLOW_PLUGIN_FILES"."MIME_TYPE") to NULL&lt;br /&gt;
&lt;br /&gt;
Unable to process row of table WWV_FLOW_PLUGIN_FILES.&lt;/blockquote&gt;It is very frustrating testing out creating a plug-in which was already tested. :(&lt;br /&gt;
&lt;br /&gt;
I sent feedback to the Oracle developers. I hope they fix the problem in a timely manner so I can finish the test. I'll keep you posted.&lt;br /&gt;
&lt;br /&gt;
Update....&lt;br /&gt;
Well, someone from the Oracle Appliation Express 4.0 team responded to my feedback. He/she asked if it works in Firefox. I tested it in Firefox and it works fine. No problems. But I have to develop in IE at my company (it is a company rule!) so they need to work out the bugs in IE 7.0 before it goes to production. :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-605645322014758645?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/605645322014758645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/02/apex-40-early-adopter-creating-plugin.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/605645322014758645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/605645322014758645'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/02/apex-40-early-adopter-creating-plugin.html' title='APEX 4.0 Early Adopter - Creating Plugin for Masked Input'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-8231576837092880532</id><published>2010-01-25T21:41:00.001-08:00</published><updated>2010-01-30T13:40:58.495-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>Reports via Apache FOP</title><content type='html'>I would like to do my reports generation in PDF, Excel, or RTF format.Since my company doesn't have BI Publisher and we don't plan to purchase it (due to its cost), the only option is Apache.&lt;br /&gt;
&lt;br /&gt;
Is Apache FOP already installed? I don't know but I don't think so.&lt;br /&gt;
&lt;br /&gt;
How does it get installed? Who usually installs it? Where do I find&lt;br /&gt;
the documentation? These questions will need to be answered in the&lt;br /&gt;
next few weeks. I'll keep you posted. ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I found the link to PDF Printing in Application Express in the Discussion Forum:&lt;br /&gt;
&lt;a href="http://www.oracle.com/technology/products/database/application_express/html/configure_printing.html"&gt;http://www.oracle.com/technology/products/database/application_express/html/configure_printing.html&lt;/a&gt;&lt;br /&gt;
I will need to review the document first.&lt;br /&gt;
&lt;br /&gt;
Setup with the following software combination should work:&lt;br /&gt;
&lt;br /&gt;
win32_11gR1_database.zip&lt;br /&gt;
oc4j_extended_101350.zip&lt;br /&gt;
jdk-1_5_0_22-windows-i586-p.exe&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-8231576837092880532?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/8231576837092880532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/01/reports-via-apache-fop.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/8231576837092880532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/8231576837092880532'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/01/reports-via-apache-fop.html' title='Reports via Apache FOP'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-734239766356928469</id><published>2010-01-24T19:29:00.001-08:00</published><updated>2010-01-29T14:37:20.804-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><title type='text'>APEX LDAP</title><content type='html'>I was reading about LDAP with APEX from Pro Oracle Application Express (Expert's Voice in Oracle), by John Scott, Scott Spendolini, and it got me thinking that all intranet APEX applications should use LDAP for authentication purposes. I have to read more and I will keep you posted about my progress.&lt;br /&gt;
The next steps: &lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;I will read the How-to article on otn.oracle.com: &lt;a href="http://www.oracle.com/technology/products/database/application_express/howtos/how_to_ldap_authenticate.html"&gt;Authenticate Users Using an LDAP Server &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I will go search on the APEX Discussion Forum for people's experiences and issues. Maybe there will be other links that I can follow and read up more information about LDAP.&lt;/li&gt;
&lt;li&gt;Meet with staff who supports LDAP in my company.&lt;/li&gt;
&lt;li&gt;Test out a simple application that is used within my department.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-734239766356928469?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/734239766356928469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/01/apex-ldap.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/734239766356928469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/734239766356928469'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/01/apex-ldap.html' title='APEX LDAP'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-6179092992069806712</id><published>2010-01-24T14:27:00.001-08:00</published><updated>2010-01-29T14:37:46.024-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery Progressive Bar</title><content type='html'>I would like to incorporate a progressive bar but I don't know how long the proegress will take. JQuery site says it is coming out with a new widget for this. I just don't know when. I guess I'll have to wait. :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-6179092992069806712?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/6179092992069806712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/01/jquery-progressive-bar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/6179092992069806712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/6179092992069806712'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/01/jquery-progressive-bar.html' title='jQuery Progressive Bar'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-4593048120131434801</id><published>2010-01-21T12:12:00.000-08:00</published><updated>2010-01-29T14:38:04.895-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery - My new toy!</title><content type='html'>Last month, I went to an Oracle User Group meeting that had Dan McGhan presenting a seminar for converting Forms to APEX. During this presentation, he showed a calendar that uses jQuery which he mentioned that APEX 4.0 will have jQuery. I never heard of jQuery before. And here he shows a datepicker is not more current than the datepicker that comes with APEX. It is larger and more colorful and has several additional features that the regular datepicker doesn't have. You even don't need a calendar icon to click. You can just click on the date field and it can automatically be displayed. Is that cool or what!!&lt;br /&gt;
&lt;br /&gt;
So in the next few weeks, I searched the APEX Discussion Forum for jQuery datepicker and also went to Dan McGhan's blog. I tried to incorporate it an application that I am developing. I had some problems which I was able to resolve in a few days. And....lo and behold, I had the jQuery datepicker in my application. It works great!!&lt;br /&gt;
&lt;br /&gt;
Now...I then searched several blogs to find other jQuery features that I can use. I found one for item help (&lt;a href="http://www.danielmcghan.us/2008/06/ajax-item-help.html"&gt;Dan McGhan's AJAX Item Help&lt;/a&gt;) and another one for masked input for fixed-length fields (&lt;a href="http://digitalbush.com/projects/masked-input-plugin/"&gt;digitalbush.com's Masked Input Plugin&lt;/a&gt;). I was then able to incorporate them in the same application as the datepicker. For each jQuery feature, I had a couple of issues but I was able to resolve them in a few days. Now they all work!!!&lt;br /&gt;
&lt;br /&gt;
jQuery is so cool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-4593048120131434801?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/4593048120131434801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/01/jquery-my-new-toy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/4593048120131434801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/4593048120131434801'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/01/jquery-my-new-toy.html' title='jQuery - My new toy!'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-6478311750339503933</id><published>2010-01-12T09:04:00.000-08:00</published><updated>2010-01-29T14:38:42.598-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hyperlink'/><category scheme='http://www.blogger.com/atom/ns#' term='APEX'/><category scheme='http://www.blogger.com/atom/ns#' term='button'/><title type='text'>How do you put a hyperlink in APEX?</title><content type='html'>Have you ever wanted to create a item with type 'hyperlink'&amp;nbsp; but it does not exists. So as an alternative, you create a text item and you put a&amp;nbsp;&amp;lt;a href="..."&amp;gt;&amp;nbsp;in the &lt;strong&gt;Pre Element Text&lt;/strong&gt; and a&amp;nbsp;&amp;lt;/a&amp;gt;&amp;nbsp;in the &lt;strong&gt;Post Element Text&lt;/strong&gt;. That is so annoying to do it each time!!!!&lt;br /&gt;
&lt;br /&gt;
So I created a button with a new button template instead!&lt;br /&gt;
&lt;br /&gt;
Here are the 2 step process:&lt;br /&gt;
1. Create a new button template called MyHyperlink with the following definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href="#LINK#"&amp;gt;#LABEL#&amp;lt;/a&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
2. Create a button in a region position (not as an item) using template MyHyperlink&lt;br /&gt;
&lt;br /&gt;
That is it. All ready to go! Simple isn't it?!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-6478311750339503933?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/6478311750339503933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2010/01/how-do-you-put-hyperlink-in-apex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/6478311750339503933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/6478311750339503933'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2010/01/how-do-you-put-hyperlink-in-apex.html' title='How do you put a hyperlink in APEX?'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-981234592121277205.post-8968322583980919952</id><published>2009-12-19T11:09:00.000-08:00</published><updated>2010-01-26T15:44:15.296-08:00</updated><title type='text'>My sidebar region is too large...</title><content type='html'>How does one change the width to make it narrow so it does not go beyond the width of the browser? I used the width= and it did not work. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What happened was that I was using a new template for my button and the table in the template did not have an closing tag ending &amp;lt;/table&amp;gt; so the button continued and messed up the regions.&lt;br /&gt;
&lt;br /&gt;
Always check your template syntax. The button template seemed to be working if it was placed in a region with no width.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/981234592121277205-8968322583980919952?l=apexjscss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apexjscss.blogspot.com/feeds/8968322583980919952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://apexjscss.blogspot.com/2009/12/my-sidebar-region-is-too-large.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/8968322583980919952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/981234592121277205/posts/default/8968322583980919952'/><link rel='alternate' type='text/html' href='http://apexjscss.blogspot.com/2009/12/my-sidebar-region-is-too-large.html' title='My sidebar region is too large...'/><author><name>Robert</name><uri>http://www.blogger.com/profile/06857812191694223516</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
