<?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-7775978839077988970</id><updated>2012-02-13T14:42:31.542+10:00</updated><category term='Oracle SQL CLOB LOB Function Substr'/><category term='File Attach View Download Add'/><category term='child'/><category term='Research'/><category term='SQL'/><category term='Path'/><category term='keys'/><category term='Synchronise'/><category term='parent'/><category term='test sql random'/><category term='Publication'/><category term='XML Publisher'/><category term='pause sleep wait time PeopleCode'/><category term='James Court Medina Canberra'/><category term='Multiple'/><category term='progress process indicator'/><category term='syntax'/><category term='date'/><category term='Page data inconsistent with database'/><category term='One'/><category term='Last Max Process Instance'/><category term='sql script PeopleCode Project'/><category term='Collections'/><category term='Prompts'/><category term='DoModalComponent'/><category term='work record'/><category term='Data Integrity Error'/><category term='Process HE 7'/><category term='XML Publisher install BI'/><category term='PS access he90ps'/><category term='PeopleTools'/><category term='difference'/><category term='XML PeopleCode'/><category term='Peoplecode Barcode bar code code128'/><category term='App Application Package PeopleCode syntax'/><category term='Portal'/><category term='Index Delivered'/><category term='commitments encumbrances App Engine'/><category term='search peoplecode'/><category term='portal navigation nav structure sql'/><category term='Application Engine App Comment'/><category term='3c communications'/><category term='record'/><category term='SQR RDS Publish Report Manager App Engine'/><category term='Dynamic View Union'/><category term='no matching buffer error'/><category term='Grid grids excel download ie'/><category term='SQL QC UAT'/><category term='SQR A4 Printer Direct Letter'/><category term='Table'/><category term='query sql project'/><category term='Rows'/><category term='design sql record definition def'/><category term='Dynamic'/><category term='array peoplecode'/><category term='PeopleCode For Loop'/><category term='PeopleCode'/><category term='DMS'/><category term='Excel CI Component Interface Process Order Record'/><category term='Keys key Oracle SQL table record'/><category term='Field'/><category term='project'/><category term='duplicate id pl/sql'/><category term='Column'/><category term='pdf stamper itext Java object attach'/><category term='CSV SQR'/><category term='RDS Report Manager Publish File'/><category term='Component CI Error'/><category term='Application Engine suspended crash error ae'/><category term='security purchase approve order'/><category term='extract'/><category term='month'/><category term='SQR Date DateTime'/><category term='HR Retro SQL'/><category term='cache array PeopleCode'/><category term='XML Publisher page number'/><category term='XML Publisher App Package Class'/><category term='SQL Create Insert'/><category term='Application Engine App Trace Tracing'/><category term='year'/><category term='sql join null effdt outer'/><category term='Function'/><category term='Crystal'/><category term='OR'/><category term='9.1 8.50'/><category term='App Engine bind run_cntl_id run control'/><category term='oracle sql flashback'/><category term='Browser Language Login'/><category term='CI Excel Component Interface'/><category term='SQL Database Link Performance'/><category term='timestamp'/><category term='SQL Decode If Case'/><category term='Registry Register Interface'/><category term='Menu'/><category term='&quot;XML Publisher&quot;'/><category term='PL/SQL Array'/><category term='SQL Sequence'/><category term='Lock'/><category term='Query EFFDT'/><category term='objects'/><category term='SQR Parameters Process'/><category term='Oracle tune sql 10'/><category term='SQL Tree Heirarchy Recursive'/><category term='NVAL NVL Null no value in Oracle SQL'/><category term='Component'/><category term='Registry'/><category term='Oracle SQL Differences Compare'/><category term='oracle sql index key keys table'/><category term='day'/><category term='App Engine Performance'/><category term='QC SQL'/><category term='Data'/><category term='sql default schedule'/><category term='SamDestroy'/><category term='sibling'/><category term='Component Interface DoSaveNow'/><category term='Align Right SQR'/><category term='useedit psrecfield binary'/><category term='VBA file open close read interface'/><category term='Menu Path Portal Component'/><category term='App Engine Text Export'/><category term='XML Publisher XSD Generate Output'/><title type='text'>Notes from PeopleSoft</title><subtitle type='html'>A searchable reference.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default?start-index=101&amp;max-results=100'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>115</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6211068938826055450</id><published>2012-02-13T14:35:00.000+10:00</published><updated>2012-02-13T14:42:31.558+10:00</updated><title type='text'>Redirecting a User after Login / Logon</title><content type='html'>This situation can be common in places like Universities. Students need to be redirected after login to some 'special' page, or an employee needs to be redirected if it is their first login, etcetera.&lt;br /&gt;&lt;br /&gt;You could be forgiven for thinking this might be easily configurable somewhere. It doesn't seem to be (leave me a message if it is).&amp;nbsp;Here's how I've done it.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;I've modified:&lt;br /&gt;&lt;b&gt;AppPackage.PT_BRANDING, method GetIScriptHPPoweredByFooterHTML()&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now, I must say that at this site the Method has been customised to return a custom HTML object, with the company's own footer. Nonetheless it is a reasonable place to start looking for a location to insert the JavaScript redirect based on the type of user. The good thing here is you have full access to all the PeopleCode methods and functions and dance moves, unlike in Login PeopleCode where you are restricted, and kinda tied up in knots.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also note:&amp;nbsp;&lt;b&gt;I'm sure&lt;/b&gt;&amp;nbsp;there is a better, more elegant way to do this, probably insert JavaScript up in the header somewhere, and I've probably modified this to do that by the time you read this. I'll endeavour to come back and append this post. If not, this is a good starting point and it does actually work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, you want to modify the footer HTML that is generated to append a JavaScript redirect to the end of it, based on some condition. Something like:&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;method GetIScriptHPPoweredByFooterHTML&lt;br /&gt;   /+ Returns String +/;&lt;br /&gt;   Local string &amp;amp;PoweredByHTML;&lt;br /&gt;&lt;br /&gt;/* If a special user type then redirect */&lt;br /&gt;If &amp;amp;userType = "X" Then&lt;br /&gt;   &amp;amp;PoweredByHTML = GetHTMLText(HTML.PORTAL_HP_POWEREDBY, %Response.GetImageURL(Image.PT_PORTAL_POWEREDBY), MsgGetText(95, 434, "Powered by Oracle") | "&amp;lt;script type=""text/javascript""&amp;gt;window.top.location.replace(""../c/SOME_MENU.SOME_COMPONENT.GBL"");&amp;lt;/script&amp;gt;");&lt;br /&gt;Else&lt;br /&gt;   &amp;amp;PoweredByHTML = GetHTMLText(HTML.PORTAL_HP_POWEREDBY, %Response.GetImageURL(Image.PT_PORTAL_POWEREDBY), MsgGetText(95, 434, "Powered by Oracle"));&lt;br /&gt;End-If;&lt;br /&gt;&lt;br /&gt;   Return &amp;amp;PoweredByHTML;&lt;br /&gt;end-method;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6211068938826055450?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6211068938826055450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6211068938826055450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6211068938826055450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6211068938826055450'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2012/02/redirecting-user-after-login-logon.html' title='Redirecting a User after Login / Logon'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5230566337257732739</id><published>2012-02-01T13:36:00.002+10:00</published><updated>2012-02-01T13:36:56.953+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Integrity Error'/><title type='text'>Data Integrity Error</title><content type='html'>&lt;b&gt;Data Integrity Error (124,85)&lt;/b&gt;&lt;br /&gt;The data structure from the page does not match the data structure in the database. This can be caused by... yada yada&lt;br /&gt;&lt;br /&gt;This error usually appears after you've made some changes to PeopleCode or similar, and you haven't refreshed the page yet. As a developer you see it all the time and just reload the Component.&lt;br /&gt;&lt;br /&gt;However, on some rare occasions it appears out of nowhere for a given Component. And it won't go away. And there's no reason for it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Run a trace file for each SQL statement.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Search the trace file for 'Deserialization integrity failure'&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Some googling about the deserialization error suggested we clear the Application Server cache and restart it. If that failed run the AppEngine VERSION. This app engine looked, at a glance, to be restting the VERSION number of some major Tables back to 1. I didn't want to run this without knowing what all this VERSION stuff is.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution:&lt;/b&gt; I opened the DERIVED_GBL Record and modified the comment. Saved. Fixed.&lt;/div&gt;&lt;div&gt;I think this was the least intrusive approach.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you can expand on what the issue is and how to "&lt;i&gt;correctly"&lt;/i&gt; fix it please leave a note below. Much appreciated.&lt;/div&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/7775978839077988970-5230566337257732739?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5230566337257732739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5230566337257732739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5230566337257732739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5230566337257732739'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2012/02/data-integrity-error.html' title='Data Integrity Error'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5155400969965351044</id><published>2012-02-01T09:14:00.004+10:00</published><updated>2012-02-01T09:15:45.009+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Component'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Path'/><category scheme='http://www.blogger.com/atom/ns#' term='Menu'/><title type='text'>Component Menu Path SQL</title><content type='html'>Graciously lifted from Jim's PeopleSoft Journal (check out his book too).&lt;br /&gt;&lt;a href="http://jjmpsj.blogspot.com.au/2007/12/query-for-component-andor-cref.html"&gt;http://jjmpsj.blogspot.com.au/2007/12/query-for-component-andor-cref.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WITH PORTAL_REGISTRY AS (&lt;br /&gt;SELECT RTRIM(REVERSE(SYS_CONNECT_BY_PATH(REVERSE(PORTAL_LABEL), ' &amp;gt;&amp;gt; ')), ' &amp;gt;&amp;gt; ') PATH&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;, LEVEL LVL&lt;br /&gt;&amp;nbsp; FROM PSPRSMDEFN&lt;br /&gt;&amp;nbsp;WHERE PORTAL_NAME = 'EMPLOYEE'&lt;br /&gt;&amp;nbsp;START WITH PORTAL_OBJNAME = &amp;amp;1&lt;br /&gt;CONNECT BY PRIOR PORTAL_PRNTOBJNAME = PORTAL_OBJNAME )&lt;br /&gt;SELECT PATH&lt;br /&gt;&amp;nbsp; FROM PORTAL_REGISTRY&lt;br /&gt;&amp;nbsp;WHERE LVL = (&lt;br /&gt;SELECT MAX(LVL)&lt;br /&gt;&amp;nbsp; FROM PORTAL_REGISTRY )&lt;br /&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/7775978839077988970-5155400969965351044?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5155400969965351044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5155400969965351044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5155400969965351044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5155400969965351044'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2012/02/component-menu-path-sql.html' title='Component Menu Path SQL'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5448211447959650405</id><published>2012-01-30T11:40:00.002+10:00</published><updated>2012-01-30T11:40:44.521+10:00</updated><title type='text'>Custom Homepage Pagelets / Custom Navigation Collections</title><content type='html'>Great article:&lt;br /&gt;&lt;a href="http://peoplesofttipster.com/2009/04/27/applying-homepage-pagelets-to-others/"&gt;http://peoplesofttipster.com/2009/04/27/applying-homepage-pagelets-to-others/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-5448211447959650405?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5448211447959650405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5448211447959650405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5448211447959650405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5448211447959650405'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2012/01/custom-homepage-pagelets-custom.html' title='Custom Homepage Pagelets / Custom Navigation Collections'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5444534048428712473</id><published>2012-01-23T15:44:00.001+10:00</published><updated>2012-01-23T15:44:33.181+10:00</updated><title type='text'>Change Font in SQR</title><content type='html'>&lt;br /&gt;Sometimes the easiest things...&lt;br /&gt;&lt;br /&gt;begin-program&lt;br /&gt;&amp;nbsp; &amp;nbsp;alter-printer font=4 ! hp laser, helvetica&lt;br /&gt;&amp;nbsp; &amp;nbsp;...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-5444534048428712473?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5444534048428712473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5444534048428712473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5444534048428712473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5444534048428712473'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2012/01/change-font-in-sqr.html' title='Change Font in SQR'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5406158649858610470</id><published>2011-12-21T13:25:00.001+10:00</published><updated>2011-12-21T13:25:33.423+10:00</updated><title type='text'>Reset Page Numbers in XML Publisher (XMLP)</title><content type='html'>&lt;?for-each&lt;b&gt;@section&lt;/b&gt;:row_AMS_SOA_PROG_T?&gt;That's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-5406158649858610470?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5406158649858610470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5406158649858610470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5406158649858610470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5406158649858610470'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/12/reset-page-numbers-in-xml-publisher.html' title='Reset Page Numbers in XML Publisher (XMLP)'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8893418453041728684</id><published>2011-12-15T15:05:00.001+10:00</published><updated>2011-12-15T15:05:11.723+10:00</updated><title type='text'>Database creation date time</title><content type='html'>select created from v$database;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8893418453041728684?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8893418453041728684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8893418453041728684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8893418453041728684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8893418453041728684'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/12/database-creation-date-time.html' title='Database creation date time'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-2067338483284224490</id><published>2011-11-01T10:05:00.002+10:00</published><updated>2011-11-01T10:15:56.218+10:00</updated><title type='text'>Hiding Elements - Printable Version of a Page</title><content type='html'>Rather than create a printable version of a page that is a copy of a given page sans buttons, headers and other elements that don't look good on a hard-copy, you can add a simple button and then define which fields you don't want to be printable. Much easier.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add a button or link to your page.&lt;/li&gt;&lt;li&gt;Under the Push Button/Hyperlink Page Properties setup as follows:&lt;br /&gt;Destination = 'External Link'&lt;br /&gt;External Link = 'Dynamic'&lt;/li&gt;&lt;li&gt;Add some PeopleCode:&lt;br /&gt;DERIVED_REC.JS_PRINT.Value = "javascript:window.print()";&lt;br /&gt;&lt;br /&gt;Now you have a basic link on your page that when clicked will print it from the browser.&lt;/li&gt;&lt;li&gt;Add a HTML Area to the page with the following value:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;@media print {&lt;br /&gt;#PAGEBAR, .PSHEADERTOOLBARFRAME, #PRINT_BTN,&lt;br /&gt;#INFO,&lt;br /&gt;#DERIVED_REC_JS_PRINT { display: none }&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note that #DERIVED_REC_JS_PRINT is the link you made in step 1.&lt;br /&gt;#Info in this example is a chunk of HTML text I wrapped in &lt;code&gt;&amp;lt;span id="Info"&amp;gt;&lt;/code&gt;&lt;br /&gt;You can add any field, usually in the format RECORD_NAME_FIELD_NAME, check your HTML source to be sure.&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/7775978839077988970-2067338483284224490?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/2067338483284224490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=2067338483284224490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2067338483284224490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2067338483284224490'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/11/hiding-elements-printable-version-of.html' title='Hiding Elements - Printable Version of a Page'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-558173756023302171</id><published>2011-09-21T20:07:00.001+10:00</published><updated>2011-09-21T20:11:27.854+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pdf stamper itext Java object attach'/><title type='text'>PDF Stamper (iText)</title><content type='html'>Download the JAR file from here:&lt;br /&gt;&lt;a href="http://itextpdf.com/download.php"&gt;http://itextpdf.com/download.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Place it on the App Server, where all the other JAR files are (somewhere)&lt;br /&gt;&lt;br /&gt;Note you'll need Acrobat Pro to add fields to the PDF and give them names.&lt;br /&gt;&lt;br /&gt;Example PeopleCode. Will Instantiate the Java object, open the Template file (source) and the target file (...target) and then map data to the defined fields on your template.&lt;br /&gt;&lt;br /&gt;Will also create an attachment and then view ti - pop up the PDF output.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;Local JavaObject &amp;amp;Outputstream, &amp;amp;PDFWriter, &amp;amp;PDFReader, &amp;amp;PDFStamper, &amp;amp;TemplateFields;&lt;br /&gt;&lt;br /&gt;/* File name */&lt;br /&gt;Evaluate &amp;amp;recAMS_CAF_DAT_VW.AMS_CAF_TYPE.Value&lt;br /&gt;When = "C"&lt;br /&gt;   /* Pivot date for old/new form is 22/12/2010 */&lt;br /&gt;   If &amp;amp;recAMS_CAF_DAT_VW.EFFDT.Value &amp;gt;= Date(20101222) Then&lt;br /&gt;      &amp;amp;TemplatePathname = GetEnv("PS_HOME") | "/rmit/tmp/1290A_NEW_TEMPLATE.pdf";&lt;br /&gt;   Else&lt;br /&gt;      &amp;amp;TemplatePathname = GetEnv("PS_HOME") | "/rmit/tmp/1290A_OLD_TEMPLATE.pdf";&lt;br /&gt;   End-If;&lt;br /&gt;When = "F"&lt;br /&gt;   /* There is a really old form version, pre 2009. */&lt;br /&gt;   If &amp;amp;recAMS_CAF_DAT_VW.EFFDT.Value &amp;gt;= Date(20090101) Then&lt;br /&gt;      &amp;amp;TemplatePathname = GetEnv("PS_HOME") | "/rmit/tmp/1292A_OLDOLD_TEMPLATE.pdf";&lt;br /&gt;   Else&lt;br /&gt;      /* Pivot date for old/new form is 22/12/2010 */&lt;br /&gt;      If &amp;amp;recAMS_CAF_DAT_VW.EFFDT.Value &amp;gt;= Date(20101222) Then&lt;br /&gt;         &amp;amp;TemplatePathname = GetEnv("PS_HOME") | "/rmit/tmp/1292A_NEW_TEMPLATE.pdf";&lt;br /&gt;      Else&lt;br /&gt;         &amp;amp;TemplatePathname = GetEnv("PS_HOME") | "/rmit/tmp/1292A_OLD_TEMPLATE.pdf";&lt;br /&gt;      End-If;&lt;br /&gt;   End-If;&lt;br /&gt;When = "V"&lt;br /&gt;   /* Pivot date for old/new form is 22/12/2010 */&lt;br /&gt;   If &amp;amp;recAMS_CAF_DAT_VW.EFFDT.Value &amp;gt;= Date(20101222) Then&lt;br /&gt;      &amp;amp;TemplatePathname = GetEnv("PS_HOME") | "/rmit/tmp/1296A_NEW_TEMPLATE.pdf";&lt;br /&gt;   Else&lt;br /&gt;      &amp;amp;TemplatePathname = GetEnv("PS_HOME") | "/rmit/tmp/1296A_OLD_TEMPLATE.pdf";&lt;br /&gt;   End-If;&lt;br /&gt;End-Evaluate;&lt;br /&gt;&lt;br /&gt;&amp;amp;FILE = %OperatorId | "_" | %Datetime | "_eCAF_PDF_STAMPER_OUTPUT.pdf";&lt;br /&gt;&lt;br /&gt;/* Output File path */&lt;br /&gt;/* ps_home = /software/peoplesoft/product/pscs/pscsdv4 */&lt;br /&gt;&amp;amp;InOutputPdfPathname = GetEnv("PS_HOME") | "/rmit/tmp/" | &amp;amp;FILE;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Create the "input" Template PDF */&lt;br /&gt;&amp;amp;PDFReader = CreateJavaObject("com.lowagie.text.pdf.PdfReader", &amp;amp;TemplatePathname);&lt;br /&gt;&amp;amp;PDFReader.consolidateNamedDestinations();&lt;br /&gt;&amp;amp;PDFReader.removeUnusedObjects();&lt;br /&gt;&lt;br /&gt;/* Create the "Output" Template PDF */&lt;br /&gt;&amp;amp;Outputstream = CreateJavaObject("java.io.FileOutputStream", &amp;amp;InOutputPdfPathname);&lt;br /&gt;&amp;amp;PDFStamper = CreateJavaObject("com.lowagie.text.pdf.PdfStamper", &amp;amp;PDFReader, &amp;amp;Outputstream);&lt;br /&gt;&lt;br /&gt;/* Flatten the form */&lt;br /&gt;&amp;amp;PDFStamper.setFormFlattening( True);&lt;br /&gt;&lt;br /&gt;/* Get the fields to stamp */&lt;br /&gt;&amp;amp;TemplateFields = &amp;amp;PDFStamper.getAcroFields();&lt;br /&gt;&lt;br /&gt;/* Stamp fields */&lt;br /&gt;&amp;amp;TemplateFields.setField("FAMILY_NAME", "Test family name");&lt;br /&gt;rem &amp;amp;TemplateFields.setField("name", "John Student");&lt;br /&gt;rem &amp;amp;TemplateFields.setField("address", "Baeyensstraat 121, Sint-Amandsberg");&lt;br /&gt;rem &amp;amp;TemplateFields.setField("postal_code", "BE-9040");&lt;br /&gt;rem &amp;amp;TemplateFields.setField("email", "s1234567@somewhere.edu.au");&lt;br /&gt;&lt;br /&gt;/* Close the stamper */&lt;br /&gt;&amp;amp;PDFStamper.close();&lt;br /&gt;&lt;br /&gt;/* Needed if in think-time */&lt;br /&gt;CommitWork();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Put PDF file temporarily into database, so we can send to users browser using the ViewAttachment function */&lt;br /&gt;&amp;amp;Ret = PutAttachment("record://AMS_ECAF_ATTACH", &amp;amp;FILE, &amp;amp;InOutputPdfPathname);&lt;br /&gt;If &amp;amp;Ret = %Attachment_Success Then;&lt;br /&gt;   &lt;br /&gt;   /* Send Output file to the browser */&lt;br /&gt;   &amp;amp;Ret = ViewAttachment("record://AMS_ECAF_ATTACH", &amp;amp;FILE, &amp;amp;FILE, True, True);&lt;br /&gt;   &lt;br /&gt;   /* Remove temporary PDF file from database */&lt;br /&gt;   &amp;amp;Ret = DeleteAttachment("record://AMS_ECAF_ATTACH", &amp;amp;FILE, True);&lt;br /&gt;   &lt;br /&gt;End-If;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-558173756023302171?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/558173756023302171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=558173756023302171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/558173756023302171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/558173756023302171'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/09/pdf-stamper-itext.html' title='PDF Stamper (iText)'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1330223660047353728</id><published>2011-08-22T18:40:00.001+10:00</published><updated>2011-08-22T18:40:46.552+10:00</updated><title type='text'>Sequential Numbers - SQL (2)</title><content type='html'>MERGE INTO ps_sf_acctg_ln&lt;br /&gt;   USING (SELECT ROW_NUMBER() OVER(PARTITION BY run_dt,seqnum ORDER BY run_dt,seqnum, sf_line_nbr) sf_line_nbr, ROWID rid FROM ps_sf_acctg_ln) SOURCE&lt;br /&gt;   ON (ps_sf_acctg_ln.ROWID = SOURCE.rid)&lt;br /&gt;   WHEN MATCHED THEN UPDATE SET ps_SF_ACCTG_LN.SF_LINE_NBR = SOURCE.sf_line_nbr;&lt;br /&gt;commit;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1330223660047353728?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1330223660047353728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1330223660047353728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1330223660047353728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1330223660047353728'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/08/sequential-numbers-sql-2.html' title='Sequential Numbers - SQL (2)'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8679615588495931066</id><published>2011-08-17T11:23:00.000+10:00</published><updated>2011-08-17T11:23:55.769+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Sequence'/><title type='text'>Sequential Numbers - SQL</title><content type='html'>This will creating a running sequence number for each unique combination of RUN_DT and SEQNUM; NEW_SF_LINE_NBR&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;SELECT&lt;br /&gt;run_dt,&lt;br /&gt;seqnum,&lt;br /&gt;ROW_NUMBER() OVER(PARTITION BY run_dt,seqnum ORDER BY run_dt, seqnum) new_sf_line_nbr&lt;br /&gt;FROM ps_sf_acctg_ln&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8679615588495931066?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8679615588495931066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8679615588495931066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8679615588495931066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8679615588495931066'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/08/sequential-numbers-sql.html' title='Sequential Numbers - SQL'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1701624311476199306</id><published>2011-08-12T15:31:00.000+10:00</published><updated>2011-08-12T15:31:10.897+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQR Date DateTime'/><title type='text'>Using DateTime Fields in SQR - Gotcha #343</title><content type='html'>This will return unexpected results:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;AND A.CLASS_PRICE_DTTM &lt;= $RC_FromDate&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This will return expected results:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;AND A.CLASS_PRICE_DTTM &lt;= to_date($RC_FromDate, 'DD-MON-YYYY')&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Where $RC_FromDate is a variable populated from a Date field on your Run Control page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1701624311476199306?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1701624311476199306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1701624311476199306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1701624311476199306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1701624311476199306'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/08/using-datetime-fields-in-sqr-gotcha-343.html' title='Using DateTime Fields in SQR - Gotcha #343'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6082450988764345612</id><published>2011-08-09T19:03:00.000+10:00</published><updated>2011-08-09T19:03:45.572+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='timestamp'/><title type='text'>DATETIMESTAMP Field  - Inserting into in SQR or SQL</title><content type='html'>UPDATE TABKLE_X&lt;br /&gt;set LAST_UPDATE_DTTM = to_timestamp($SysDateTime, 'DD-MON-YYYY_HH:MI:SS.FF6_AM')&lt;br /&gt;&lt;br /&gt;...something about version 9 :S&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6082450988764345612?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6082450988764345612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6082450988764345612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6082450988764345612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6082450988764345612'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/08/datetimestamp-field-inserting-into-in.html' title='DATETIMESTAMP Field  - Inserting into in SQR or SQL'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6767564150400396900</id><published>2011-07-27T17:56:00.001+10:00</published><updated>2011-07-27T17:56:47.666+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Last Max Process Instance'/><title type='text'>Last Process Instance Number in PeopleSoft</title><content type='html'>Lifted from Praj's most excellent Wiki:&lt;br /&gt;&lt;a href="http://peoplesoft.wikidot.com"&gt;http://peoplesoft.wikidot.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The table PS_PRCSSEQUENCE stores the last sequence numbers for the Process Scheduler and Report Manager. In PeopleTools 8.48.15 there are 5 process sequence keys (PRCSSEQKEY) which you can view yourself by looking at the translates on this field:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;0 = Process Instance&lt;br /&gt;1 = Report Instance&lt;br /&gt;2 = Transfer Instance&lt;br /&gt;3 = Report ID&lt;br /&gt;4 = Folder ID&lt;/blockquote&gt;&lt;br /&gt;It's probably a good health check to ensure that the numbers in PS_PRCSSEQUENCE match those in the relevant tables:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;select max(PRCSINSTANCE) as PRCSSEQKEY0 from PSPRCSRQST;&lt;br /&gt;select max(CONTENTID) PRCSSEQKEY1 from PS_CDM_AUTH;&lt;br /&gt;select max(TRANSFERINSTANCE) PRCSSEQKEY2 from PS_CDM_LIST;&lt;br /&gt;select max(PSRF_REPORT_ID) PRCSSEQKEY3 from PSRF_RINFO_TBL;&lt;br /&gt;select max(PSRF_FOLDER_ID) PRCSSEQKEY4 from PSRF_FINFO_TBL;&lt;/blockquote&gt;&lt;br /&gt;Especially if you happen to be clearing out data from these tables manually. I guess if you do clear out processes/reports you'll want to update the PS_PRCSSEQUENCE accordingly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6767564150400396900?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6767564150400396900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6767564150400396900' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6767564150400396900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6767564150400396900'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/07/last-process-instance-number-in.html' title='Last Process Instance Number in PeopleSoft'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3400735342875246327</id><published>2011-07-14T11:50:00.001+10:00</published><updated>2011-07-14T11:50:37.169+10:00</updated><title type='text'>Reports and/or log file not posting. N/A status.</title><content type='html'>You've tried everything. New run control ids, deleting rows from proc sched, holding your tongue the other way, mucking around with server reboots and caches, etc. etc.&lt;br /&gt;&lt;br /&gt;Yet if you log in as somebody else, it works.&lt;br /&gt;&lt;br /&gt;Delete your user. Start again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3400735342875246327?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3400735342875246327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3400735342875246327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3400735342875246327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3400735342875246327'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/07/reports-andor-log-file-not-posting-na.html' title='Reports and/or log file not posting. N/A status.'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8058689532681887202</id><published>2011-07-06T10:57:00.000+10:00</published><updated>2011-07-06T10:57:51.226+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Create Insert'/><title type='text'>SQL to Create Insert Script; Replace DMS</title><content type='html'>Instead using DMS to move data around you could run the following to insert a zillion rows. PL/SQL creates the SQL file for you.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;CREATE OR REPLACE FUNCTION GET_INSERT_SCRIPT(V_TABLE_NAME VARCHAR2)&lt;br /&gt;RETURN VARCHAR2 AS&lt;br /&gt;B_FOUND BOOLEAN := FALSE;&lt;br /&gt;V_TEMPA VARCHAR2 (8000);&lt;br /&gt;V_TEMPB VARCHAR2 (8000);&lt;br /&gt;V_TEMPC VARCHAR2 (255);&lt;br /&gt;BEGIN&lt;br /&gt;    FOR TAB_REC IN (SELECT TABLE_NAME&lt;br /&gt;                    FROM ALL_TABLES&lt;br /&gt;                    WHERE TABLE_NAME = UPPER (V_TABLE_NAME)) LOOP&lt;br /&gt;        B_FOUND := TRUE;&lt;br /&gt;        V_TEMPA := 'select ''insert into ' &amp;#124;&amp;#124; TAB_REC.TABLE_NAME &amp;#124;&amp;#124; ' (';&lt;br /&gt;        FOR COL_REC IN (SELECT *&lt;br /&gt;                        FROM ALL_TAB_COLUMNS&lt;br /&gt;                        WHERE TABLE_NAME = TAB_REC.TABLE_NAME&lt;br /&gt;                        ORDER BY COLUMN_ID) LOOP&lt;br /&gt;            IF COL_REC.COLUMN_ID = 1 THEN&lt;br /&gt;                V_TEMPA := V_TEMPA &amp;#124;&amp;#124; '''&amp;#124;&amp;#124;chr(10)&amp;#124;&amp;#124;''';&lt;br /&gt;            ELSE&lt;br /&gt;                V_TEMPA := V_TEMPA &amp;#124;&amp;#124; ',''&amp;#124;&amp;#124;chr(10)&amp;#124;&amp;#124;''';&lt;br /&gt;                V_TEMPB := V_TEMPB &amp;#124;&amp;#124; ',''&amp;#124;&amp;#124;chr(10)&amp;#124;&amp;#124;''';&lt;br /&gt;            END IF;&lt;br /&gt;&lt;br /&gt;            V_TEMPA := V_TEMPA &amp;#124;&amp;#124; COL_REC.COLUMN_NAME;&lt;br /&gt;            IF INSTR (COL_REC.DATA_TYPE, 'CHAR') &amp;gt; 0 THEN&lt;br /&gt;                V_TEMPC := '''''''''&amp;#124;&amp;#124;' &amp;#124;&amp;#124; COL_REC.COLUMN_NAME &amp;#124;&amp;#124; '&amp;#124;&amp;#124;''''''''';&lt;br /&gt;            ELSIF INSTR (COL_REC.DATA_TYPE, 'DATE') &amp;gt; 0 THEN&lt;br /&gt;                V_TEMPC := '''to_date(''''''&amp;#124;&amp;#124;to_char('&lt;br /&gt;                        &amp;#124;&amp;#124; COL_REC.COLUMN_NAME&lt;br /&gt;                        &amp;#124;&amp;#124; ',''mm/dd/yyyy hh24:mi'')&amp;#124;&amp;#124;'''''',''''mm/dd/yyyy hh24:mi'''')''';&lt;br /&gt;            ELSE&lt;br /&gt;                V_TEMPC := COL_REC.COLUMN_NAME;&lt;br /&gt;            END IF;&lt;br /&gt;&lt;br /&gt;            V_TEMPB := V_TEMPB&lt;br /&gt;                    &amp;#124;&amp;#124; '''&amp;#124;&amp;#124;decode('&lt;br /&gt;                    &amp;#124;&amp;#124; COL_REC.COLUMN_NAME&lt;br /&gt;                    &amp;#124;&amp;#124; ',Null,''Null'','&lt;br /&gt;                    &amp;#124;&amp;#124; V_TEMPC&lt;br /&gt;                    &amp;#124;&amp;#124; ')&amp;#124;&amp;#124;''';&lt;br /&gt;        END LOOP;&lt;br /&gt;&lt;br /&gt;        V_TEMPA := V_TEMPA&lt;br /&gt;                &amp;#124;&amp;#124; ') values ('&lt;br /&gt;                &amp;#124;&amp;#124; V_TEMPB&lt;br /&gt;                &amp;#124;&amp;#124; ');'' from '&lt;br /&gt;                &amp;#124;&amp;#124; TAB_REC.TABLE_NAME&lt;br /&gt;                &amp;#124;&amp;#124; ';';&lt;br /&gt;    END LOOP;&lt;br /&gt;&lt;br /&gt;    IF NOT B_FOUND THEN&lt;br /&gt;        V_TEMPA := '-&amp;#226;?? Table ' &amp;#124;&amp;#124; V_TABLE_NAME &amp;#124;&amp;#124; ' not found';&lt;br /&gt;    ELSE&lt;br /&gt;        V_TEMPA := V_TEMPA &amp;#124;&amp;#124; CHR (10) &amp;#124;&amp;#124; 'select ''-- commit;'' from dual;';&lt;br /&gt;    END IF;&lt;br /&gt;&lt;br /&gt;    RETURN V_TEMPA;&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;SHOW ERRORS&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;And the Code to run it:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;set head off&lt;br /&gt;set pages 0&lt;br /&gt;set trims on&lt;br /&gt;set lines 2000&lt;br /&gt;set feed off&lt;br /&gt;set echo off&lt;br /&gt;spool c:\Temp\genInsertForMyTable.sql&lt;br /&gt;SELECT get_insert_script('PS_SAD_TAC_MAP_BOA') FROM DUAL;  -- change table here&lt;br /&gt;spool off&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8058689532681887202?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8058689532681887202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8058689532681887202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8058689532681887202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8058689532681887202'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/07/sql-to-create-insert-script-replace-dms.html' title='SQL to Create Insert Script; Replace DMS'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6680232831607101706</id><published>2011-06-27T16:40:00.002+10:00</published><updated>2011-06-27T16:41:14.344+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='&quot;XML Publisher&quot;'/><title type='text'>XML Publisher: How To Guide</title><content type='html'>Summary of the 1,000,000 XML Publisher posts below. Quick little guide on how to create a basic Report Definition in v9 using Rowsets and Queries. You could modify to include Connected Queries (put data into rowset first).&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/leaf?id=0B1iUAkR4KDnTMGE2ZWJlZDktOTJjNy00NTlmLTlmNjMtYmJlYjFmMDBjMjVl&amp;hl=en_US&amp;authkey=CK7S3PcK"&gt;XML Publisher: How to Guide&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/leaf?id=0B1iUAkR4KDnTM2NkYjJmNGEtMzQ0OC00NzcxLThiMWEtOTMxOWQ1MzVhYTc0&amp;hl=en_US&amp;authkey=CI-owpYL"&gt;The Class referenced in the Guide (code)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6680232831607101706?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6680232831607101706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6680232831607101706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6680232831607101706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6680232831607101706'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/06/xml-publisher-how-to-guide.html' title='XML Publisher: How To Guide'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8547798199797111293</id><published>2011-06-20T11:03:00.000+10:00</published><updated>2011-06-20T11:03:04.505+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Menu Path Portal Component'/><title type='text'>Menu Path to a Component</title><content type='html'>Find your way like this:&lt;br /&gt;&lt;br /&gt;(Also in 8.5 version of Tools you can enter the Component Name under Menu &gt; Search Menu. Easier)&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;DEFINE COMPONENT_NAME = &amp;quot;SSS_STDNCTR_OPT&amp;quot;;&lt;br /&gt;SELECT&lt;br /&gt;  A.PORTAL_URI_SEG1 AS Menu&lt;br /&gt;, A.PORTAL_URI_SEG2 AS Component&lt;br /&gt;, D.PNLNAME AS Page&lt;br /&gt;, C.PORTAL_LABEL &amp;#124;&amp;#124; '-&amp;gt; ' &amp;#124;&amp;#124; B.PORTAL_LABEL &amp;#124;&amp;#124; '-&amp;gt; ' &amp;#124;&amp;#124; A.PORTAL_LABEL AS Portal_Path&lt;br /&gt;FROM&lt;br /&gt;  PSPRSMDEFN C&lt;br /&gt;, PSPRSMDEFN A&lt;br /&gt;    LEFT OUTER JOIN PSPRSMDEFN B&lt;br /&gt;      ON A.PORTAL_PRNTOBJNAME = B.PORTAL_OBJNAME , PSPNLGROUP D WHERE C.PORTAL_OBJNAME = B.PORTAL_PRNTOBJNAME&lt;br /&gt;  AND D.PNLGRPNAME = A.PORTAL_URI_SEG2&lt;br /&gt;  AND C.PORTAL_NAME = A.PORTAL_NAME&lt;br /&gt;  AND A.PORTAL_URI_SEG2 LIKE '&amp;amp;COMPONENT_NAME'&lt;br /&gt;  ORDER BY 1,2,3,4;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8547798199797111293?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8547798199797111293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8547798199797111293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8547798199797111293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8547798199797111293'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/06/menu-path-to-component.html' title='Menu Path to a Component'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8897789456706618977</id><published>2011-06-02T10:45:00.000+10:00</published><updated>2011-06-02T10:45:00.404+10:00</updated><title type='text'>XML Publisher to Window</title><content type='html'>To open directly to a pop-up window, not using the Process Scheduler:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;/********************************************************************************&lt;br /&gt;FRS576 CR000222 Michael Nitschke 01/06/2011&lt;br /&gt;Trigger the Job that will produce the XMLP Report.&lt;br /&gt;********************************************************************************/&lt;br /&gt;/* FRS576: Begin */&lt;br /&gt;import PSXP_RPTDEFNMANAGER:*;&lt;br /&gt;&lt;br /&gt;Local PSXP_RPTDEFNMANAGER:ReportDefn &amp;amp;oRptDefn;&lt;br /&gt;Local string &amp;amp;Report, &amp;amp;TemplateId, &amp;amp;LanguageCD, &amp;amp;OutputFormat;&lt;br /&gt;Local date &amp;amp;AsOfDate;&lt;br /&gt;Local Record &amp;amp;parms;&lt;br /&gt;&lt;br /&gt;&amp;amp;Report = &amp;quot;AMSW3_INVCEQ&amp;quot;;&lt;br /&gt;&amp;amp;TemplateId = &amp;quot;AMSW3_INVCEQ_1&amp;quot;;&lt;br /&gt;&amp;amp;LanguageCD = &amp;quot;&amp;quot;;&lt;br /&gt;&amp;amp;AsOfDate = %Date;&lt;br /&gt;&amp;amp;OutputFormat = &amp;quot;&amp;quot;;&lt;br /&gt;&lt;br /&gt;/* Create Report Definition. */&lt;br /&gt;&amp;amp;oRptDefn = create PSXP_RPTDEFNMANAGER:ReportDefn(&amp;amp;Report);&lt;br /&gt;&amp;amp;oRptDefn.Get();&lt;br /&gt;&lt;br /&gt;/* Setup Query Parameters. */&lt;br /&gt;&amp;amp;parms = &amp;amp;oRptDefn.GetPSQueryPromptRecord();&lt;br /&gt;&amp;amp;parms.INVOICE_ID.Value = AMSW3_STDNT_INV.INVOICE_ID.Value;&lt;br /&gt;&amp;amp;oRptDefn.SetPSQueryPromptRecord(&amp;amp;parms);&lt;br /&gt;&lt;br /&gt;/* Run Report. */&lt;br /&gt;&amp;amp;oRptDefn.ProcessReport(&amp;amp;TemplateId, &amp;amp;LanguageCD, &amp;amp;AsOfDate, &amp;amp;OutputFormat);&lt;br /&gt;CommitWork(); /* must do this */;&lt;br /&gt;&lt;br /&gt;/* Display report in separate window. */&lt;br /&gt;&amp;amp;oRptDefn.DisplayOutput();&lt;br /&gt;&lt;br /&gt;/* FRS576 End */&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8897789456706618977?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8897789456706618977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8897789456706618977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8897789456706618977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8897789456706618977'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/06/xml-publisher-to-window.html' title='XML Publisher to Window'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6464126340537474260</id><published>2011-05-31T17:44:00.002+10:00</published><updated>2011-05-31T17:44:44.592+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='duplicate id pl/sql'/><title type='text'>Fixing Duplicate Student and Organisation IDs</title><content type='html'>Like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;-- ************************************************************************************&lt;br /&gt;-- CSUPGRD-727 Michael Nitschke 31/05/2011&lt;br /&gt;-- Correct situation where Students and Organisations have duplicate IDs.&lt;br /&gt;-- This has occurred where users have overwritten the 'NEW' value when adding an Org.&lt;br /&gt;-- ************************************************************************************&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;    -- Build working tables for this process.&lt;br /&gt;&lt;br /&gt;    -- This one stores all the Records that will potentially be updated.&lt;br /&gt;    -- OCCURSCOUNT1 stores rows of data to be updated&lt;br /&gt;    -- OCCURSCOUNT2 stores rows of data to be updated *after* the fix has been run. Should be 0.&lt;br /&gt;    FOR i IN (SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME = 'PS_AMS_DUPID_RECNM') LOOP&lt;br /&gt;        EXECUTE IMMEDIATE 'DROP TABLE PS_AMS_DUPID_RECNM';&lt;br /&gt;    END LOOP;&lt;br /&gt;    EXECUTE IMMEDIATE '&lt;br /&gt;        CREATE TABLE PS_AMS_DUPID_RECNM (&lt;br /&gt;            DESCR VARCHAR2(100) NOT NULL,&lt;br /&gt;            RECNAME VARCHAR2(15) NOT NULL,&lt;br /&gt;               FIELDNAME VARCHAR2(18) NOT NULL,&lt;br /&gt;               OCCURSCOUNT1 SMALLINT NOT NULL,&lt;br /&gt;            OCCURSCOUNT2 SMALLINT NOT NULL)&lt;br /&gt;         TABLESPACE SAAPP STORAGE (INITIAL 40000 NEXT 100000 MAXEXTENTS UNLIMITED PCTINCREASE 0) PCTFREE 10 PCTUSED 80'&lt;br /&gt;         ;&lt;br /&gt;&lt;br /&gt;    -- This one stores the old EXT_ORG_ID and the new EXT_ORG_ID for each Organisation that is having its ID updated.&lt;br /&gt;    -- May be useful if something unexpected happens.&lt;br /&gt;    FOR i IN (SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME = 'PS_AMS_DUPID_OLDNW') LOOP&lt;br /&gt;        EXECUTE IMMEDIATE 'DROP TABLE PS_AMS_DUPID_OLDNW';&lt;br /&gt;    END LOOP;&lt;br /&gt;    EXECUTE IMMEDIATE '&lt;br /&gt;        CREATE TABLE PS_AMS_DUPID_OLDNW (&lt;br /&gt;            EXT_ORG_ID_OLD VARCHAR2(11) NOT NULL,&lt;br /&gt;            EXT_ORG_ID VARCHAR2(11) NOT NULL)&lt;br /&gt;        TABLESPACE SAAPP STORAGE (INITIAL 40000 NEXT 100000 MAXEXTENTS UNLIMITED PCTINCREASE 0) PCTFREE 10 PCTUSED 80'&lt;br /&gt;        ;&lt;br /&gt;&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;-- This procedure takes a given Record and finds all Records that use it as a prompt, where that prompt field is not EXT_ORG_ID (as record would be picked up in base select already).&lt;br /&gt;-- Note that this function is recursive. Use the maxDepth value to set how far down the tree to go.&lt;br /&gt;-- Too high a value and you will run out of cursors.&lt;br /&gt;CREATE OR REPLACE PROCEDURE FindWhereRecUsedAsPrompt(varRecname VARCHAR2, currentDepth integer) IS&lt;br /&gt;&lt;br /&gt;    CURSOR cRecPrompts IS&lt;br /&gt;        SELECT 'PROMPT' X, A.RECNAME AS RECNAME, A.FIELDNAME AS FIELDNAME&lt;br /&gt;        FROM&lt;br /&gt;          PSRECFIELD A&lt;br /&gt;        , PSRECDEFN B&lt;br /&gt;        , PSDBFIELD C&lt;br /&gt;        WHERE A.FIELDNAME &amp;lt;&amp;gt; 'EXT_ORG_ID'&lt;br /&gt;        AND A.EDITTABLE = varRecname&lt;br /&gt;        AND B.RECNAME = A.RECNAME&lt;br /&gt;        AND B.RECTYPE = 0  -- SQL Table&lt;br /&gt;        AND C.FIELDNAME = A.FIELDNAME&lt;br /&gt;        AND C.FIELDTYPE = 0; -- Character&lt;br /&gt;&lt;br /&gt;    depth integer;&lt;br /&gt;    maxDepth integer;&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt;    maxDepth:= 1; -- Set how deep you want to traverse down the prompt tables&lt;br /&gt;    depth:= currentDepth;&lt;br /&gt;&lt;br /&gt;    FOR recP in cRecPrompts&lt;br /&gt;    LOOP&lt;br /&gt;        EXECUTE IMMEDIATE 'INSERT INTO PS_AMS_DUPID_RECNM (DESCR, RECNAME, FIELDNAME, OCCURSCOUNT1, OCCURSCOUNT2) VALUES (''' &amp;#124;&amp;#124; recP.x &amp;#124;&amp;#124; '(depth: ' &amp;#124;&amp;#124; depth &amp;#124;&amp;#124; ', parent:' &amp;#124;&amp;#124; varRecname &amp;#124;&amp;#124; ')'' , ''' &amp;#124;&amp;#124; recP.RECNAME &amp;#124;&amp;#124; ''', ''' &amp;#124;&amp;#124; recP.FIELDNAME &amp;#124;&amp;#124; ''' ,0 ,0)';&lt;br /&gt;        IF depth &amp;lt; maxDepth THEN&lt;br /&gt;            FindWhereRecUsedAsPrompt(recP.RECNAME, depth+1);&lt;br /&gt;        END IF;&lt;br /&gt;    END LOOP;&lt;br /&gt;    depth:= depth-1;&lt;br /&gt;&lt;br /&gt;END FindWhereRecUsedAsPrompt;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;-- This procedure counts number of rows in affected tables.&lt;br /&gt;-- It uses the temp table PS_AMS_DUPID_RECNM&lt;br /&gt;-- OCCURSCOUNT1 stores the number of rows beofore the fix/update is applied.&lt;br /&gt;-- OCCURSCOUNT2 stores the number of rows after the fix/update has been applied (should = 0).&lt;br /&gt;CREATE OR REPLACE PROCEDURE analyseRowCount(fldUpdate VARCHAR2) IS&lt;br /&gt;&lt;br /&gt;    CURSOR cTableList IS&lt;br /&gt;        SELECT DISTINCT RECNAME, FIELDNAME, OCCURSCOUNT1 FROM PS_AMS_DUPID_RECNM&lt;br /&gt;        ;&lt;br /&gt;&lt;br /&gt;    sqlStatement VARCHAR2(300);&lt;br /&gt;    rowCount INTEGER;&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;    FOR rec in cTableList&lt;br /&gt;    LOOP&lt;br /&gt;        -- Two steps for legibility's sake.&lt;br /&gt;        BEGIN&lt;br /&gt;            If substr(rec.RECNAME, 1, 2) = 'PS'&lt;br /&gt;            THEN&lt;br /&gt;                sqlStatement:= 'SELECT COUNT(*) FROM ' &amp;#124;&amp;#124; rec.RECNAME &amp;#124;&amp;#124; ' WHERE SUBSTR(' &amp;#124;&amp;#124; rec.FIELDNAME &amp;#124;&amp;#124; ',1,7) IN (SELECT SUBSTR(EXT_ORG_ID,1,7) FROM PS_EXT_ORG_TBL B WHERE SUBSTR(B.EXT_ORG_ID,1,7) IN (SELECT A.EMPLID FROM PS_PERSONAL_DATA A WHERE A.EMPLID = SUBSTR(B.EXT_ORG_ID,1,7)))';&lt;br /&gt;--                dbms_output.put_line('SELECT COUNT(*) FROM ' &amp;#124;&amp;#124; rec.RECNAME &amp;#124;&amp;#124; ' WHERE SUBSTR(' &amp;#124;&amp;#124; rec.FIELDNAME &amp;#124;&amp;#124; ',1,7) IN ');&lt;br /&gt;            ELSE&lt;br /&gt;                sqlStatement:= 'SELECT COUNT(*) FROM PS_' &amp;#124;&amp;#124; rec.RECNAME &amp;#124;&amp;#124; ' WHERE SUBSTR(' &amp;#124;&amp;#124; rec.FIELDNAME &amp;#124;&amp;#124; ',1,7) IN (SELECT SUBSTR(EXT_ORG_ID,1,7) FROM PS_EXT_ORG_TBL B WHERE SUBSTR(B.EXT_ORG_ID,1,7) IN (SELECT A.EMPLID FROM PS_PERSONAL_DATA A WHERE A.EMPLID = SUBSTR(B.EXT_ORG_ID,1,7)))';&lt;br /&gt;--                dbms_output.put_line('SELECT COUNT(*) FROM PS_' &amp;#124;&amp;#124; rec.RECNAME &amp;#124;&amp;#124; ' WHERE SUBSTR(' &amp;#124;&amp;#124; rec.FIELDNAME &amp;#124;&amp;#124; ',1,7) IN ');&lt;br /&gt;            END IF;&lt;br /&gt;&lt;br /&gt;            EXECUTE IMMEDIATE sqlStatement INTO rowCount;&lt;br /&gt;            sqlStatement:= 'UPDATE PS_AMS_DUPID_RECNM SET ' &amp;#124;&amp;#124; fldUpdate &amp;#124;&amp;#124; ' = ' &amp;#124;&amp;#124; rowCount &amp;#124;&amp;#124; ' WHERE RECNAME = ''' &amp;#124;&amp;#124; rec.RECNAME &amp;#124;&amp;#124; ''' AND FIELDNAME = ''' &amp;#124;&amp;#124; rec.FIELDNAME &amp;#124;&amp;#124; '''';&lt;br /&gt;            EXECUTE IMMEDIATE sqlStatement;&lt;br /&gt;&lt;br /&gt;        EXCEPTION&lt;br /&gt;            WHEN OTHERS THEN&lt;br /&gt;            dbms_output.put_line('Error at analyseRowCount(): ' &amp;#124;&amp;#124; sqlstatement);&lt;br /&gt;        END;&lt;br /&gt;&lt;br /&gt;    END LOOP;&lt;br /&gt;END analyseRowCount;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- &amp;lt;&amp;lt; MAIN PROGRAM. &amp;gt;&amp;gt;&lt;br /&gt;DECLARE&lt;br /&gt;&lt;br /&gt;    -- Duplicate IDs.&lt;br /&gt;    CURSOR cDuplicateIDs IS&lt;br /&gt;        SELECT&lt;br /&gt;          EXT_ORG_ID&lt;br /&gt;        FROM PS_EXT_ORG_TBL A&lt;br /&gt;        WHERE A.EXT_ORG_ID IN&lt;br /&gt;            (SELECT B.EXT_ORG_ID&lt;br /&gt;            FROM PS_EXT_ORG_TBL B&lt;br /&gt;            WHERE SUBSTR(B.EXT_ORG_ID,1,7) IN&lt;br /&gt;                (SELECT C.EMPLID&lt;br /&gt;                FROM PS_PERSONAL_DATA C&lt;br /&gt;                WHERE C.EMPLID = SUBSTR(B.EXT_ORG_ID,1,7)))&lt;br /&gt;        --and rownum &amp;lt; 4 -- &amp;lt;&amp;lt; LOOK!!! used for building.&lt;br /&gt;        ;&lt;br /&gt;&lt;br /&gt;    -- Base tables.&lt;br /&gt;    -- Tables that have EXT_ORG_ID field.&lt;br /&gt;    CURSOR cBaseTables IS&lt;br /&gt;        SELECT&lt;br /&gt;          'Base' X&lt;br /&gt;        , A.RECNAME RECNAME&lt;br /&gt;        , A.FIELDNAME FIELDNAME&lt;br /&gt;        FROM&lt;br /&gt;          PSRECFIELD A&lt;br /&gt;        , PSRECDEFN B&lt;br /&gt;        WHERE A.FIELDNAME = 'EXT_ORG_ID'&lt;br /&gt;        AND B.RECNAME = A.RECNAME&lt;br /&gt;        AND B.RECTYPE = 0&lt;br /&gt;        AND B.RECNAME NOT LIKE '%TMP'&lt;br /&gt;        AND NOT EXISTS -- Not used as an audit record.&lt;br /&gt;            (SELECT 1&lt;br /&gt;            FROM PSRECDEFN&lt;br /&gt;            WHERE AUDITRECNAME = RECNAME)&lt;br /&gt;        ;&lt;br /&gt;&lt;br /&gt;    CURSOR cTableList IS&lt;br /&gt;        SELECT DISTINCT RECNAME, FIELDNAME, OCCURSCOUNT1 FROM PS_AMS_DUPID_RECNM&lt;br /&gt;        ;&lt;br /&gt;&lt;br /&gt;    sqlStatement VARCHAR2(300);&lt;br /&gt;    rowCount INTEGER;&lt;br /&gt;    newExtOrgId PS_EXT_ORG_TBL.EXT_ORG_ID%type;&lt;br /&gt;    duplicateID INTEGER;&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt;    -- Loop through the base tables that contain EXT_ORG_ID.&lt;br /&gt;    FOR rec in cBaseTables&lt;br /&gt;    LOOP&lt;br /&gt;&lt;br /&gt;        -- Insert into working table a list of both the base tables and any tables that use those base tables as a prompt.&lt;br /&gt;        -- These are the list of tables that potentially need to be updated.&lt;br /&gt;        EXECUTE IMMEDIATE 'INSERT INTO PS_AMS_DUPID_RECNM (DESCR, RECNAME, FIELDNAME, OCCURSCOUNT1, OCCURSCOUNT2) VALUES (''' &amp;#124;&amp;#124; rec.x &amp;#124;&amp;#124; ''', ''' &amp;#124;&amp;#124; rec.RECNAME &amp;#124;&amp;#124; ''', ''' &amp;#124;&amp;#124; rec.FIELDNAME &amp;#124;&amp;#124; ''',0 ,0)';&lt;br /&gt;        FindWhereRecUsedAsPrompt(rec.RECNAME, 1);&lt;br /&gt;&lt;br /&gt;    END LOOP;&lt;br /&gt;&lt;br /&gt;    -- Now we have a list of tables built we'll analyse how many rows we expect to update.&lt;br /&gt;    -- PS_AMS_DUPID_RECNM.OCCURSCOUNT1 stores the number of rows that will be updated.&lt;br /&gt;    analyseRowCount('OCCURSCOUNT1');&lt;br /&gt;&lt;br /&gt;    -- Update the duplicate IDs (this is the really exciting part).&lt;br /&gt;    For rec in cDuplicateIDs&lt;br /&gt;    LOOP&lt;br /&gt;&lt;br /&gt;        -- Create a new ID.&lt;br /&gt;        duplicateID := 1;&lt;br /&gt;        WHILE duplicateID &amp;lt;&amp;gt; 0&lt;br /&gt;        LOOP&lt;br /&gt;            SELECT EMPLID_LAST_EMPL + 1 INTO newExtOrgId FROM PS_INSTALLATION;&lt;br /&gt;            EXECUTE IMMEDIATE 'SELECT count(*) FROM PS_PERSONAL_DATA WHERE EMPLID = ''' &amp;#124;&amp;#124; newExtOrgId &amp;#124;&amp;#124; '''' INTO duplicateID;&lt;br /&gt;            IF duplicateID = 0&lt;br /&gt;            THEN&lt;br /&gt;                EXECUTE IMMEDIATE 'SELECT count(*) FROM PS_EXT_ORG_TBL WHERE EXT_ORG_ID = ''' &amp;#124;&amp;#124; newExtOrgId &amp;#124;&amp;#124; '''' INTO duplicateID;&lt;br /&gt;                --dbms_output.put_line('duplicateID= ' &amp;#124;&amp;#124; duplicateID &amp;#124;&amp;#124; ', newExtOrgId= ' &amp;#124;&amp;#124; newExtOrgId);&lt;br /&gt;            END IF;&lt;br /&gt;        END LOOP;&lt;br /&gt;        UPDATE PS_INSTALLATION SET EMPLID_LAST_EMPL = newExtOrgId;&lt;br /&gt;&lt;br /&gt;        -- Update the old value to the new value in every record that has at least one affected row.&lt;br /&gt;        FOR recUpd in cTableList&lt;br /&gt;        LOOP&lt;br /&gt;            If recUpd.OCCURSCOUNT1 &amp;gt; 0 THEN&lt;br /&gt;&lt;br /&gt;                If substr(recUpd.RECNAME, 1, 2) = 'PS'&lt;br /&gt;                THEN&lt;br /&gt;                    sqlStatement:= 'UPDATE ' &amp;#124;&amp;#124; recUpd.RECNAME &amp;#124;&amp;#124; ' SET ' &amp;#124;&amp;#124; recUpd.FIELDNAME &amp;#124;&amp;#124; ' = ''' &amp;#124;&amp;#124; newExtOrgId &amp;#124;&amp;#124; ''' WHERE ' &amp;#124;&amp;#124; recUpd.FIELDNAME &amp;#124;&amp;#124; ' = ''' &amp;#124;&amp;#124; rec.EXT_ORG_ID &amp;#124;&amp;#124; '''';&lt;br /&gt;                ELSE&lt;br /&gt;                    sqlStatement:= 'UPDATE PS_' &amp;#124;&amp;#124; recUpd.RECNAME &amp;#124;&amp;#124; ' SET ' &amp;#124;&amp;#124; recUpd.FIELDNAME &amp;#124;&amp;#124; ' = ''' &amp;#124;&amp;#124; newExtOrgId &amp;#124;&amp;#124; ''' WHERE ' &amp;#124;&amp;#124; recUpd.FIELDNAME &amp;#124;&amp;#124; ' = ''' &amp;#124;&amp;#124; rec.EXT_ORG_ID &amp;#124;&amp;#124; '''';&lt;br /&gt;                END IF;&lt;br /&gt;&lt;br /&gt;                BEGIN&lt;br /&gt;                    EXECUTE IMMEDIATE sqlStatement;&lt;br /&gt;                    --dbms_output.put_line(sqlStatement);&lt;br /&gt;                EXCEPTION&lt;br /&gt;                    WHEN OTHERS THEN&lt;br /&gt;                    dbms_output.put_line('Error at (main program): ' &amp;#124;&amp;#124; sqlstatement);&lt;br /&gt;                END;&lt;br /&gt;&lt;br /&gt;            END IF;&lt;br /&gt;        END LOOP;&lt;br /&gt;&lt;br /&gt;        -- Record the old and new values.&lt;br /&gt;        EXECUTE IMMEDIATE 'INSERT INTO PS_AMS_DUPID_OLDNW (EXT_ORG_ID_OLD, EXT_ORG_ID) VALUES (''' &amp;#124;&amp;#124; rec.EXT_ORG_ID &amp;#124;&amp;#124; ''', ''' &amp;#124;&amp;#124; newExtOrgId &amp;#124;&amp;#124; ''')';&lt;br /&gt;&lt;br /&gt;    END LOOP;&lt;br /&gt;&lt;br /&gt;    -- Analyse the number of rows again. We expect 0.&lt;br /&gt;    -- OCCURSCOUNT2 stores the number of rows post update/fix. Should be 0.&lt;br /&gt;    analyseRowCount('OCCURSCOUNT2');&lt;br /&gt;&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;-- Show the analysis/working tables.&lt;br /&gt;select * from PS_AMS_DUPID_OLDNW;&lt;br /&gt;SELECT * FROM PS_AMS_DUPID_RECNM where occurscount1 &amp;gt; 0;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6464126340537474260?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6464126340537474260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6464126340537474260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6464126340537474260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6464126340537474260'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/05/fixing-duplicate-student-and.html' title='Fixing Duplicate Student and Organisation IDs'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5132721497514805082</id><published>2011-05-25T15:56:00.000+10:00</published><updated>2011-05-25T15:56:04.564+10:00</updated><title type='text'>Always Return one Row in Oracle SQL</title><content type='html'>SELECT Min(FIELD) FIELD&lt;br /&gt;FROM SOME_TABLE&lt;br /&gt;WHERE FIELD = 'X'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-5132721497514805082?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5132721497514805082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5132721497514805082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5132721497514805082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5132721497514805082'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/05/always-return-one-row-in-oracle-sql.html' title='Always Return one Row in Oracle SQL'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8542616711679798712</id><published>2011-05-18T16:40:00.001+10:00</published><updated>2011-05-18T16:40:48.258+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher App Package Class'/><title type='text'>XML Publisher and Rowset Class</title><content type='html'>Example Class for an Application Package. Takes a Rowset and passes to the given Publisher Report and Template.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;/********************************************************************************&lt;br /&gt;SAMS_BRD220X Michael Nitschke 12/05/2011 XML Publisher&lt;br /&gt;Common Class for XML Publisher&lt;br /&gt;&lt;br /&gt;Users can use the method CreateXMLFilesFromRS to create only XML and XSD file,&lt;br /&gt;very useful for XMLPublisher Template creation.&lt;br /&gt;&lt;br /&gt;The PublishXMLReportFromRS method will create the XML Files and publish the given &lt;br /&gt;report.&lt;br /&gt;********************************************************************************/&lt;br /&gt;import PSXP_XMLGEN:*;&lt;br /&gt;import PSXP_RPTDEFNMANAGER:*;&lt;br /&gt;&lt;br /&gt;class XMLPublisher&lt;br /&gt;   method XMLPublisher();&lt;br /&gt;   method PublishXMLReportFromRS();&lt;br /&gt;   method CreateXMLFilesFromRS();&lt;br /&gt;   &lt;br /&gt;   property Rowset rsData;&lt;br /&gt;   property string sFileNameXSD;&lt;br /&gt;   property string sFileNameXML;&lt;br /&gt;   property string sRptDefn;&lt;br /&gt;   property string sReportTemplate;&lt;br /&gt;   property number processInstance;&lt;br /&gt;   property string xmlFileName;&lt;br /&gt;end-class;&lt;br /&gt;&lt;br /&gt;method XMLPublisher&lt;br /&gt;   /* Constructor. */&lt;br /&gt;end-method;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Takes the rsData rowset property and uses it to publish a report, using other property values. */&lt;br /&gt;method PublishXMLReportFromRS&lt;br /&gt;   &lt;br /&gt;   %This.CreateXMLFilesFromRS();&lt;br /&gt;   &lt;br /&gt;   /* Generate the report. */&lt;br /&gt;   Local any &amp;amp;oRptDefn = create PSXP_RPTDEFNMANAGER:ReportDefn(&amp;amp;sRptDefn); /* report definition name */&lt;br /&gt;   &amp;amp;oRptDefn.Get();&lt;br /&gt;   &amp;amp;oRptDefn.SetRuntimeDataXMLFile(%This.xmlFileName); /* Connect report and data. */&lt;br /&gt;   &amp;amp;oRptDefn.ProcessReport(&amp;amp;sReportTemplate, %Language_User, %Date, &amp;quot;&amp;quot;); /* report's template ID */&lt;br /&gt;   &amp;amp;oRptDefn.OutDestination = %FilePath;&lt;br /&gt;   &lt;br /&gt;   /* Publish to Report Manager. */&lt;br /&gt;   &amp;amp;oRptDefn.Publish(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;amp;processInstance);&lt;br /&gt;   &lt;br /&gt;end-method;&lt;br /&gt;&lt;br /&gt;method CreateXMLFilesFromRS&lt;br /&gt;   &lt;br /&gt;   /* Create XSD file. */&lt;br /&gt;   Local PSXP_XMLGEN:RowSetDS &amp;amp;oXML_GENERATOR = create psxp_xmlgen:RowSetDS();&lt;br /&gt;   Local string &amp;amp;my_schema = &amp;amp;oXML_GENERATOR.getXSDSchema(&amp;amp;rsData);&lt;br /&gt;   Local File &amp;amp;XSD_File = GetFile(&amp;amp;sFileNameXSD, &amp;quot;W&amp;quot;);&lt;br /&gt;   &amp;amp;XSD_File.WriteLine(&amp;amp;my_schema);&lt;br /&gt;   &amp;amp;XSD_File.Close();&lt;br /&gt;   &lt;br /&gt;   /* Create XML file. */&lt;br /&gt;   Local string &amp;amp;my_xml = &amp;amp;oXML_GENERATOR.getXMLData(&amp;amp;rsData, &amp;quot;&amp;quot;);&lt;br /&gt;   Local File &amp;amp;XML_File = GetFile(&amp;amp;sFileNameXML, &amp;quot;W&amp;quot;);&lt;br /&gt;   &amp;amp;XML_File.WriteLine(&amp;amp;my_xml);&lt;br /&gt;   %This.xmlFileName = &amp;amp;XML_File.Name;&lt;br /&gt;   &amp;amp;XML_File.Close();&lt;br /&gt;   &lt;br /&gt;end-method;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8542616711679798712?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8542616711679798712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8542616711679798712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8542616711679798712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8542616711679798712'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/05/xml-publisher-and-rowset-class.html' title='XML Publisher and Rowset Class'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8559710644836404741</id><published>2011-05-11T12:32:00.000+10:00</published><updated>2011-05-11T12:32:51.259+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher page number'/><title type='text'>Creating Section Breaks in XML Publisher/BI Publisher</title><content type='html'>Rather than using for-each:GROUP_NAME you use for-each@section:GROUP_NAME, every time xmlp hits a new member of GROUP_NAME the page numbering and header is reset.&lt;br /&gt;&lt;br /&gt;(from www.orafaq.com forums)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8559710644836404741?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8559710644836404741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8559710644836404741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8559710644836404741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8559710644836404741'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/05/creating-section-breaks-in-xml.html' title='Creating Section Breaks in XML Publisher/BI Publisher'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3927655180627893938</id><published>2011-05-09T17:00:00.000+10:00</published><updated>2011-05-09T17:00:08.051+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher install BI'/><title type='text'>Setting Up BI Publisher/XML Publisher</title><content type='html'>This can be fun. I had a lot of trouble with an error message stating I couldn't install the plug-in while Word was running. Shut down process after process to no avail.&lt;br /&gt;&lt;br /&gt;Solution: &lt;br /&gt;1. Download to your desktop the install file from Main Menu &gt; Reporting Tools &gt; XML Publisher &gt; Setup &gt; Design Helper.&lt;br /&gt;2. Restart the machine in Safe Mode and install.&lt;br /&gt;&lt;br /&gt;I also encountered further problems when trying to use some of the features such as the Chart object. Reinstall BI Publisher by navigating to: C:\Program Files\Oracle\BI Publisher\BI Publisher Desktop\DotNetInstallFiles\setup.exe and following the prompts (next, ok, next, yes etc.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3927655180627893938?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3927655180627893938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3927655180627893938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3927655180627893938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3927655180627893938'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/05/setting-up-bi-publisherxml-publisher.html' title='Setting Up BI Publisher/XML Publisher'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4062584307166878791</id><published>2011-05-02T15:26:00.002+10:00</published><updated>2011-05-02T15:47:48.715+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher'/><title type='text'>XML / BI Publisher Example, using XML File as the Data Source</title><content type='html'>Note that using a Data Source of "XMLDoc" or "RowSet" has been deprecated. If you are going to create a new XML Publisher Report you are going to have to use a data source of "XML File" or "PS Query".&lt;br /&gt;&lt;br /&gt;This is probably a good way of going about it anyway because you need to create the XML and XSD files before you can create the template anyway (unless you want to make them by hand).&lt;br /&gt;&lt;br /&gt;Following is a simple example that could use some flourish, but illustrates the method clearly.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;/* Super simple example of creating a XML Publisher report based on RowSet data.&lt;br /&gt;   Note that producing reports from RowSet data or XMLDoc data has been deprecated.&lt;br /&gt;   This example uses a Data Source of 'XML File'. */&lt;br /&gt;&lt;br /&gt;import PSXP_XMLGEN:*;&lt;br /&gt;import PSXP_RPTDEFNMANAGER:*;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Create Rowset(s) data for the report, however you need. */&lt;br /&gt;Local Rowset &amp;rsData = CreateRowset(Record.AMS_SOA_PROG_VW);&lt;br /&gt;&amp;rsData.Fill("WHERE EMPLID LIKE '3064%'");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Local string &amp;sFileNameXSD = "Rowset.xsd";&lt;br /&gt;Local string &amp;sFileNameXML = "Rowset.xml";&lt;br /&gt;Local string &amp;sRptDefn = "AMS_SOA_XML";&lt;br /&gt;Local string &amp;sReportTemplate = "AMS_SOA_XML_1";&lt;br /&gt;&lt;br /&gt;/* Create XSD file. */&lt;br /&gt;Local PSXP_XMLGEN:RowSetDS &amp;oXML_GENERATOR = create psxp_xmlgen:RowSetDS();&lt;br /&gt;Local string &amp;my_schema = &amp;oXML_GENERATOR.getXSDSchema(&amp;rsData);&lt;br /&gt;Local File &amp;XSD_File = GetFile(&amp;sFileNameXSD, "W");&lt;br /&gt;&amp;XSD_File.WriteLine(&amp;my_schema);&lt;br /&gt;&amp;XSD_File.Close();&lt;br /&gt;&lt;br /&gt;/* Create XML file. */&lt;br /&gt;Local string &amp;my_xml = &amp;oXML_GENERATOR.getXMLData(&amp;rsData, "");&lt;br /&gt;Local File &amp;XML_File = GetFile(&amp;sFileNameXML, "W");&lt;br /&gt;&amp;XML_File.WriteLine(&amp;my_xml);&lt;br /&gt;Local string &amp;xmlFileName = &amp;XML_File.Name; /* File.Name not available after File.Close() */&lt;br /&gt;&amp;XML_File.Close();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Generate the report. */&lt;br /&gt;&amp;oRptDefn = create PSXP_RPTDEFNMANAGER:ReportDefn(&amp;sRptDefn); /* report definition name */&lt;br /&gt;&amp;oRptDefn.Get();&lt;br /&gt;&amp;oRptDefn.SetRuntimeDataXMLFile(&amp;xmlFileName); /* Connect report and data. */&lt;br /&gt;&amp;oRptDefn.ProcessReport(&amp;sRptTemplate, %Language_User, %Date, ""); /* report's template ID */&lt;br /&gt;&amp;oRptDefn.OutDestination = %FilePath;&lt;br /&gt;&lt;br /&gt;/* Publish to Report Manager. */&lt;br /&gt;&amp;oRptDefn.Publish("", "", "", AMS_SOA_AET.PROCESS_INSTANCE);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4062584307166878791?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4062584307166878791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4062584307166878791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4062584307166878791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4062584307166878791'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/05/xml-bi-publisher-example-using-xml-file.html' title='XML / BI Publisher Example, using XML File as the Data Source'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1119047692687736214</id><published>2011-04-29T13:57:00.000+10:00</published><updated>2011-04-29T13:57:24.789+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML PeopleCode'/><title type='text'>Creating XML Publisher Documents with PeopleCode</title><content type='html'>Uploaded to own site in case it ever disappears from Oracle (or moves)&lt;br /&gt;Nice doco on how to create XML from PeopleCode to use in BI Publisher (XML Publisher) or what have you.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B1iUAkR4KDnTYmY4ZjAyYjAtNjllYS00NGZmLTllNzUtOTM0NmJmNjEzOTg2&amp;amp;hl=en&amp;amp;authkey=CNK1rvoL"&gt;Creating XML Publisher Documents with PeopleCode&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1119047692687736214?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1119047692687736214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1119047692687736214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1119047692687736214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1119047692687736214'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/04/creating-xml-publisher-documents-with.html' title='Creating XML Publisher Documents with PeopleCode'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6885760457616754746</id><published>2011-04-14T13:23:00.000+10:00</published><updated>2011-04-14T13:23:42.383+10:00</updated><title type='text'>My New View</title><content type='html'>&lt;iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/?ie=UTF8&amp;amp;hq=&amp;amp;hnear=Melbourne+Victoria,+Australia&amp;amp;ll=-37.811313,144.956132&amp;amp;spn=0.001636,0.004506&amp;amp;t=f&amp;amp;z=19&amp;amp;ecpose=-37.81390197,144.95206376,132.6,51.148,79.516,0&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com/?ie=UTF8&amp;amp;hq=&amp;amp;hnear=Melbourne+Victoria,+Australia&amp;amp;ll=-37.811313,144.956132&amp;amp;spn=0.001636,0.004506&amp;amp;t=f&amp;amp;z=19&amp;amp;ecpose=-37.81390197,144.95206376,132.6,51.148,79.516,0&amp;amp;source=embed" style="color:#0000FF;text-align:left"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6885760457616754746?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6885760457616754746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6885760457616754746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6885760457616754746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6885760457616754746'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/04/my-new-view.html' title='My New View'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6188459659992072772</id><published>2011-03-04T16:54:00.001+10:00</published><updated>2011-03-30T11:21:25.058+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App Engine bind run_cntl_id run control'/><title type='text'>Run Control in App Engine</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;The Default State Record&amp;nbsp;&lt;strong&gt;must&lt;/strong&gt;&amp;nbsp;be built as an SQL Table. This is not documented (I think).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;You can then use the Run Control by binding as in the following example. If it is a Derived Work table, not an SQL Table, the %Bind value will be Null.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;img src="https://mail.google.com/mail/?ui=2&amp;amp;ik=d915ced0a1&amp;amp;view=att&amp;amp;th=12e7dbe2481fd183&amp;amp;attid=0.1&amp;amp;disp=emb&amp;amp;zw" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6188459659992072772?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6188459659992072772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6188459659992072772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6188459659992072772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6188459659992072772'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2011/03/run-control-in-app-engine.html' title='Run Control in App Engine'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-7188856218190371816</id><published>2010-12-04T07:22:00.003+10:00</published><updated>2010-12-04T07:24:04.954+10:00</updated><title type='text'>Style Sheet Gotchas</title><content type='html'>So, you've created your own style sheet class to change the border colour of a Frame or Group Box to red. But, when you view the page rather than a red border you get no border. What is going wrong?&lt;br /&gt;If you look at the HTML source you'll see your frame, which is actually a HTML Table, written there with your new class. Something like:&lt;br /&gt;&lt;br /&gt;[table class="REDBORDER" style="border:none"]&lt;br /&gt;&lt;br /&gt;Why is it hiding your borders?&lt;br /&gt;Look above and you'll see another table:&lt;br /&gt;&lt;br /&gt;[table class="REDBORDERWBO"...&lt;br /&gt;&lt;br /&gt;What is this?&lt;br /&gt;&lt;br /&gt;On the page definition in Application Designer you can turn a Frame's border on/off. It is in the properties for each Frame object. PeopleSoft adds another Table around your Frame's Table that is used to handle the on/off (hidden) state of the border. If the Frame border is on you'll see the wrapper table with class xxxWBO (with border) and if off you'll see the wraper table with class xxxNBO (no border).&lt;br /&gt;Your custom class definition, in this example, also needs the classes REDBORDERWBO and REDBORDERNBO to handle the on/off state of the Frame border. Same goes for Group Boxes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-7188856218190371816?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/7188856218190371816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=7188856218190371816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7188856218190371816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7188856218190371816'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/12/style-sheet-gotchas.html' title='Style Sheet Gotchas'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-2618802783014661721</id><published>2010-11-11T15:08:00.000+10:00</published><updated>2010-11-11T15:08:09.430+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SamDestroy'/><title type='text'>Who is SamDestroy?</title><content type='html'>To get around the SamDestroy error when comparing projects from file go to Config Manager, Remote Call/AE Tab, and check the Shared Flags "Disable DB Stats" checkbox and you should be fine.&lt;br /&gt;&lt;br /&gt;This seems to only be an issue for DB2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-2618802783014661721?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/2618802783014661721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=2618802783014661721' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2618802783014661721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2618802783014661721'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/11/who-is-samdestroy.html' title='Who is SamDestroy?'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4660127137732542343</id><published>2010-11-04T08:13:00.003+10:00</published><updated>2010-11-04T08:26:16.299+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='James Court Medina Canberra'/><title type='text'>James Court Medina Apartments, Canberra</title><content type='html'>As an I.T. contractor I am required to work in different cities, sometimes 3 different contracts/year and 3 different cities.&lt;br /&gt;&lt;br /&gt;I am writing a short review of &lt;a href="http://www.medina.com.au/medina-executive-james-court/hotel"&gt;James Court Medina&lt;/a&gt; apartments in Canberra to partially vent my frustration, and I know Google will probably pick up this post : )&lt;br /&gt;&lt;br /&gt;I did some thinking last night, all the places I had ever lived in, including my first slum/sharehouse as a teenager. &lt;a href="http://www.medina.com.au/medina-executive-james-court/hotel"&gt;James Court Medina&lt;/a&gt;&amp;nbsp;is actually the worst apartment I have ever lived in, ever. Including addresses in Russia. DO NOT LIVE HERE. At least my slums had one or two appealing factors, like the beach being across the road or price. They all had a working shower.&lt;br /&gt;&lt;br /&gt;1. Location. You will not sleep. Take a look at the location on a map. That is the intersection of two major roads. The car noise is actually fine, it is the trucks that will rob you of any sleep. They compression brake in to those traffic lights&amp;nbsp;all morning, starting at about 4am. BRRRRRRR-rrrrrr-RRRRRR-SQUEEEEEEEEK. You will jump awake the first few times. It's best to go to bed around 8pm in anticipation of being woken very early.&lt;br /&gt;&lt;br /&gt;2. Heating. I arrived here in Spring and even then the heater in the living room, a split system from the late 80's, was insufficient to heat the room. I spent weeks watching television in thermals and a beanie. I'd hate to see what it's like in winter. You could turn the fridge off I'm sure.&lt;br /&gt;&lt;br /&gt;3. Condition. Nothing has been updated since it was built in the late 80's early 90's. I opened my windows one afternoon and now two weeks later they are still stuck open. I'm still waiting for them to be fixed. This is just&amp;nbsp;lovely at night when a 6 degree wind blows through, My lounge room is now like a fridge. Also, as I mentioned, NO maintenance has been done since the aprtments were&amp;nbsp;built. I had to decalcify the shower heads myself.&lt;br /&gt;&lt;br /&gt;4. Price. Seriously WTF? Look elsewhere. I know for a fact that for an extra $50/week you can have lake views and a marble kitchen. The only reason I moved in here was because I was extremely unlucky with my timing, and there was nothing else available. I regret my decision.&lt;br /&gt;&lt;br /&gt;To Summarise: LOOK ELSEWHERE. DO NOT LIVE AT &lt;a href="http://www.medina.com.au/medina-executive-james-court/hotel"&gt;James Court Medina&lt;/a&gt;, Canberra.&lt;br /&gt;&lt;br /&gt;P.S. The fire alarm went off yesterday afternoon. I could hear it from the lounge room but I &lt;strong&gt;could not hear it from the bedroom&lt;/strong&gt;, even though I knew it was ringing. Dodgy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4660127137732542343?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4660127137732542343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4660127137732542343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4660127137732542343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4660127137732542343'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/11/james-court-medina-apartments-canberra.html' title='James Court Medina Apartments, Canberra'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4628064417509405922</id><published>2010-08-10T09:34:00.003+10:00</published><updated>2010-08-10T09:35:46.294+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test sql random'/><title type='text'>Inserting Random Test Data</title><content type='html'>&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;INSERT INTO PS_SOME_TEST_TBL&lt;br /&gt;SELECT EMPLID, 'Test ID' &lt;br /&gt;FROM&lt;br /&gt;    (SELECT EMPLID FROM PS_JOB&lt;br /&gt;    &lt;b&gt;ORDER BY DBMS_RANDOM.VALUE&lt;/b&gt;)&lt;br /&gt;WHERE ROWNUM &amp;lt; 101;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4628064417509405922?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4628064417509405922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4628064417509405922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4628064417509405922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4628064417509405922'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/08/inserting-random-test-data.html' title='Inserting Random Test Data'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4824566864013856750</id><published>2010-07-22T17:31:00.000+10:00</published><updated>2010-07-22T17:31:49.593+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cache array PeopleCode'/><title type='text'>Component Arrays - Caching</title><content type='html'>One Application Engine performance tip I found was to place the results of commonly used queries into Component level arrays that could be searched through on the Application Server instead of making a call to the database. Some code was triggered that many times the DB calls numberd in millions and all the round-trips were expensive.&lt;br /&gt;&lt;br /&gt;The following creates component arrays that store the results for a common query, in this case PIN_NUM and PIN_NM from the GP_PIN table.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;/* Create a set of global look-up arrays. &lt;br /&gt;   This will remove the need to call the db many, many times. &lt;br /&gt;&lt;br /&gt;  See CC_FUNCLIB_UOA.LOOKUP.FieldFormula for how to call/use. */&lt;br /&gt;&lt;br /&gt;Component array of string &amp;amp;arrPinNumIndex;&lt;br /&gt;Component array of number &amp;amp;arrPinNumVal;&lt;br /&gt;&lt;br /&gt;Component array of number &amp;amp;arrPinNmIndex;&lt;br /&gt;Component array of string &amp;amp;arrPinNmVal;&lt;br /&gt;&lt;br /&gt;Local SQL &amp;amp;sql;&lt;br /&gt;Local string &amp;amp;pinNm;&lt;br /&gt;Local integer &amp;amp;pinNum, &amp;amp;i;&lt;br /&gt;&lt;br /&gt;/* PIN_NUM Lookup: */&lt;br /&gt;&amp;amp;arrPinNumIndex = CreateArrayRept(&amp;quot;&amp;quot;, 0);&lt;br /&gt;&amp;amp;arrPinNumVal = CreateArrayRept(0, 0);&lt;br /&gt;&lt;br /&gt;&amp;amp;sql = CreateSQL(&amp;quot;SELECT PIN_NM, PIN_NUM FROM %Table(GP_PIN) ORDER BY 1&amp;quot;);&lt;br /&gt;&amp;amp;i = 1;&lt;br /&gt;While &amp;amp;sql.Fetch(&amp;amp;pinNm, &amp;amp;pinNum)&lt;br /&gt;   &amp;amp;arrPinNumIndex [&amp;amp;i] = &amp;amp;pinNm;&lt;br /&gt;   &amp;amp;arrPinNumVal [&amp;amp;i] = &amp;amp;pinNum;&lt;br /&gt;   &amp;amp;i = &amp;amp;i + 1;&lt;br /&gt;End-While;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* PIN_NM Lookup: */&lt;br /&gt;&amp;amp;arrPinNmIndex = CreateArrayRept(0, 0);&lt;br /&gt;&amp;amp;arrPinNmVal = CreateArrayRept(&amp;quot;&amp;quot;, 0);&lt;br /&gt;&lt;br /&gt;&amp;amp;sql = CreateSQL(&amp;quot;SELECT PIN_NUM, PIN_NM FROM %Table(GP_PIN) ORDER BY 1&amp;quot;);&lt;br /&gt;&amp;amp;i = 1;&lt;br /&gt;While &amp;amp;sql.Fetch(&amp;amp;pinNum, &amp;amp;pinNm)&lt;br /&gt;   &amp;amp;arrPinNmIndex [&amp;amp;i] = &amp;amp;pinNum;&lt;br /&gt;   &amp;amp;arrPinNmVal [&amp;amp;i] = &amp;amp;pinNm;&lt;br /&gt;   &amp;amp;i = &amp;amp;i + 1;&lt;br /&gt;End-While;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;There is a Function that can be called to interrogate the arrays for the value you are searching for:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;* Search the global array that stores cached lookup values from database.&lt;br /&gt;   This removes (a lot of) roundtrips between app server and db server. &lt;br /&gt;&lt;br /&gt;   Example of use:&lt;br /&gt;&lt;br /&gt;     /* previously populated arrays - index and value. */&lt;br /&gt;     Component array of string &amp;amp;arrPinNumIndex;&lt;br /&gt;     Component array of number &amp;amp;arrPinNumVal;&lt;br /&gt;&lt;br /&gt;     Declare Function GetCached PeopleCode CC_FUNCLIB_UOA.LOOKUP FieldFormula;&lt;br /&gt;     &amp;amp;x = GetCached(&amp;quot;ZACC ALA&amp;quot;, &amp;amp;arrPinNumIndex, &amp;amp;arrPinNumVal);&lt;br /&gt;&lt;br /&gt;   i.e. Pass it a pin name and two, synchronised arrays.&lt;br /&gt;   The first array contains the index, the second contains values that are returned.&lt;br /&gt;   Obviously only works on &amp;quot;2 dimensional arrays&amp;quot;&lt;br /&gt;&lt;br /&gt;*&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Function BinarySearch(&amp;amp;arr, &amp;amp;srchVal, &amp;amp;low As integer, &amp;amp;high As integer) Returns integer&lt;br /&gt;   &lt;br /&gt;   If (&amp;amp;high &amp;lt; &amp;amp;low) Then&lt;br /&gt;      Return - 1; /* not found */&lt;br /&gt;   End-If;&lt;br /&gt;   &lt;br /&gt;   &amp;amp;mid = &amp;amp;low + ((&amp;amp;high - &amp;amp;low) / 2);&lt;br /&gt;   If &amp;amp;arr [&amp;amp;mid] &amp;gt; &amp;amp;srchVal Then&lt;br /&gt;      Return BinarySearch(&amp;amp;arr, &amp;amp;srchVal, &amp;amp;low, &amp;amp;mid - 1);&lt;br /&gt;   Else&lt;br /&gt;      If &amp;amp;arr [&amp;amp;mid] &amp;lt; &amp;amp;srchVal Then&lt;br /&gt;         Return BinarySearch(&amp;amp;arr, &amp;amp;srchVal, &amp;amp;mid + 1, &amp;amp;high);&lt;br /&gt;      Else&lt;br /&gt;         Return &amp;amp;mid; /* found */&lt;br /&gt;      End-If;&lt;br /&gt;   End-If;&lt;br /&gt;   &lt;br /&gt;End-Function;&lt;br /&gt;&lt;br /&gt;Function GetCached(&amp;amp;srch, &amp;amp;arrIndex, &amp;amp;arrVal) Returns any&lt;br /&gt;   &lt;br /&gt;   &amp;amp;i = BinarySearch(&amp;amp;arrIndex, &amp;amp;srch, 1, &amp;amp;arrIndex.len);&lt;br /&gt;   If &amp;amp;i = - 1 Then&lt;br /&gt;      Return 0; /* not found */&lt;br /&gt;   Else&lt;br /&gt;      Return &amp;amp;arrVal [&amp;amp;i];&lt;br /&gt;   End-If;&lt;br /&gt;   &lt;br /&gt;End-Function;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;To use them try the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;/* Lookup array arrays: */&lt;br /&gt;Component array of string &amp;amp;arrPinNumIndex;&lt;br /&gt;Component array of number &amp;amp;arrPinNumVal;&lt;br /&gt;&lt;br /&gt;&amp;amp;x = GetCached(&amp;quot;BASE PAY&amp;quot;, &amp;amp;arrPinNumIndex, &amp;amp;arrPinNumVal);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4824566864013856750?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4824566864013856750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4824566864013856750' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4824566864013856750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4824566864013856750'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/07/component-arrays-caching.html' title='Component Arrays - Caching'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6901200532643975446</id><published>2010-06-29T10:35:00.001+10:00</published><updated>2010-06-29T17:21:03.516+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='commitments encumbrances App Engine'/><title type='text'>Commitments / Encumbrances</title><content type='html'>After building this twice now, both while specs were being written (sigh) I suggest the following approach.&lt;br /&gt;&lt;br /&gt;Multiple App Engines. &lt;br /&gt;&lt;br /&gt;Main: Contains main outer loop(s)&lt;br /&gt;Grouping Code: Contains calls to Element AEs&lt;br /&gt;Element: Contains Section for each Element calculation.&lt;br /&gt;Functions: Sections for populating component arrays and the like&lt;br /&gt;Population: AE that deals only with splitting, account code mapping and population of temp tables.&lt;br /&gt;&lt;br /&gt;... something lik ethat. Would make things more legible, pluggable.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The need for an environment that has accurate pay run data to compare against cannot be stressed enough, preferably dev.&lt;/b&gt; The lag between code changes and migrations and runs in downstream envs that have comparable data can be days, very slow and confusing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6901200532643975446?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6901200532643975446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6901200532643975446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6901200532643975446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6901200532643975446'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/06/commitments-encumbrances.html' title='Commitments / Encumbrances'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-60427578093511369</id><published>2010-06-23T12:21:00.000+10:00</published><updated>2010-06-23T12:21:49.727+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App Engine Performance'/><title type='text'>Application Engine Performance</title><content type='html'>1. Reduce writing to log or trace files. I've seen this add 100%+ to processing times. Really.&lt;br /&gt;&lt;br /&gt;2. Reduce calls to DB. If possible use Commponent arrays instead of calling the db 1,000,000 times. Searching throug hsmall arrays i far quicker, usually because of the network, not the DB.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-60427578093511369?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/60427578093511369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=60427578093511369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/60427578093511369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/60427578093511369'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/06/application-engine-performance.html' title='Application Engine Performance'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-2308475392839517361</id><published>2010-06-16T15:28:00.002+10:00</published><updated>2010-06-16T15:30:16.859+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='progress process indicator'/><title type='text'>Progress Bar for Processes</title><content type='html'>1. Create an HTML area on a page where you are going to query the progress of a Process.&lt;br /&gt;&lt;br /&gt;2. You need to setup a "progress" table for your process. You will need to update the values from within the process while it is running.&lt;br /&gt;&lt;br /&gt;e.g. fields EMPLOYEES_TOTAL | EMPLOYEES_PROCESSED etc. &lt;br /&gt;&lt;br /&gt;You will probably have to run a precursory SQL to count how many rows are expected to be processed up front, and then update the progress as each row or set of rows is processed.&lt;br /&gt;&lt;br /&gt;3. Here is some sample code to update the HTML area with details of how the process is progressing. CC_DERIVED_UOA.DESCRLONG is the HTML Area on the page.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Function UpdateProgressBar(&amp;amp;title, &amp;amp;complete, &amp;amp;total) Returns string&lt;br /&gt;   &lt;br /&gt;   Local string &amp;amp;str = &amp;quot;&amp;quot;;&lt;br /&gt;   &amp;amp;str = &amp;amp;str &amp;#124; &amp;quot;   &amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;&amp;quot;font-size:small&amp;quot;&amp;quot;&amp;gt;&amp;quot; &amp;#124; &amp;amp;title &amp;#124; &amp;quot;:&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;   &lt;br /&gt;   /* Calc pct complete. */&lt;br /&gt;   If &amp;amp;total &amp;gt; 0 Then&lt;br /&gt;      &amp;amp;pct = (&amp;amp;complete / &amp;amp;total) * 10;&lt;br /&gt;   Else&lt;br /&gt;      &amp;amp;pct = 10;&lt;br /&gt;   End-If;&lt;br /&gt;   &lt;br /&gt;   /* Update bars. */&lt;br /&gt;   For &amp;amp;i = 1 To 10&lt;br /&gt;      If &amp;amp;pct &amp;gt;= &amp;amp;i Then&lt;br /&gt;         If &amp;amp;total = 0 Then&lt;br /&gt;            &amp;amp;str = &amp;amp;str &amp;#124; &amp;quot;      &amp;lt;td BGCOLOR=&amp;quot;&amp;quot;#CCCCCC&amp;quot;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;quot;; /* grey */&lt;br /&gt;         Else&lt;br /&gt;            &amp;amp;str = &amp;amp;str &amp;#124; &amp;quot;      &amp;lt;td BGCOLOR=&amp;quot;&amp;quot;#AAFFAA&amp;quot;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;quot;; /* green */&lt;br /&gt;         End-If;&lt;br /&gt;      Else&lt;br /&gt;         &amp;amp;str = &amp;amp;str &amp;#124; &amp;quot;      &amp;lt;td BGCOLOR=&amp;quot;&amp;quot;#FFAAD4&amp;quot;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;quot;; /* red */&lt;br /&gt;      End-If;&lt;br /&gt;   End-For;&lt;br /&gt;   &lt;br /&gt;   &amp;amp;str = &amp;amp;str &amp;#124; &amp;quot;      &amp;lt;td style=&amp;quot;&amp;quot;font-size:x-small&amp;quot;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot; &amp;#124; &amp;amp;complete &amp;#124; &amp;quot; / &amp;quot; &amp;#124; &amp;amp;total &amp;#124; &amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;   &amp;amp;str = &amp;amp;str &amp;#124; &amp;quot;   &amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;   &lt;br /&gt;   Return &amp;amp;str;&lt;br /&gt;   &lt;br /&gt;End-Function;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Local Rowset &amp;amp;rsCC_PROGRESS_UOA = CreateRowset(Record.CC_PROGRESS_UOA);&lt;br /&gt;&amp;amp;rsCC_PROGRESS_UOA.Fill(); /* only ever one row */&lt;br /&gt;Local Record &amp;amp;recCC_PROGRESS_UOA = &amp;amp;rsCC_PROGRESS_UOA(1).GetRecord(Record.CC_PROGRESS_UOA);&lt;br /&gt;&lt;br /&gt;&amp;amp;strl_progbar = &amp;amp;strl_progbar &amp;#124; &amp;quot;&amp;lt;table&amp;gt;&amp;quot;;&lt;br /&gt;&amp;amp;strl_progbar = &amp;amp;strl_progbar &amp;#124; UpdateProgressBar(&amp;quot;Employees&amp;quot;, &amp;amp;recCC_PROGRESS_UOA.CC_FULLTM_COMPLETE.Value, &amp;amp;recCC_PROGRESS_UOA.CC_FULLTM_TOTAL.Value);&lt;br /&gt;&amp;amp;strl_progbar = &amp;amp;strl_progbar &amp;#124; UpdateProgressBar(&amp;quot;Casuals&amp;quot;, &amp;amp;recCC_PROGRESS_UOA.CC_CASUAL_COMPLETE.Value, &amp;amp;recCC_PROGRESS_UOA.CC_CASUAL_TOTAL.Value);&lt;br /&gt;&amp;amp;strl_progbar = &amp;amp;strl_progbar &amp;#124; UpdateProgressBar(&amp;quot;Scholarships&amp;quot;, &amp;amp;recCC_PROGRESS_UOA.CC_SCHOL_COMPLETE.Value, &amp;amp;recCC_PROGRESS_UOA.CC_SCHOL_TOTAL.Value);&lt;br /&gt;&amp;amp;strl_progbar = &amp;amp;strl_progbar &amp;#124; &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;&lt;br /&gt;CC_DERIVED_UOA.DESCRLONG.Value = &amp;amp;strl_progbar;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-2308475392839517361?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/2308475392839517361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=2308475392839517361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2308475392839517361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2308475392839517361'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/06/progress-bar-for-processes.html' title='Progress Bar for Processes'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-444656331794922184</id><published>2010-06-15T14:09:00.000+10:00</published><updated>2010-06-15T14:09:20.050+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HR Retro SQL'/><title type='text'>Filter Retro Payments</title><content type='html'>&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;SELECT&lt;br /&gt; (select pin_nm from ps_gp_pin where pin_num = a.pin_num) AS PIN_NM&lt;br /&gt;, A.EMPLID&lt;br /&gt;, A.EMPL_RCD&lt;br /&gt;, A.PIN_NUM&lt;br /&gt;, Sum(A.CALC_RSLT_VAL)&lt;br /&gt;, A.RATE_RSLT_VAL&lt;br /&gt;, Sum(A.UNIT_RSLT_VAL)&lt;br /&gt;, Sum(A.PCT_RSLT_VAL)&lt;br /&gt;&lt;br /&gt;FROM &lt;br /&gt;  PS_GP_RSLT_ERN_DED A&lt;br /&gt;, PS_GP_PYE_PRC_STAT C&lt;br /&gt;&lt;br /&gt;WHERE A.PIN_NUM = 13265 --#PinNum&lt;br /&gt;AND A.EMPLID = '1000269' --$Emplid&lt;br /&gt;AND A.EMPL_RCD = 0 --#Empl_Rcd&lt;br /&gt;AND A.CAL_RUN_ID = '2010F12' --$Calendar_ID&lt;br /&gt;&lt;br /&gt;AND C.EMPLID = A.EMPLID&lt;br /&gt;AND C.CAL_RUN_ID = A.CAL_RUN_ID&lt;br /&gt;AND C.EMPL_RCD = A.EMPL_RCD&lt;br /&gt;AND C.GP_PAYGROUP = A.GP_PAYGROUP&lt;br /&gt;AND C.CAL_ID = A.CAL_ID&lt;br /&gt;AND C.ORIG_CAL_RUN_ID = A.ORIG_CAL_RUN_ID&lt;br /&gt;AND C.PRD_TYPE = 'C'&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-444656331794922184?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/444656331794922184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=444656331794922184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/444656331794922184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/444656331794922184'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/06/filter-retro-payments.html' title='Filter Retro Payments'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8394604434698264740</id><published>2010-05-14T14:36:00.000+10:00</published><updated>2010-05-14T14:36:48.664+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oracle sql flashback'/><title type='text'>As Of Date in Oracle SQL - Back to the Future</title><content type='html'>This works:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;select *&lt;br /&gt;from&lt;br /&gt;   (select * from ps_job where emplid = '123')&lt;br /&gt;AS OF TIMESTAMP SYSDATE - 1;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8394604434698264740?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8394604434698264740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8394604434698264740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8394604434698264740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8394604434698264740'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/05/as-of-date-in-oracle-sql-back-to-future.html' title='As Of Date in Oracle SQL - Back to the Future'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3183009095598510690</id><published>2010-05-14T09:53:00.001+10:00</published><updated>2010-06-04T15:34:42.325+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='search peoplecode'/><title type='text'>Binary Search</title><content type='html'>Example of:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Function BinarySearch(&amp;amp;arr, &amp;amp;srchVal, &amp;amp;low As integer, &amp;amp;high As integer) Returns integer&lt;br /&gt;  &lt;br /&gt;   If (&amp;amp;high &amp;lt; &amp;amp;low) Then&lt;br /&gt;      Return - 1; /* not found */&lt;br /&gt;   End-If;&lt;br /&gt;  &lt;br /&gt;   &amp;amp;mid = &amp;amp;low + ((&amp;amp;high - &amp;amp;low) / 2);&lt;br /&gt;   If &amp;amp;arr [&amp;amp;mid] &amp;gt; &amp;amp;srchVal Then&lt;br /&gt;      Return BinarySearch(&amp;amp;arr, &amp;amp;srchVal, &amp;amp;low, &amp;amp;mid - 1);&lt;br /&gt;   Else&lt;br /&gt;      If &amp;amp;arr [&amp;amp;mid] &amp;lt; &amp;amp;srchVal Then&lt;br /&gt;         Return BinarySearch(&amp;amp;arr, &amp;amp;srchVal, &amp;amp;mid + 1, &amp;amp;high);&lt;br /&gt;      Else&lt;br /&gt;         Return &amp;amp;mid; /* found */&lt;br /&gt;      End-If;&lt;br /&gt;   End-If;&lt;br /&gt;  &lt;br /&gt;End-Function;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3183009095598510690?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3183009095598510690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3183009095598510690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3183009095598510690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3183009095598510690'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/05/binary-search.html' title='Binary Search'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5316974715412111982</id><published>2010-05-06T16:53:00.004+10:00</published><updated>2010-05-06T21:11:35.886+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql default schedule'/><title type='text'></title><content type='html'>I don't often post random snippets of SQL, but I thought this was a good one. Rare enough to be able to forget it easily, and perhaps will be required again.&lt;br /&gt;&lt;br /&gt;This returns schedules based on the schedule id(s) that is/are current for a given employee during a given payment period. If there is no schedule id default to 'UOA01'.&lt;br /&gt;&lt;br /&gt;The first part was tricky as sch_assign is an effective dated table, and has no &lt;i&gt;required&lt;/i&gt; end date, but each row does end when the next effective date comes into effect. I solved that using a subselect to derive the end_dt. Easy enough.&lt;br /&gt;&lt;br /&gt;The next part, defaulting in 'UOA01' was a little trickier. A union to always bring in UOA01, but then a not exists subselect to only bring in where part A of the union returned nothing.&lt;br /&gt;&lt;br /&gt;Perhaps easy when you see the solution first, this one took me quite a few attempts, and half the afternoon. Saved for prosperity and that time in the future when I ask myself "I remember doing similar...".&lt;br /&gt;&lt;br /&gt;Apart from doing some tricky things with dates this SQL always returns a value. There is a default value in the SQL.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;select&lt;br /&gt;  %DateOut(dur)&lt;br /&gt;, b.sched_hrs&lt;br /&gt;from&lt;br /&gt;    (select&lt;br /&gt;      a.schedule_id&lt;br /&gt;    , a.effdt as bgn_dt&lt;br /&gt;    ,&lt;br /&gt;        (select min(x.effdt) - 1&lt;br /&gt;        from ps_sch_assign x&lt;br /&gt;        where x.emplid = a.emplid&lt;br /&gt;        and x.empl_rcd = a.empl_rcd&lt;br /&gt;        and x.effdt &amp;lt; a.effdt) as end_dt&lt;br /&gt;    from %Table(sch_assign) a&lt;br /&gt;    where a.emplid = %Bind(cc_a20_uoa_aet.emplid)&lt;br /&gt;    and a.empl_rcd = %Bind(cc_a20_uoa_aet.empl_rcd)&lt;br /&gt;    and a.schedule_id &amp;lt;&amp;gt; ' '&lt;br /&gt;    and a.effdt &amp;lt; %Bind(cc_a20_uoa_aet.prd_end_dt)&lt;br /&gt;    union&lt;br /&gt;    select &lt;br /&gt;      'UOA01'&lt;br /&gt;    , to_date('01/01/2000', 'dd/mm/yyyy') as bgn_dt&lt;br /&gt;    , to_date('31/12/9999', 'dd/mm/yyyy') as end_dt&lt;br /&gt;    from dual&lt;br /&gt;    where not exists&lt;br /&gt;        (select 1&lt;br /&gt;        from %Table(sch_assign) a&lt;br /&gt;        where a.emplid = %Bind(cc_a20_uoa_aet.emplid)&lt;br /&gt;        and a.empl_rcd = %Bind(cc_a20_uoa_aet.empl_rcd)&lt;br /&gt;        and a.schedule_id &amp;lt;&amp;gt; ' '&lt;br /&gt;        and a.effdt &amp;lt; %Bind(cc_a20_uoa_aet.prd_end_dt))) a&lt;br /&gt;, %Table(sch_clnd_vw) b&lt;br /&gt;where b.schedule_id = a.schedule_id&lt;br /&gt;and b.dur between %Bind(cc_a20_uoa_aet.prd_bgn_dt) and %Bind(cc_a20_uoa_aet.prd_end_dt)&lt;br /&gt;and (b.dur &amp;lt;= a.end_dt or a.end_dt is null)&lt;br /&gt;and b.sched_hrs &amp;gt; 0&lt;br /&gt;order by dur&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-5316974715412111982?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5316974715412111982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5316974715412111982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5316974715412111982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5316974715412111982'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/05/i-dont-often-post-random-snipets-of-sql.html' title=''/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8884367675601826898</id><published>2010-03-30T16:09:00.005+10:00</published><updated>2010-04-14T15:03:50.226+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QC SQL'/><title type='text'>HP Quality Center (QC)</title><content type='html'>In case I'm ever asked to export from QC again.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;/*&lt;br /&gt;Built for Jira 26921&lt;br /&gt;Michael Nitschke 30/03/2010&lt;br /&gt;&lt;br /&gt;Examples:&lt;br /&gt;define testPlanRoot = 'SA Master'&lt;br /&gt;define testLabRoot = 'System Testing\SYS1 SA'&lt;br /&gt;&lt;br /&gt;define testPlanRoot = 'MTP Testing'&lt;br /&gt;define testLabRoot = 'MTP Testing\MTP 13'&lt;br /&gt;&lt;br /&gt;Hint: you can optionally add a trailing back-slash on the testLabRoot variable if you&lt;br /&gt;need to clearly define it as seperate from and similarly named folder,&lt;br /&gt;e.g. 'SYSTEM' and 'SYSTEM1'.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;/* notes:&lt;br /&gt;Test Lab runs do not neccessarily line up in the same folders in Test Lab as the folders that are in Test Plan ...if that makes sense.&lt;br /&gt;Joined by TEST_ID but the Test Lab folder Name can be changed, so the lab results for a given test plan may be in a test lab folder that has a different name to the plan.&lt;br /&gt;hard to explain.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;define testPlanRoot = 'SA Master'&lt;br /&gt;define testLabRoot = 'System Testing\System Test Phase 1 - SA\'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;select * from (&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;  substr(path, 2, instr(path,'\',1,2) - 2) as lev1&lt;br /&gt;, substr(path, instr(path,'\',1,2) + 1, instr(path,'\',1,3) - instr(path,'\',1,2) - 1) as lev2&lt;br /&gt;, substr(path, instr(path,'\',1,3) + 1, instr(path,'\',1,4) - instr(path,'\',1,3) - 1) as lev3&lt;br /&gt;, substr(path, instr(path,'\',1,4) + 1, instr(path,'\',1,5) - instr(path,'\',1,4) - 1) as lev4&lt;br /&gt;, substr(path, instr(path,'\',1,5) + 1, instr(path,'\',1,6) - instr(path,'\',1,5) - 1) as lev5&lt;br /&gt;, substr(path, instr(path,'\',1,6) + 1, instr(path,'\',1,7) - instr(path,'\',1,6) - 1) as lev6&lt;br /&gt;, nvl(users.full_name, 'anon.') || ' (' || test.ts_responsible || ')' as sweet_fa&lt;br /&gt;, test.ts_name as test_script_name&lt;br /&gt;, test.ts_status&lt;br /&gt;, run.rn_status&lt;br /&gt;&lt;br /&gt;from (&lt;br /&gt; select&lt;br /&gt; al_father_id, al_item_id, sys_connect_by_path(al_description, '\') || '\' as path&lt;br /&gt; FROM (SELECT * from all_lists where al_father_id &lt;&gt; 2329) -- 2329 is a 'bad', invisible folder. Yes really.&lt;br /&gt; connect by prior al_item_id = al_father_id&lt;br /&gt;) path&lt;br /&gt;, test&lt;br /&gt;, users&lt;br /&gt;,&lt;br /&gt; (select run.rn_test_id, run.rn_status&lt;br /&gt; from run&lt;br /&gt; where exists&lt;br /&gt;  (select 1&lt;br /&gt;  from cycle&lt;br /&gt;  where cycle.cy_cycle_id = run.rn_cycle_id&lt;br /&gt;  and cycle.cy_folder_id in&lt;br /&gt;   (select cf_item_id from&lt;br /&gt;    (select cf_item_id, sys_connect_by_path(cf_item_name, '\') as path&lt;br /&gt;    from cycl_fold a&lt;br /&gt;    connect by prior cf_item_id = cf_father_id)&lt;br /&gt;   where path like '\' || &amp;testLabRoot || '%'))&lt;br /&gt; and run.rn_execution_date =&lt;br /&gt;  (select max(r.rn_execution_date)&lt;br /&gt;  from run r&lt;br /&gt;  where r.rn_test_id = run.rn_test_id)&lt;br /&gt; and run.rn_execution_time =&lt;br /&gt;  (select max(rn_execution_time)&lt;br /&gt;  from run r&lt;br /&gt;  where r.rn_test_id = run.rn_test_id&lt;br /&gt;  and r.rn_execution_date = run.rn_execution_date)) run&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;where path.path like '\' || &amp;testPlanRoot || '%'&lt;br /&gt;&lt;br /&gt;and test.ts_subject (+) = path.al_item_id&lt;br /&gt;and users.user_name (+) = test.ts_responsible&lt;br /&gt;&lt;br /&gt;and run.rn_test_id (+) = test.ts_test_id&lt;br /&gt;&lt;br /&gt;)&lt;br /&gt;where lev1 = &amp;testPlanRoot -- Removes data where same folder name exists on another branch.&lt;br /&gt;and not lev2 is null -- Don't need base folder only in data (blanks).&lt;br /&gt;and not lev3 is null&lt;br /&gt;order by 1, 2, 3, 4, 5, 6, 8&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8884367675601826898?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8884367675601826898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8884367675601826898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8884367675601826898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8884367675601826898'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/03/hp-quality-center-qc.html' title='HP Quality Center (QC)'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3892621169229701001</id><published>2010-03-17T14:52:00.005+10:00</published><updated>2010-03-30T17:26:06.839+10:00</updated><title type='text'>%DateIn or %DateOut</title><content type='html'>Sometimes you need both:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;%Select(CC_DAY_UOA_AET.DATE_DAY, CC_DAY_UOA_AET.SCHED_HRS)&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;%DateOut(%DateIn(%Bind(CC_PYDT_UOA_AET.PYMT_DT)) + daynum)&lt;br /&gt;, sched_hrs&lt;br /&gt;FROM ps_sch_defn_dtl a&lt;br /&gt;... &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3892621169229701001?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3892621169229701001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3892621169229701001' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3892621169229701001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3892621169229701001'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/03/datein-or-dateout.html' title='%DateIn or %DateOut'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3617700664970903604</id><published>2010-02-19T13:11:00.008+10:00</published><updated>2010-05-17T15:48:50.297+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL QC UAT'/><title type='text'>Extract Data from Quality Center (QC) 9.2 - SQL</title><content type='html'>Quality Center is a testing suite used at a few installations. It comes with a collection of reports, including its own report generator.&lt;br /&gt;&lt;br /&gt;Nonetheless it is nice to be able to get the RAW data and do with it what you will.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;-- Extract ALL Test Plan Data:&lt;br /&gt;SELECT&lt;br /&gt;Replace(A.PATH, ' \\Subject\System Tests\SA System Test\', '') AS PATH&lt;br /&gt;, B.TS_NAME&lt;br /&gt;, C.DS_STEP_NAME&lt;br /&gt;, REPLACE(REPLACE(REPLACE(REGEXP_REPLACE(REPLACE(C.DS_DESCRIPTION, '&lt;br /&gt;', Chr(13)), '&amp;lt;(.&amp;#124;\n)+?&amp;gt;', ''), '&amp;lt;', '&amp;lt;'), '&amp;gt;', '&amp;gt;'), '&amp;quot;', Chr(34)) AS DS_DESCRIPTION&lt;br /&gt;, REPLACE(REPLACE(REPLACE(REGEXP_REPLACE(REPLACE(C.DS_EXPECTED, '&lt;br /&gt;', Chr(13)), '&amp;lt;(.&amp;#124;\n)+?&amp;gt;', ''), '&amp;lt;', '&amp;lt;'), '&amp;gt;', '&amp;gt;'), '&amp;quot;', Chr(34)) AS DS_EXPECTED&lt;br /&gt;FROM&lt;br /&gt;(SELECT AL_ITEM_ID, LPAD(' ', 2 * LEVEL-1) &amp;#124;&amp;#124; SYS_CONNECT_BY_PATH(AL_DESCRIPTION, '\') AS PATH&lt;br /&gt;FROM ALL_LISTS&lt;br /&gt;CONNECT BY PRIOR AL_ITEM_ID = AL_FATHER_ID) A&lt;br /&gt;, TEST B&lt;br /&gt;, DESSTEPS C&lt;br /&gt;WHERE A.PATH LIKE '%\\Subject\System Tests\SA System Test\GRADUATIONS%'&lt;br /&gt;AND B.TS_SUBJECT = A.AL_ITEM_ID&lt;br /&gt;AND C.DS_TEST_ID = B.TS_TEST_ID&lt;br /&gt;ORDER BY A.PATH, B.TS_NAME, C.DS_STEP_ORDER&lt;br /&gt;;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note I've done some stripping of HTML tags using a combination of Replace() and a regular expression.&lt;br /&gt;&lt;br /&gt;We dumped a larger set of the above results into a spreadsheet, connected to it through Access and wrote out all our UAT scripts as a report.&lt;br /&gt;&lt;br /&gt;You can also join to the Test Lab to get the Test Results out. Note that it is joined by TEST_ID so the Lab folders may not line up with the Plan folders, you can change folder names etc.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;/*&lt;br /&gt;Built for Jira 26921&lt;br /&gt;Michael Nitschke 30/03/2010&lt;br /&gt;&lt;br /&gt;Examples:&lt;br /&gt;define testPlanRoot = 'SA Master'&lt;br /&gt;define testLabRoot = 'System Testing\SYS1 SA'&lt;br /&gt;&lt;br /&gt;define testPlanRoot = 'MTP Testing'&lt;br /&gt;define testLabRoot = 'MTP Testing\MTP 13'&lt;br /&gt;&lt;br /&gt;Hint: you can optionally add a trailing back-slash on the testLabRoot variable if you&lt;br /&gt;need to clearly define it as seperate from and similarly named folder,&lt;br /&gt;e.g. 'SYSTEM' and 'SYSTEM1'.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;/* notes:&lt;br /&gt;Test Lab runs do not neccessarily line up in the same folders in Test Lab as the folders that are in Test Plan ...if that makes sense.&lt;br /&gt;Joined by TEST_ID but the Test Lab folder Name can be changed, so the lab results for a given test plan may be in a test lab folder that has a different name to the plan.&lt;br /&gt;hard to explain.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;select * from (&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;  substr(path, 2, instr(path,'\',1,2) - 2) as lev1&lt;br /&gt;, substr(path, instr(path,'\',1,2) + 1, instr(path,'\',1,3) - instr(path,'\',1,2) - 1) as lev2&lt;br /&gt;, substr(path, instr(path,'\',1,3) + 1, instr(path,'\',1,4) - instr(path,'\',1,3) - 1) as lev3&lt;br /&gt;, substr(path, instr(path,'\',1,4) + 1, instr(path,'\',1,5) - instr(path,'\',1,4) - 1) as lev4&lt;br /&gt;, substr(path, instr(path,'\',1,5) + 1, instr(path,'\',1,6) - instr(path,'\',1,5) - 1) as lev5&lt;br /&gt;, substr(path, instr(path,'\',1,6) + 1, instr(path,'\',1,7) - instr(path,'\',1,6) - 1) as lev6&lt;br /&gt;, nvl(users.full_name, 'anon.') || ' (' || test.ts_responsible || ')' as sweet_fa&lt;br /&gt;, test.ts_name as test_script_name&lt;br /&gt;, test.ts_status&lt;br /&gt;, run.rn_status&lt;br /&gt;&lt;br /&gt;, test.ts_user_06 as Business_Owner&lt;br /&gt;, test.ts_user_07 as Technical_Owner&lt;br /&gt;, test.ts_user_04 as HR_Func_Area&lt;br /&gt;, test.ts_user_05 as Tester&lt;br /&gt;, test.ts_user_09 as Date_Time&lt;br /&gt;, test.ts_user_08 as Location&lt;br /&gt;, test.ts_user_02 as CBS_Test_Effort&lt;br /&gt;, test.ts_user_01 as Summary&lt;br /&gt;, test.ts_user_03 as CR_ID&lt;br /&gt;&lt;br /&gt;from (&lt;br /&gt; select&lt;br /&gt; al_father_id, al_item_id, sys_connect_by_path(al_description, '\') || '\' as path&lt;br /&gt; FROM (SELECT * from all_lists where al_father_id &lt;&gt; 2329) -- 2329 is a 'bad', invisible folder. Yes really.&lt;br /&gt; connect by prior al_item_id = al_father_id&lt;br /&gt;) path&lt;br /&gt;, test&lt;br /&gt;, users&lt;br /&gt;,&lt;br /&gt; (select run.rn_test_id, run.rn_status&lt;br /&gt; from run&lt;br /&gt; where exists&lt;br /&gt;  (select 1&lt;br /&gt;  from cycle&lt;br /&gt;  where cycle.cy_cycle_id = run.rn_cycle_id&lt;br /&gt;  and cycle.cy_folder_id in&lt;br /&gt;   (select cf_item_id from&lt;br /&gt;    (select cf_item_id, sys_connect_by_path(cf_item_name, '\') as path&lt;br /&gt;    from cycl_fold a&lt;br /&gt;    connect by prior cf_item_id = cf_father_id)&lt;br /&gt;   where path like '\' || &amp;testLabRoot || '%'))&lt;br /&gt; and run.rn_execution_date =&lt;br /&gt;  (select max(r.rn_execution_date)&lt;br /&gt;  from run r&lt;br /&gt;  where r.rn_test_id = run.rn_test_id)&lt;br /&gt; and run.rn_execution_time =&lt;br /&gt;  (select max(rn_execution_time)&lt;br /&gt;  from run r&lt;br /&gt;  where r.rn_test_id = run.rn_test_id&lt;br /&gt;  and r.rn_execution_date = run.rn_execution_date)) run&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;where path.path like '\' || &amp;testPlanRoot || '%'&lt;br /&gt;&lt;br /&gt;and test.ts_subject (+) = path.al_item_id&lt;br /&gt;and users.user_name (+) = test.ts_responsible&lt;br /&gt;&lt;br /&gt;and run.rn_test_id (+) = test.ts_test_id&lt;br /&gt;&lt;br /&gt;)&lt;br /&gt;where lev1 = &amp;testPlanRoot -- Removes data where same folder name exists on another branch.&lt;br /&gt;and not lev2 is null -- Don't need base folder only in data (blanks).&lt;br /&gt;and not lev3 is null&lt;br /&gt;order by 1, 2, 3, 4, 5, 6, 8&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3617700664970903604?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3617700664970903604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3617700664970903604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3617700664970903604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3617700664970903604'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/02/extract-data-from-quality-center-qc-92.html' title='Extract Data from Quality Center (QC) 9.2 - SQL'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-7994629861671139056</id><published>2010-02-18T16:23:00.003+10:00</published><updated>2010-02-19T10:26:27.659+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Tree Heirarchy Recursive'/><title type='text'>SQL - Recursive Heirarchy Trees</title><content type='html'>&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;Assuming a table something like this:&lt;br /&gt;&lt;blockquote&gt;PERSON_ID&lt;br /&gt;PARENT_ID&lt;br /&gt;NAME&lt;/blockquote&gt;Start with this.&lt;br /&gt;&lt;blockquote&gt;SELECT&lt;br /&gt;LPAD(' ', 2*level-1) || SYS_CONNECT_BY_PATH(NAME, '\') "Path"&lt;br /&gt;  FROM TABLE_NAME&lt;br /&gt;  CONNECT BY PRIOR PERSON_ID = PARENT_ID;&lt;/blockquote&gt;Google "Connect By" for more information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-7994629861671139056?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/7994629861671139056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=7994629861671139056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7994629861671139056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7994629861671139056'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/02/sql-recursive-heirarchy-trees.html' title='SQL - Recursive Heirarchy Trees'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5871276856903480784</id><published>2010-01-29T11:23:00.005+10:00</published><updated>2010-01-29T11:30:49.675+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Component CI Error'/><title type='text'>Page data is inconsistent with database (18,1)</title><content type='html'>&lt;span style="font-size:130%;"&gt;"Page data is inconsistent with database (18,1)"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I recently came across this during a call to a Component Interface, CI.HCR_PERSONAL_DATA_SRV, that interfaced with a rather large Component, Component.PERSONAL_DATA.&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;(Interestingly when I tested the CI stand-alone it worked fine, never figured out why/no time.&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;I created a Project that contained *all the objects for Component.PERSONAL_DATA. This can take some time if each page has sub-pages, and in turn they too have sub-pages. Be sure to include each record for each page, and each record's associated PeopleCode.&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://capital-it.blogspot.com/2010/01/inserting-peoplecode-into-project-via.html"&gt;See this post about how to do a lot of this via a SQL script or similar&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I first checked that all the tables and views for the component had been built correctly after &lt;span style="font-weight: bold;"&gt;a recent patch&lt;/span&gt;. They were fine.&lt;br /&gt;&lt;br /&gt;Next I checked PeopleCode, namely &lt;span style="font-weight: bold;"&gt;SavePreChange &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;SavePostChange &lt;/span&gt;as these are the events most likely to cause the given error. Recall that this error happens &lt;span style="font-style: italic;"&gt;when data in the &lt;span style="font-weight: bold;"&gt;buffer &lt;/span&gt;pre save and data in the &lt;span style="font-weight: bold;"&gt;database &lt;/span&gt;post save do not match&lt;/span&gt;. I simply went through each piece of code and remarked out likely looking code or entire sections...&lt;br /&gt;&lt;br /&gt;...until the error stopped occuring. This pointed me to some custom code on SavePost that was updating a row via SQLExec on table x, new delivered code from the patch was updating table x in the buffer in SavePre. Thus the error. All-in-all took me a lot longer than it took to write this post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-5871276856903480784?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5871276856903480784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5871276856903480784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5871276856903480784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5871276856903480784'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/01/page-data-is-inconsistent-with-database.html' title='Page data is inconsistent with database (18,1)'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1342134629033071461</id><published>2010-01-26T15:41:00.002+10:00</published><updated>2010-01-26T15:49:36.388+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql script PeopleCode Project'/><title type='text'>Inserting PeopleCode into Project via Script</title><content type='html'>Sometimes you want to do big compares between environments, and you've got a rather large component, say Component.PERSONAL_DATA, and you've gone through and manually inserted all the pages, subpages, subpages-subpages and so on, including all the Records.&lt;br /&gt;&lt;br /&gt;But doing this hasn't automatically inserted all the Record PeopleCode! Yuck, you have to go through each record... and ... no!!!&lt;br /&gt;&lt;br /&gt;Now I've written this I can see it wouldn't be much of a leap to expand on this script to be able to just pass in a Component name. I'll leave that to you.&lt;br /&gt;&lt;br /&gt;This script will insert all Record PeopleCode for all the Records in a given Project. Note you may have to clear you PeopleTools cache after you've run the script to see it in the given Project.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;INSERT INTO PSPROJECTITEM&lt;br /&gt;(SELECT DISTINCT&lt;br /&gt;'PROJECT_NAME', 8&lt;br /&gt;, OBJECTID1, OBJECTVALUE1, OBJECTID2, OBJECTVALUE2, OBJECTID3, OBJECTVALUE3, OBJECTID4, OBJECTVALUE4&lt;br /&gt;, 0, 0, 0, 0, 1, 0&lt;br /&gt;FROM PSPCMPROG&lt;br /&gt;WHERE OBJECTVALUE1 IN&lt;br /&gt;(SELECT OBJECTVALUE1&lt;br /&gt;FROM PSPROJECTITEM&lt;br /&gt;WHERE PROJECTNAME = 'PROJECT_NAME'&lt;br /&gt;AND OBJECTTYPE=0));&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1342134629033071461?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1342134629033071461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1342134629033071461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1342134629033071461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1342134629033071461'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/01/inserting-peoplecode-into-project-via.html' title='Inserting PeopleCode into Project via Script'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3177097047228723854</id><published>2010-01-16T16:39:00.005+10:00</published><updated>2010-01-18T20:52:59.136+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='9.1 8.50'/><title type='text'>PeopleSoft 9.1 and PeopleTools 8.50</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_85PwLFr_MR4/S1Fi7TYgk8I/AAAAAAAABcU/Mc_7pe8Tq3w/s1600-h/ptools850.gif"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 178px;" src="http://1.bp.blogspot.com/_85PwLFr_MR4/S1Fi7TYgk8I/AAAAAAAABcU/Mc_7pe8Tq3w/s200/ptools850.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5427227796913034178" /&gt;&lt;/a&gt;What's new? Quite a lot. The first ten minutes is a summary of how well Oracle/PeopleSoft is doing. Skip this for a demonstration of the new technology, namely DHTML and AJAX. It is really nice to finally see some examples in an ERP. Doesn't appear to be much in the way of PeopleCode though, not like the jump to 8 for example.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://oracle.com.edgesuite.net/ivt/4000/8104/9236/12179/lobby_external_flash_480x360/default.htm"&gt;Click here for webinar.&lt;/a&gt;&lt;br /&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3177097047228723854?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3177097047228723854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3177097047228723854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3177097047228723854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3177097047228723854'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2010/01/peoplesoft-91-and-peopletools-850.html' title='PeopleSoft 9.1 and PeopleTools 8.50'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_85PwLFr_MR4/S1Fi7TYgk8I/AAAAAAAABcU/Mc_7pe8Tq3w/s72-c/ptools850.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8250649131773665539</id><published>2009-11-04T14:05:00.007+10:00</published><updated>2010-05-07T14:51:27.473+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App Engine Text Export'/><title type='text'>Exporting or Saving App Engine as Text</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_85PwLFr_MR4/SvD-vW5f24I/AAAAAAAABXU/X_F3phhIdnk/s1600-h/ScreenHunter_01+Nov.+04+14.08.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5400096042771274626" src="http://3.bp.blogspot.com/_85PwLFr_MR4/SvD-vW5f24I/AAAAAAAABXU/X_F3phhIdnk/s200/ScreenHunter_01+Nov.+04+14.08.jpg" style="cursor: pointer; float: right; height: 162px; margin: 0pt 0pt 10px 10px; width: 200px;" /&gt;&lt;/a&gt;You can export an entire App Engine as text, which makes it easier to search through for any relevant code, for example where a table is used.&lt;br /&gt;&lt;br /&gt;1. Open the App Engine&lt;br /&gt;2. File/View Report&lt;br /&gt;3. File/Save &lt;b&gt;Report &lt;/b&gt;As...&lt;br /&gt;&lt;br /&gt;Presto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8250649131773665539?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8250649131773665539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8250649131773665539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8250649131773665539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8250649131773665539'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/11/exporting-or-saving-app-engine-as-text.html' title='Exporting or Saving App Engine as Text'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_85PwLFr_MR4/SvD-vW5f24I/AAAAAAAABXU/X_F3phhIdnk/s72-c/ScreenHunter_01+Nov.+04+14.08.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-9080361250011591708</id><published>2009-05-21T11:41:00.007+10:00</published><updated>2011-06-08T14:23:57.399+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='useedit psrecfield binary'/><title type='text'>Understanding the USEEDIT field in PSRECFIELD</title><content type='html'>USEEDIT is a binary number stored as a Decimal. I forget the term right now but each bit represents a field attribute such as List field, Required etc.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;edit: new version&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;--1 1 Key&lt;br /&gt;--2 2 Duplicate Order Key&lt;br /&gt;--3 4 System Maintained&lt;br /&gt;--4 8 Audit Field Add&lt;br /&gt;--5 16 Alternate Search Key&lt;br /&gt;--6 32 List Box Item&lt;br /&gt;--7 64 Descending Key&lt;br /&gt;--8 128 Audit Field Change&lt;br /&gt;--9 256 Required&lt;br /&gt;--10 512 Translate Table Edit&lt;br /&gt;--11 102 Audit Field Delete&lt;br /&gt;--12 2048 Search Key&lt;br /&gt;--13 4096 Reasonable Date Edit&lt;br /&gt;--14 8192 Yes/No Edit&lt;br /&gt;--15 16384 Prompt Table Edit&lt;br /&gt;--16 32768 Auto-Update&lt;br /&gt;--17 65536 Unknown&lt;br /&gt;--18 131072 Unknown&lt;br /&gt;--19 262144 From Search Field&lt;br /&gt;--20 524288 Through Search Field&lt;br /&gt;--21 1048576 1/0 Table Edit&lt;br /&gt;--22 2097152 Disable Advanced Search Options&lt;br /&gt;--23 4194304 Unknown&lt;br /&gt;--24 8388608 Unknown&lt;br /&gt;--25 16777216 Default Search Field&lt;br /&gt;--26 33554432 Unknown&lt;br /&gt;--27 67108864 Unknown&lt;br /&gt;--28 134217728 Unknown&lt;br /&gt;--29 268435456 Search Edit&lt;br /&gt;--30 536870912 Unknown&lt;br /&gt;--31 1073741824 Unknown&lt;br /&gt;&lt;br /&gt;SELECT A.FIELDNAME&lt;br /&gt;FROM PSRECFIELDDB A&lt;br /&gt;-- Oracle: WHERE bitand(A.USEEDIT, 512) &amp;gt; 0&lt;br /&gt;-- SQL Server: WHERE A.USEEDIT &amp;amp; 512 &amp;gt; 0&lt;br /&gt;-- DB2: WHERE (USEEDIT/512)/2 &amp;lt;&amp;gt; (USEEDIT/512)/2.0.&lt;br /&gt;WHERE (USEEDIT/512)/2 &amp;lt;&amp;gt; (USEEDIT/512)/2.0.&lt;br /&gt;AND A.FIELDNAME not in (SELECT FIELDNAME FROM PSXLATITEM)&lt;br /&gt;GROUP BY A.FIELDNAME&lt;br /&gt;ORDER BY A.FIELDNAME&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;edit: here is a nicer code snippet. This finds all fields marked as a XLAT field, that actually aren't : \ 512 is the key.&lt;br /&gt;SELECT A.FIELDNAME&lt;br /&gt;FROM PSRECFIELDDB A&lt;br /&gt;WHERE bitand(A.USEEDIT, 512) &amp;gt; 0&lt;br /&gt;AND A.FIELDNAME not in (SELECT FIELDNAME FROM PSXLATITEM)&lt;br /&gt;GROUP BY A.FIELDNAME&lt;br /&gt;ORDER BY A.FIELDNAME&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also handy&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SELECT A.RECNAME, A.FIELDNAME&lt;br /&gt;FROM PSRECFIELDDB A&lt;br /&gt;WHERE bitand(A.USEEDIT, 512) &amp;gt; 0&lt;br /&gt;AND A.FIELDNAME not in (SELECT FIELDNAME FROM PSXLATITEM)&lt;br /&gt;ORDER BY A.RECNAME;&lt;br /&gt;&lt;br /&gt;___&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Following is a snippet of code I have blatantly copied from a fantastic Blog I found while researching the problem. http://xtrahot.chili-mango.net/&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: &amp;quot;courier new&amp;quot;;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SELECT&lt;br /&gt;A.RECNAME,&lt;br /&gt;A.FIELDNAME,&lt;br /&gt;CASE&lt;br /&gt;WHEN B.FIELDTYPE = 0 THEN&lt;br /&gt;'CHAR'&lt;br /&gt;WHEN B.FIELDTYPE = 1 THEN&lt;br /&gt;'LONG CHAR'&lt;br /&gt;WHEN B.FIELDTYPE = 2 THEN&lt;br /&gt;'NUMBER'&lt;br /&gt;WHEN B.FIELDTYPE = 3 THEN&lt;br /&gt;'SIGNED NBR'&lt;br /&gt;WHEN B.FIELDTYPE = 4 THEN&lt;br /&gt;'DATE'&lt;br /&gt;WHEN B.FIELDTYPE = 5 THEN&lt;br /&gt;'TIME'&lt;br /&gt;WHEN B.FIELDTYPE = 6 THEN&lt;br /&gt;'DATETIME'&lt;br /&gt;WHEN B.FIELDTYPE = 7&lt;br /&gt;OR B.FIELDTYPE = 8 THEN&lt;br /&gt;'IMAGE'&lt;br /&gt;ELSE NULL&lt;br /&gt;END AS FIELDTYPE,&lt;br /&gt;CASE&lt;br /&gt;WHEN B.FIELDTYPE = 2&lt;br /&gt;OR B.FIELDTYPE = 3 THEN&lt;br /&gt;TRIM(TO_CHAR(B.LENGTH)) || '.' || TO_CHAR(B.DECIMALPOS)&lt;br /&gt;ELSE TO_CHAR(B.LENGTH)&lt;br /&gt;END AS FLDLEN,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 256) &amp;gt; 0 THEN&lt;br /&gt;'YES'&lt;br /&gt;ELSE 'NO'&lt;br /&gt;END AS REQ,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 1) &amp;gt; 0 THEN&lt;br /&gt;'KEY'&lt;br /&gt;WHEN bitand(A.USEEDIT, 2) &amp;gt; 0 THEN&lt;br /&gt;'DUP'&lt;br /&gt;WHEN bitand(A.USEEDIT, 16) &amp;gt; 0 THEN&lt;br /&gt;'ALT'&lt;br /&gt;ELSE NULL&lt;br /&gt;END AS KEY_TYPE,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 64) &amp;gt; 0 THEN&lt;br /&gt;'DESC'&lt;br /&gt;WHEN ( bitand(A.USEEDIT, 1) &amp;gt; 0&lt;br /&gt;OR bitand(A.USEEDIT, 2) &amp;gt; 0&lt;br /&gt;OR bitand(A.USEEDIT, 16) &amp;gt; 0 )&lt;br /&gt;AND bitand(A.USEEDIT, 64) = 0 THEN&lt;br /&gt;'ASC'&lt;br /&gt;ELSE NULL&lt;br /&gt;END AS DIR,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 2048) &amp;gt; 0 THEN&lt;br /&gt;'YES'&lt;br /&gt;ELSE 'NO'&lt;br /&gt;END AS SRCH,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 32) &amp;gt; 0 THEN&lt;br /&gt;'YES'&lt;br /&gt;ELSE 'NO'&lt;br /&gt;END AS LIST,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 4) &amp;gt; 0 THEN&lt;br /&gt;'YES'&lt;br /&gt;ELSE 'NO'&lt;br /&gt;END AS SYS,&lt;br /&gt;CASE&lt;br /&gt;WHEN TRIM(A.DEFRECNAME) = '' THEN&lt;br /&gt;A.DEFFIELDNAME&lt;br /&gt;ELSE&lt;br /&gt;TRIM(A.DEFRECNAME) || '.' || A.DEFFIELDNAME&lt;br /&gt;END AS DEFAULT_VALUE,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 8) &amp;gt; 0&lt;br /&gt;AND bitand(A.USEEDIT, 128) = 0&lt;br /&gt;AND bitand(A.USEEDIT, 1024) = 0 THEN&lt;br /&gt;'A'&lt;br /&gt;WHEN bitand(A.USEEDIT, 8) &amp;gt; 0&lt;br /&gt;AND bitand(A.USEEDIT, 128) &amp;gt; 0&lt;br /&gt;AND bitand(A.USEEDIT, 1024) = 0 THEN&lt;br /&gt;'AC'&lt;br /&gt;WHEN bitand(A.USEEDIT, 8) &amp;gt; 0&lt;br /&gt;AND bitand(A.USEEDIT, 128) &amp;gt; 0&lt;br /&gt;AND bitand(A.USEEDIT, 1024) &amp;gt; 0 THEN&lt;br /&gt;'ACD'&lt;br /&gt;WHEN bitand(A.USEEDIT, 8) = 0&lt;br /&gt;AND bitand(A.USEEDIT, 128) &amp;gt; 0&lt;br /&gt;AND bitand(A.USEEDIT, 1024) = 0 THEN&lt;br /&gt;'C'&lt;br /&gt;WHEN bitand(A.USEEDIT, 8) = 0&lt;br /&gt;AND bitand(A.USEEDIT, 128) &amp;gt; 0&lt;br /&gt;AND bitand(A.USEEDIT, 1024) &amp;gt; 0 THEN&lt;br /&gt;'CD'&lt;br /&gt;WHEN bitand(A.USEEDIT, 8) = 0&lt;br /&gt;AND bitand(A.USEEDIT, 128) = 0&lt;br /&gt;AND bitand(A.USEEDIT, 1024) &amp;gt; 0 THEN&lt;br /&gt;'D'&lt;br /&gt;ELSE NULL&lt;br /&gt;END AS AUDT,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 16384) &amp;gt; 0 THEN&lt;br /&gt;'PROMPT'&lt;br /&gt;WHEN bitand(A.USEEDIT, 512) &amp;gt; 0 THEN&lt;br /&gt;'XLAT'&lt;br /&gt;WHEN bitand(A.USEEDIT, 8192) &amp;gt; 0 THEN&lt;br /&gt;'Y/N'&lt;br /&gt;ELSE NULL&lt;br /&gt;END AS EDIT,&lt;br /&gt;A.EDITTABLE AS PROMPT_TABLE,&lt;br /&gt;A.SETCNTRLFLD AS SET_CONTROL_FLD,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 4096) &amp;gt; 0 THEN&lt;br /&gt;'YES'&lt;br /&gt;ELSE 'NO'&lt;br /&gt;END AS REASONABLE_DT,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 32768) &amp;gt; 0 THEN&lt;br /&gt;'YES'&lt;br /&gt;ELSE 'NO'&lt;br /&gt;END AS AUTO_UPDT,&lt;br /&gt;CASE&lt;br /&gt;WHEN bitand(A.USEEDIT, 262144) &amp;gt; 0 THEN&lt;br /&gt;'FROM'&lt;br /&gt;WHEN bitand(A.USEEDIT, 524288) &amp;gt; 0 THEN&lt;br /&gt;'THROUGH'&lt;br /&gt;ELSE NULL&lt;br /&gt;END AS SEARCH_FIELD,&lt;br /&gt;CASE&lt;br /&gt;WHEN A.SUBRECORD = 'Y' THEN&lt;br /&gt;'YES'&lt;br /&gt;ELSE 'NO'&lt;br /&gt;END AS SUBRECORD,&lt;br /&gt;A.LASTUPDDTTM,&lt;br /&gt;A.LASTUPDOPRID&lt;br /&gt;FROM PSRECFIELD A,&lt;br /&gt;PSDBFIELD B&lt;br /&gt;WHERE A.RECNAME = :1&lt;br /&gt;AND A.FIELDNAME = B.FIELDNAME&lt;br /&gt;ORDER BY FIELDNUM&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-9080361250011591708?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/9080361250011591708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=9080361250011591708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/9080361250011591708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/9080361250011591708'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/05/understanding-useedit-field-in.html' title='Understanding the USEEDIT field in PSRECFIELD'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4947496183572879301</id><published>2009-05-19T14:05:00.000+10:00</published><updated>2009-05-19T14:06:58.506+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Peoplecode Barcode bar code code128'/><title type='text'>Barcode PeopleCode for code128</title><content type='html'>/* This class provides methods to :&lt;br /&gt; * Assist in development of XML/IB Publisher documents.&lt;br /&gt; */&lt;br /&gt;class XML_Publisher&lt;br /&gt;   method XML_Publisher();&lt;br /&gt;   method getCode128BarCode(&amp;strDataToFormat As string) Returns string;&lt;br /&gt;end-class;&lt;br /&gt;&lt;br /&gt;/* Method :- Config_Data&lt;br /&gt; * Constructor&lt;br /&gt; * Arguments :- None.&lt;br /&gt; * Returns :- None.&lt;br /&gt; */&lt;br /&gt;method XML_Publisher&lt;br /&gt;end-method;&lt;br /&gt;&lt;br /&gt;/* USQSF023, Michael Nitschke 06.05.2009&lt;br /&gt; * Method :- GetFieldValues&lt;br /&gt; * Arguments :- &amp;strDataToFormat = string to format to code128 format..&lt;br /&gt; * Returns :- Formatted string.&lt;br /&gt; */&lt;br /&gt;/**&lt;br /&gt; * getCode128BarCode&lt;br /&gt; * &lt;br /&gt; * This function generates Code128 barcode for the given string. It uses subsets B and C when generating barcode &lt;br /&gt; * string (not subset A). &lt;br /&gt; * @param In &amp;strDataToFormat - string to format into the barcode.&lt;br /&gt; * Returns: ASCII characters needed to represent the barcode.&lt;br /&gt; *&lt;br /&gt; * ASSUMPTIONS: The &amp;strDataToFormat string does not contain any invalid characters. Only ASCII characters 32 to 126 are&lt;br /&gt; * allowed - if there are invalid characters, an empty string is returned. The function itself appends the necessary special &lt;br /&gt; * ASCII characters to generate the barcode.&lt;br /&gt; *&lt;br /&gt; * The algorithm for creating barcodes is based upon the sample code provided on this site, with slight modifications:&lt;br /&gt; * http://grandzebu.net/index.php?page=/informatique/codbar-en/code128.htm&lt;br /&gt;**/&lt;br /&gt;method getCode128BarCode&lt;br /&gt;   /+ &amp;strDataToFormat as String +/&lt;br /&gt;   /+ Returns String +/&lt;br /&gt;   &lt;br /&gt;   Local boolean &amp;boolSubsetB = True;&lt;br /&gt;   Local boolean &amp;boolIsDigits;&lt;br /&gt;   Local string &amp;strBarcode = "";&lt;br /&gt;   Local integer &amp;i;&lt;br /&gt;   Local integer &amp;intCharNum, &amp;charsToCheck, &amp;intCheckSum;&lt;br /&gt;   &lt;br /&gt;   /* While developing... */&lt;br /&gt;   rem &amp;strDataToFormat = "123456789012345678901234567890";&lt;br /&gt;   &lt;br /&gt;   /* No need to process an empty string - simply return what was put in */&lt;br /&gt;   If Len(&amp;strDataToFormat) = 0 Then&lt;br /&gt;      Return &amp;strBarcode;&lt;br /&gt;   End-If;&lt;br /&gt;   &lt;br /&gt;   /* Check for valid characters */&lt;br /&gt;   For &amp;i = 1 To Len(&amp;strDataToFormat)&lt;br /&gt;      &amp;intCharNum = Code(Substring(&amp;strDataToFormat, &amp;i, 1));&lt;br /&gt;      If &amp;intCharNum &gt;= 32 And&lt;br /&gt;            &amp;intCharNum &lt;= 126 Then&lt;br /&gt;      Else&lt;br /&gt;         /* invalid characters found - return empty string */&lt;br /&gt;         Return "";&lt;br /&gt;      End-If;&lt;br /&gt;   End-For;&lt;br /&gt;   &lt;br /&gt;   &amp;i = 1;&lt;br /&gt;   &lt;br /&gt;   While &amp;i &lt;= Len(&amp;strDataToFormat)&lt;br /&gt;      &lt;br /&gt;      If &amp;boolSubsetB Then&lt;br /&gt;         /* see if it's worth it to switch to subset C */&lt;br /&gt;         /* yes for 4 digits at start or end, else if 6 digits */&lt;br /&gt;         If (&amp;i = 1) Or&lt;br /&gt;               (&amp;i + 3) = Len(&amp;strDataToFormat) Then&lt;br /&gt;            &amp;charsToCheck = 4;&lt;br /&gt;         Else&lt;br /&gt;            &amp;charsToCheck = 6;&lt;br /&gt;         End-If;&lt;br /&gt;         &lt;br /&gt;         &amp;boolIsDigits = False;&lt;br /&gt;         If IsDigits(Substring(&amp;strDataToFormat, &amp;i, &amp;charsToCheck)) And&lt;br /&gt;               (Len(Substring(&amp;strDataToFormat, &amp;i, &amp;charsToCheck)) = &amp;charsToCheck) Then&lt;br /&gt;            &amp;boolIsDigits = True;&lt;br /&gt;         End-If;&lt;br /&gt;         &lt;br /&gt;         If &amp;boolIsDigits Then&lt;br /&gt;            &lt;br /&gt;            If &amp;i = 1 Then&lt;br /&gt;               /* Put Start C character, to indicate barcode starts with subset C */&lt;br /&gt;               &amp;strBarcode = Char(210);&lt;br /&gt;            Else&lt;br /&gt;               /* Put Code C character, to indicate switch to subset C */&lt;br /&gt;               &amp;strBarcode = &amp;strBarcode | Char(204);&lt;br /&gt;            End-If;&lt;br /&gt;            &amp;boolSubsetB = False;&lt;br /&gt;            &lt;br /&gt;         Else&lt;br /&gt;            &lt;br /&gt;            If &amp;i = 1 Then&lt;br /&gt;               /* Put Start B character, to indicate barcode starts with subset B */&lt;br /&gt;               &amp;strBarcode = Char(209);&lt;br /&gt;            End-If;&lt;br /&gt;            &lt;br /&gt;         End-If;&lt;br /&gt;         &lt;br /&gt;      End-If;&lt;br /&gt;      &lt;br /&gt;      If Not &amp;boolSubsetB Then&lt;br /&gt;         &lt;br /&gt;         /* We are on subset C, try to process 2 digits */&lt;br /&gt;         &amp;boolIsDigits = False;&lt;br /&gt;         &lt;br /&gt;         If IsDigits(Substring(&amp;strDataToFormat, &amp;i, 2)) And&lt;br /&gt;               (Len(Substring(&amp;strDataToFormat, &amp;i, 2)) = 2) Then&lt;br /&gt;            &amp;boolIsDigits = True;&lt;br /&gt;         End-If;&lt;br /&gt;         &lt;br /&gt;         If &amp;boolIsDigits Then&lt;br /&gt;            /* 2 digits - process using subset C */&lt;br /&gt;            &amp;intCharNum = Value(Substring(&amp;strDataToFormat, &amp;i, 2));&lt;br /&gt;            If &amp;intCharNum = 0 Then&lt;br /&gt;               &amp;intCharNum = 212;&lt;br /&gt;            Else&lt;br /&gt;               If &amp;intCharNum &lt; 95 Then&lt;br /&gt;                  &amp;intCharNum = &amp;intCharNum + 32;&lt;br /&gt;               Else&lt;br /&gt;                  &amp;intCharNum = &amp;intCharNum + 105;&lt;br /&gt;               End-If;&lt;br /&gt;            End-If;&lt;br /&gt;            &lt;br /&gt;            &amp;strBarcode = &amp;strBarcode | Char(&amp;intCharNum);&lt;br /&gt;            &amp;i = &amp;i + 2;&lt;br /&gt;            &lt;br /&gt;         Else&lt;br /&gt;            /* revert back to subset B */&lt;br /&gt;            &amp;strBarcode = &amp;strBarcode | Char(205);&lt;br /&gt;            &amp;boolSubsetB = True;&lt;br /&gt;            &lt;br /&gt;         End-If;&lt;br /&gt;         &lt;br /&gt;      End-If;&lt;br /&gt;      &lt;br /&gt;      If &amp;boolSubsetB Then&lt;br /&gt;         &lt;br /&gt;         /* Process 1 digit with subset B */&lt;br /&gt;         &amp;strBarcode = &amp;strBarcode | Substring(&amp;strDataToFormat, &amp;i, 1);&lt;br /&gt;         &amp;i = &amp;i + 1&lt;br /&gt;      End-If;&lt;br /&gt;      &lt;br /&gt;   End-While;&lt;br /&gt;   &lt;br /&gt;   /* Calculation of the checksum */&lt;br /&gt;   For &amp;i = 1 To Len(&amp;strBarcode)&lt;br /&gt;      &lt;br /&gt;      &amp;intCharNum = Code(Substring(&amp;strBarcode, &amp;i, 1));&lt;br /&gt;      If &amp;intCharNum = 212 Then&lt;br /&gt;         &amp;intCharNum = 0;&lt;br /&gt;      Else&lt;br /&gt;         If &amp;intCharNum &lt; 127 Then&lt;br /&gt;            &amp;intCharNum = &amp;intCharNum - 32;&lt;br /&gt;         Else&lt;br /&gt;            &amp;intCharNum = &amp;intCharNum - 105;&lt;br /&gt;         End-If;&lt;br /&gt;      End-If;&lt;br /&gt;      &lt;br /&gt;      If &amp;i = 1 Then&lt;br /&gt;         &amp;intCheckSum = &amp;intCharNum;&lt;br /&gt;      Else&lt;br /&gt;         &amp;intCheckSum = &amp;intCheckSum + (&amp;intCharNum * (&amp;i - 1));&lt;br /&gt;      End-If;&lt;br /&gt;      &lt;br /&gt;   End-For;&lt;br /&gt;   &lt;br /&gt;   /* Apply modulo 103 to the weighted total to get the checksum */&lt;br /&gt;   &amp;intCheckSum = Mod(&amp;intCheckSum, 103);&lt;br /&gt;   &lt;br /&gt;   /* Calculate checksum ASCII code */&lt;br /&gt;   If &amp;intCheckSum &lt; 95 Then&lt;br /&gt;      &amp;intCheckSum = &amp;intCheckSum + 32;&lt;br /&gt;   Else&lt;br /&gt;      &amp;intCheckSum = &amp;intCheckSum + 105;&lt;br /&gt;   End-If;&lt;br /&gt;   &lt;br /&gt;   /* Add the checksum and the STOP */&lt;br /&gt;   &amp;strBarcode = &amp;strBarcode | Char(&amp;intCheckSum) | Char(211);&lt;br /&gt;   &lt;br /&gt;   Return &amp;strBarcode;&lt;br /&gt;   &lt;br /&gt;end-method;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4947496183572879301?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4947496183572879301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4947496183572879301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4947496183572879301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4947496183572879301'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/05/barcode-peoplecode-for-code128.html' title='Barcode PeopleCode for code128'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8025834144195520678</id><published>2009-04-24T14:53:00.006+10:00</published><updated>2009-07-21T17:02:48.394+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML Publisher XSD Generate Output'/><title type='text'>Generating XSD and XML for XML Publisher</title><content type='html'>During design phase of an XML Publisher Report it is usefule to be able to rapidly update your XSD files for the data source template.  I found some delivered code that does it very nicely.  The run control includes a flag to swith this on/off.&lt;br /&gt;&lt;br /&gt;See SSF_PRNT_INV.CALLXMLP.Step02&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;amp;MainChunk&lt;/span&gt; is/are the final rowset/s generated prior to publishg to XML Publisher.&lt;br /&gt;&lt;br /&gt;You'll need to include:&lt;br /&gt;import PSXP_XMLGEN:*;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: Consolas, "Courier New", Courier, Monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;  &lt;span class="rem"&gt;REM - Use this code to output both XSD and XML files;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;REM - for use in the design phase;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;If&lt;/span&gt; SSF_INVP_AET.SSF_OUTPUT_XML = &lt;span class="str"&gt;"X"&lt;/span&gt; &lt;span class="kwrd"&gt;Or&lt;/span&gt;&lt;br /&gt;        SSF_INVP_AET.SSF_OUTPUT_XML = &lt;span class="str"&gt;"B"&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;br /&gt;     &amp;amp;oDS = create PSXP_XMLGEN:RowSetDS();&lt;br /&gt;     &amp;amp;MYFILE = GetFile(RTrim(SSF_INVP_AET.JF_FILE_DIR) | SSF_INVP_AET.PROCESS_INSTANCE | &lt;span class="str"&gt;"_*"&lt;/span&gt; | &lt;span class="str"&gt;".xsd"&lt;/span&gt;, &lt;span class="str"&gt;"N"&lt;/span&gt;, &lt;span class="str"&gt;"UTF8"&lt;/span&gt;, %FilePath_Absolute);&lt;br /&gt;     &lt;span class="kwrd"&gt;If&lt;/span&gt; &amp;amp;MYFILE.IsOpen &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;br /&gt;        &amp;amp;sResult = &amp;amp;oDS.getXSDSchema(&amp;amp;MainChunk);&lt;br /&gt;        &amp;amp;MYFILE.WriteLine(&amp;amp;sResult);&lt;br /&gt;        &amp;amp;MYFILE.Close();&lt;br /&gt;     &lt;span class="kwrd"&gt;End&lt;/span&gt;-&lt;span class="kwrd"&gt;If&lt;/span&gt;;&lt;br /&gt;     &amp;amp;MYFILE = GetFile(RTrim(SSF_INVP_AET.JF_FILE_DIR) | SSF_INVP_AET.PROCESS_INSTANCE | &lt;span class="str"&gt;"_*"&lt;/span&gt; | &lt;span class="str"&gt;".xml"&lt;/span&gt;, &lt;span class="str"&gt;"N"&lt;/span&gt;, &lt;span class="str"&gt;"UTF8"&lt;/span&gt;, %FilePath_Absolute);&lt;br /&gt;     &lt;span class="kwrd"&gt;If&lt;/span&gt; &amp;amp;MYFILE.IsOpen &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;br /&gt;        &amp;amp;sResult = &amp;amp;oDS.getXMLData(&amp;amp;MainChunk, &lt;span class="str"&gt;""&lt;/span&gt;);&lt;br /&gt;        &amp;amp;MYFILE.WriteLine(&amp;amp;sResult);&lt;br /&gt;        &amp;amp;MYFILE.Close();&lt;br /&gt;     &lt;span class="kwrd"&gt;End&lt;/span&gt;-&lt;span class="kwrd"&gt;If&lt;/span&gt;;&lt;br /&gt;  &lt;span class="kwrd"&gt;End&lt;/span&gt;-&lt;span class="kwrd"&gt;If&lt;/span&gt;;&lt;br /&gt;  &lt;span class="rem"&gt;REM - End of design phase code ;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8025834144195520678?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8025834144195520678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8025834144195520678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8025834144195520678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8025834144195520678'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/04/generating-xsd-and-xml-for-xml.html' title='Generating XSD and XML for XML Publisher'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6837770139364554758</id><published>2009-04-23T18:44:00.003+10:00</published><updated>2009-04-24T15:08:40.309+10:00</updated><title type='text'>Project Flowchart (developer centric version)</title><content type='html'>Work in progress...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_85PwLFr_MR4/SfArATqKvlI/AAAAAAAAAa4/ZTmz5WO-9e0/s1600-h/Project+Flowchart.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 278px; height: 400px;" src="http://2.bp.blogspot.com/_85PwLFr_MR4/SfArATqKvlI/AAAAAAAAAa4/ZTmz5WO-9e0/s400/Project+Flowchart.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5327805643456429650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6837770139364554758?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6837770139364554758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6837770139364554758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6837770139364554758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6837770139364554758'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/04/project-flowchart-developer-centric.html' title='Project Flowchart (developer centric version)'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_85PwLFr_MR4/SfArATqKvlI/AAAAAAAAAa4/ZTmz5WO-9e0/s72-c/Project+Flowchart.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-7772237066332547660</id><published>2009-04-08T11:49:00.003+10:00</published><updated>2010-03-31T12:17:41.816+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NVAL NVL Null no value in Oracle SQL'/><title type='text'>NVAL NVL Null no value in Oracle SQL</title><content type='html'>Argh, I seem to always forget this.  Very annoying.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;select nvl(&lt;br /&gt;    (select emplid from psoprdefn where oprid = 'xxx')&lt;br /&gt;, 'a') from dual&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-7772237066332547660?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/7772237066332547660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=7772237066332547660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7772237066332547660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7772237066332547660'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/04/nval-nvl-null-no-value-in-oracle-sql.html' title='NVAL NVL Null no value in Oracle SQL'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-465140954214146398</id><published>2009-03-16T12:41:00.004+10:00</published><updated>2009-03-16T13:37:48.429+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Crystal'/><title type='text'>Getting Crystal To Work</title><content type='html'>Oh Crystal, when will you be &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;decommissioned&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;Sometimes Crystal just doesn't want to play ball.  Here's what I recently found:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If the report was using my &lt;span style="font-style: italic;"&gt;local ODBC connection&lt;/span&gt; for its Database Connection it didn't work on the Server.  Of course.&lt;br /&gt;&lt;br /&gt;I was receiving the following error message:&lt;br /&gt;&lt;pre&gt;Crystal Reports Print Engine error text: Error in File e:\psoft\s90dev\crw\eng\usqsf3p.rpt:&lt;br /&gt;Unable to connect: .rpt:&lt;br /&gt;Unable to connect: incorrect log on parameters. %6 %7 %8 %9 (65,30)&lt;br /&gt;Message Set Number: 65&lt;br /&gt;Message Number: 30&lt;br /&gt;Message Reason: Crystal Reports Print Engine error text: Error in File e:\psoft\s90dev\crw\eng\usqsf3p.rpt:&lt;br /&gt;Unable to connect: .rpt:&lt;br /&gt;Unable to connect: incorrect log on parameters. %6 %7 %8 %9 (65,30)&lt;br /&gt;&lt;/pre&gt;This can be simply corrected by using the following steps:&lt;br /&gt;&lt;br /&gt;- Go to 'Database/Set Datasource Location...'&lt;br /&gt;- Create a new connection.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_85PwLFr_MR4/Sb3JJ4wVa9I/AAAAAAAAAaI/bbwSqObDaLg/s1600-h/ScreenHunter_01+Mar.+16+12.48.gif"&gt;&lt;img style="cursor: pointer; width: 400px; height: 273px;" src="http://4.bp.blogspot.com/_85PwLFr_MR4/Sb3JJ4wVa9I/AAAAAAAAAaI/bbwSqObDaLg/s400/ScreenHunter_01+Mar.+16+12.48.gif" alt="" id="BLOGGER_PHOTO_ID_5313624307058174930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Select both Current Data Source in top pane and new one in bottom, click 'Update'.&lt;br /&gt;- Verify the database.&lt;br /&gt;- Save and perhaps even open and close to ...do something.&lt;br /&gt;&lt;br /&gt;... or just never using a local ODBC connection (duh?).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Which user to use for the connection prior to migrating out of DEV and eventually into PROD?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Subreport links.&lt;br /&gt;&lt;br /&gt;If found I had to use the following ("sameish" for run control id):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_85PwLFr_MR4/Sb3JgKDZoRI/AAAAAAAAAaQ/g1cNAB33TTs/s1600-h/ScreenHunter_02+Mar.+16+13.37.gif"&gt;&lt;img style="cursor: pointer; width: 400px; height: 280px;" src="http://1.bp.blogspot.com/_85PwLFr_MR4/Sb3JgKDZoRI/AAAAAAAAAaQ/g1cNAB33TTs/s400/ScreenHunter_02+Mar.+16+13.37.gif" alt="" id="BLOGGER_PHOTO_ID_5313624689658667282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&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/7775978839077988970-465140954214146398?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/465140954214146398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=465140954214146398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/465140954214146398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/465140954214146398'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/03/getting-crystal-to-work.html' title='Getting Crystal To Work'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_85PwLFr_MR4/Sb3JJ4wVa9I/AAAAAAAAAaI/bbwSqObDaLg/s72-c/ScreenHunter_01+Mar.+16+12.48.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1892210466781508586</id><published>2009-03-10T11:21:00.002+10:00</published><updated>2009-03-10T11:23:08.558+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQR A4 Printer Direct Letter'/><title type='text'>Printing SQR A4 instead of Letter</title><content type='html'>Bit of a vague post...&lt;br /&gt;&lt;br /&gt;When printing directly to Printer we had a Process Type of 'Crystal Check'.  In parameters we added:&lt;br /&gt;&lt;br /&gt;-PAPERA4&lt;br /&gt;&lt;br /&gt;... to the end of the parameter list.  This is not documented.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1892210466781508586?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1892210466781508586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1892210466781508586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1892210466781508586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1892210466781508586'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/03/printing-sqr-a4-instead-of-letter.html' title='Printing SQR A4 instead of Letter'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1905475551297335007</id><published>2009-02-17T15:13:00.010+10:00</published><updated>2010-05-05T14:00:34.834+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Registry Register Interface'/><title type='text'>The Registry - Registering Interfaces</title><content type='html'>&lt;span style="font-size: 100%;"&gt;&lt;span style="font-family: arial;"&gt;For following error message:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: times new roman; font-size: 85%; font-style: italic;"&gt;"HMCR_FRAMEWORK.ServiceFramework.Utilities.ServiceManager.OnExecute  Name:LocateService  PCPC:1612  Statement:37 Called from:SCC_PERSON_SOA_CONSUMER.PersonServiceConsumer.SCC_PersCitizenshipConsumer.OnExecute  Name:getData  Statement:6 Called from:CITIZEN_PASSPORT.GBL.PostBuild  Statement:5 not found in the registry (18137,5)&lt;/span&gt;&lt;span style="font-family: verdana; font-size: 85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: arial; font-size: 85%; font-style: italic;"&gt;The PeopleCode program executed an Error statement, which has produced this message."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;See:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;PeopleBooks &amp;gt; PeopleSoft Enterprise HRMS 9.0 Application Fundamentals PeopleBook &amp;gt; Registering Interfaces&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Which leads to:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="TABLE" style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-style: italic;"&gt;Set Up HRMS &amp;gt; System Administration &amp;gt; HCM Registry &amp;gt; Service Registry&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="TABLE" style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: tahoma; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-converted-space"&gt;Click the 'Refresh Cache' button:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_85PwLFr_MR4/SZpfCNyUjNI/AAAAAAAAAZQ/m-jyi706X-U/s1600-h/registry.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5303656002847280338" src="http://1.bp.blogspot.com/_85PwLFr_MR4/SZpfCNyUjNI/AAAAAAAAAZQ/m-jyi706X-U/s400/registry.gif" style="cursor: pointer; height: 147px; width: 400px;" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1905475551297335007?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1905475551297335007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1905475551297335007' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1905475551297335007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1905475551297335007'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/02/registry-registering-interfaces.html' title='The Registry - Registering Interfaces'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_85PwLFr_MR4/SZpfCNyUjNI/AAAAAAAAAZQ/m-jyi706X-U/s72-c/registry.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8817637696307289317</id><published>2009-01-30T09:59:00.002+10:00</published><updated>2009-01-30T10:01:10.036+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Align Right SQR'/><title type='text'>Right Align Field in SQR</title><content type='html'>How to align right in SQR?&lt;div&gt;Sometimes the answers are so obvious you kick yourself when you see them:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   Let $total = lpad(To_Char(#total), 15, ' ')&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   Print $total&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;(, 40) edit $999,999,999.99 bold&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8817637696307289317?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8817637696307289317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8817637696307289317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8817637696307289317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8817637696307289317'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/01/right-align-field-in-sqr.html' title='Right Align Field in SQR'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8787768212106230674</id><published>2009-01-21T17:25:00.002+10:00</published><updated>2009-01-21T17:27:17.090+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Browser Language Login'/><title type='text'>Browser Language Problems</title><content type='html'>Heard about some problems when browser's default language is not same as Psoft enabled language.  Found I couldn't log in when set to Spanish. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Here is the solution&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Arial; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;a id="publishedDocumentUrl" class="tabcontent" target="_blank" href="http://docs.google.com/Doc?id=df48r26b_49chqwb3dt" style="color: rgb(17, 42, 187); font-family: Arial,sans-serif; font-size: 12px ! important;"&gt;http://docs.google.com/Doc?id=df48r26b_49chqwb3dt&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8787768212106230674?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8787768212106230674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8787768212106230674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8787768212106230674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8787768212106230674'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/01/browser-language-problems.html' title='Browser Language Problems'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-930686581622911141</id><published>2009-01-07T17:54:00.003+10:00</published><updated>2009-01-07T18:02:11.305+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Query EFFDT'/><title type='text'>Tricky EFFDT Logic in Query</title><content type='html'>Sometimes you want to write something like the following in Query&lt;br /&gt;(code snippet for outer join + effdt solution btw):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;AND K.PASSWORD (+) = F.PASSWORD&lt;br /&gt;AND &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   (K.EFFDT IS NULL&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   OR K.EFFDT = &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      (SELECT MAX( M.EFFDT)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      FROM PS_UQ_CHK_SIG_FILE M&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      WHERE M.EFFDT &lt;= SYSDATE))&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It would appear that Query doesn't let you, but if you do things in the correct order you &lt;span style="font-style: italic;"&gt;can &lt;/span&gt;force it : )&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add your subquery&lt;/li&gt;&lt;li&gt;Allow the default Effdt Logic to be added by PeopleSoft/Query&lt;/li&gt;&lt;li&gt;Add a new expression "max(effdt)" and add to the selected field.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;span style="font-weight: bold;"&gt; do not add the alias&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Correct the Criteria using field + 'not greater than' + 'sysdate' &lt;- an expression&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&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/7775978839077988970-930686581622911141?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/930686581622911141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=930686581622911141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/930686581622911141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/930686581622911141'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2009/01/tricky-effdt-logic-in-query.html' title='Tricky EFFDT Logic in Query'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-2045802623521497393</id><published>2008-12-17T17:28:00.002+10:00</published><updated>2008-12-17T17:28:50.792+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='query sql project'/><title type='text'>Queries in Project and number of Records</title><content type='html'>select&lt;br /&gt;  b.qryname&lt;br /&gt;, b.descr&lt;br /&gt;, b.descrlong&lt;br /&gt;, (select count(*) from PSQRYRECORD where qryname = b.qryname) as Num_Records&lt;br /&gt; from&lt;br /&gt;  psprojectitem a&lt;br /&gt;, psqrydefn b&lt;br /&gt;where a.projectname = 'UQXM1210'&lt;br /&gt;and b.qryname = a.objectvalue1&lt;br /&gt;order by 4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-2045802623521497393?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/2045802623521497393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=2045802623521497393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2045802623521497393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2045802623521497393'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/12/queries-in-project-and-number-of.html' title='Queries in Project and number of Records'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-7353384360331318248</id><published>2008-11-21T10:00:00.004+10:00</published><updated>2009-01-09T09:49:04.460+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Engine App Comment'/><title type='text'>App Engine Comments</title><content type='html'>Would seem that you can make comments in App Engine SQL Actions if:&lt;br /&gt;&lt;br /&gt;#1 You use the /* */ commenting standard,&lt;br /&gt;#2 Comments are &lt;span style="font-weight: bold;"&gt;after &lt;/span&gt;the WHERE clause.&lt;br /&gt;#3 Comments do not contain a "%", such as &lt;span style="font-weight: bold;"&gt;%&lt;/span&gt;Table(RecName).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-7353384360331318248?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/7353384360331318248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=7353384360331318248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7353384360331318248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7353384360331318248'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/11/app-engine-comments.html' title='App Engine Comments'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4192661929194034464</id><published>2008-10-22T15:58:00.003+10:00</published><updated>2008-10-22T16:10:41.433+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design sql record definition def'/><title type='text'>Field Record Definition for Detailed Design</title><content type='html'>run, copy and paste (work in progess):&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;DEFINE RECNAME = 'UQ_BNK_RCN_PAYM';&lt;br /&gt;-- FIELD, KEY, SEARCHKEY, LIST, REQ, EDIT, PROMPT TABLE, DEFAULT&lt;br /&gt;SELECT&lt;br /&gt;  FIELDNAME AS FIELD&lt;br /&gt;, ' ' AS KEY&lt;br /&gt;, ' ' AS SEARCHKEY&lt;br /&gt;, ' ' AS LISTT&lt;br /&gt;, ' ' AS REQ&lt;br /&gt;, ' ' AS EDIT&lt;br /&gt;, ' ' AS PROMPTTABLE&lt;br /&gt;, ' ' AS DEFAULTT&lt;br /&gt;FROM PSRECFIELD&lt;br /&gt;WHERE RECNAME = &amp;amp;RECNAME&lt;br /&gt;ORDER BY FIELDNUM&lt;br /&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4192661929194034464?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4192661929194034464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4192661929194034464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4192661929194034464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4192661929194034464'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/10/field-record-definition-for-detailed.html' title='Field Record Definition for Detailed Design'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4338792264756680325</id><published>2008-10-13T11:28:00.002+10:00</published><updated>2008-10-13T11:33:35.674+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security purchase approve order'/><title type='text'>Security for Purchase Orders, Create &amp; Approve.</title><content type='html'>Security for Purchase Orders, Create &amp;amp; Approve.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Requestor:&lt;/span&gt;&lt;br /&gt;Peopletools &gt; Security &gt; User Profiles&lt;br /&gt;  Role: '&lt;span style="font-style: italic;"&gt;xx &lt;/span&gt;C PO Officer'&lt;br /&gt;  Route Control: &lt;span style="font-style: italic;"&gt;(same as the approver)&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;Set Up Financials/Supply Chain &gt; Common Definitions &gt; User Preferences &gt; Define User Preferences &gt; (Procurement Link)&lt;br /&gt;  Operational Unit: &lt;span style="font-style: italic;"&gt;(same as the approver)&lt;/span&gt;&lt;br /&gt;  Requester: 'userA'&lt;br /&gt;&lt;br /&gt;  &gt; (Purchase Order Authorisations)&lt;br /&gt;  Tick everything (if appropriate for environment)&lt;br /&gt;  Buyers User Authorised For: 'userA'&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Approver:&lt;/span&gt;&lt;br /&gt;Peopletools &gt; Security &gt; User Profiles&lt;br /&gt;  Role: '&lt;span style="font-style: italic;"&gt;xx &lt;/span&gt;W Approver - Fin Lvl 1'&lt;br /&gt;  Route Control: &lt;span style="font-style: italic;"&gt;(same as the requester)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Set Up Financials/Supply Chain &gt; Common Definitions &gt; User Preferences &gt; Define User Preferences &gt; (Procurement Link)&lt;br /&gt;  Operational Unit: &lt;span style="font-style: italic;"&gt;(same as the requester)&lt;/span&gt;&lt;br /&gt;  &gt; (Purchase Order Authorisations)&lt;br /&gt;  Tick everything (if appropriate for environment)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4338792264756680325?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4338792264756680325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4338792264756680325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4338792264756680325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4338792264756680325'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/10/security-for-purchase-orders-create.html' title='Security for Purchase Orders, Create &amp; Approve.'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4249006692675099446</id><published>2008-10-09T15:16:00.003+10:00</published><updated>2008-10-09T15:20:57.714+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='File Attach View Download Add'/><title type='text'>File Attachment Utilities</title><content type='html'>Found some delivered code that actually made things easier for once.  Unbelievable I know.&lt;br /&gt;It even has excellent, descriptive comments!!!&lt;br /&gt;&lt;br /&gt;Check the Application Package SCM_ARCH_ATTACH.UI.AttachmentHandler&lt;br /&gt;&lt;br /&gt;1. Make sure your record contains the attachment fields SCM_ATTACH_ID and ATT_VERSION (ATTACHUSERFILE would be nice too for the user given filename)&lt;br /&gt;&lt;br /&gt;2. Place the fields from Record.PV_ATTACH_WRK on the same scroll level.&lt;br /&gt;&lt;br /&gt;3. Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4249006692675099446?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4249006692675099446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4249006692675099446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4249006692675099446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4249006692675099446'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/10/file-attachment-utilities.html' title='File Attachment Utilities'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3165012728589886819</id><published>2008-10-09T13:25:00.003+10:00</published><updated>2008-10-09T13:29:41.785+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI Excel Component Interface'/><title type='text'>Excel-To-CI CI Component Interface PeopleCode</title><content type='html'>While building a custom Excel-To-CI Interface we discovered that each row in the spreadsheet is passed, one at a time, to the CI.  So, if for example you had data with one header and two lines you would have 2 rows on the spreadsheet.  A call would be made to the CI twice.&lt;br /&gt;&lt;br /&gt;Following is example PeopleCode that will handle juggling of the unique key values needed:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Component.SavePreChange()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family: courier new;"&gt;/* UQAP0780 - UQ SIR 178, Michael Nitschke 03.Sep.08 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Handle multiples voucher lines and distribution lines.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   The ExcelToCI spreadsheet posts across each line as a distinct voucher.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   This code detects that the voucher already exists and marks the row as one that &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   has to be queried by PeopleCode in SavePostChange(). */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;If %Mode = "A" Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   /* Get level 0 records for component. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Local Record &amp;amp;recVCHR_HDR_STG = GetLevel0()(1).GetRecord(Record.VCHR_HDR_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Local Record &amp;amp;recVCHR_VNDR_STG = GetLevel0()(1).GetRecord(Record.VCHR_VNDR_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Local Record &amp;amp;recVCHR_BANK_STG = GetLevel0()(1).GetRecord(Record.VCHR_BANK_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   /* Generate a unique VCHR_BLD_KEY_C1 value. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_HDR_STG.VCHR_BLD_KEY_C1.Value = &amp;amp;recVCHR_HDR_STG.INVOICE_ID.Value | &amp;amp;recVCHR_HDR_STG.INVOICE_DT.Value | &amp;amp;recVCHR_HDR_STG.VENDOR_ID.Value | &amp;amp;recVCHR_HDR_STG.GROSS_AMT.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_VNDR_STG.VCHR_BLD_KEY_C1.Value = VCHR_HDR_STG.VCHR_BLD_KEY_C1.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_BANK_STG.VCHR_BLD_KEY_C1.Value = VCHR_HDR_STG.VCHR_BLD_KEY_C1.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   /* If VCHR_BLD_KEY_C1 value already exists we need to create a 2nd key value for VCHR_BLD_KEY_C2. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      &gt; See Component.SavePostChange PeopleCode for where this value/mark is used to cleanup rows. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Local integer &amp;amp;count = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   SQLExec("SELECT count(*) FROM %Table(VCHR_HDR_STG) WHERE VCHR_BLD_KEY_C1 = :1", VCHR_HDR_STG.VCHR_BLD_KEY_C1.Value, &amp;amp;count);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   If &amp;amp;count &lt;&gt; 0 Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      VCHR_HDR_STG.VCHR_BLD_KEY_C2.Value = "X" | &amp;count;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      &amp;amp;recVCHR_VNDR_STG.VCHR_BLD_KEY_C2.Value = VCHR_HDR_STG.VCHR_BLD_KEY_C2.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      &amp;amp;recVCHR_BANK_STG.VCHR_BLD_KEY_C2.Value = VCHR_HDR_STG.VCHR_BLD_KEY_C2.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   End-If;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;End-If;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/* UQAP0780 - UQ SIR 178 End */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Component.SavePostChange()&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family: courier new;"&gt;/* UQAP0780, UQ SIR 178 Michael Nitschke 03.Sep.2008&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Cleanup records that have been inserted as single vouchers but are really*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   data for child rows (line and distribution) of already existing vouchers.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   These are marked with key field UQ_VCHRHDR_ST_V.VCHR_BLD_KEY_C2 value = 'X'. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   NOTE that this cleanup process will also allow duplicate vouchers to be posted&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   from the spreadsheet to the staging tables, the duplicates will be cleaned up/removed. */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/* Level 0 records are easy, if VCHR_BLD_KEY_C1 = "X" then delete the record. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   (b is for buffer) */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Local Record &amp;amp;recVCHR_HDR_STGb = GetLevel0()(1).GetRecord(Record.VCHR_HDR_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;If Left(&amp;amp;recVCHR_HDR_STGb.VCHR_BLD_KEY_C2.Value, 1) = "X" Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Local Record &amp;amp;recVCHR_HDR_STG = CreateRecord(Record.VCHR_HDR_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Local Record &amp;amp;recVCHR_VNDR_STG = CreateRecord(Record.VCHR_VNDR_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Local Record &amp;amp;recVCHR_BANK_STG = CreateRecord(Record.VCHR_BANK_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_HDR_STGb.CopyFieldsTo(&amp;amp;recVCHR_HDR_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_HDR_STGb.CopyFieldsTo(&amp;amp;recVCHR_VNDR_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_HDR_STGb.CopyFieldsTo(&amp;amp;recVCHR_BANK_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;x = &amp;amp;recVCHR_HDR_STG.Delete();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;x = &amp;amp;recVCHR_VNDR_STG.Delete();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;x = &amp;amp;recVCHR_BANK_STG.Delete();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;End-If;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/* Line record (b for buffer). */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Local Record &amp;amp;recVCHR_LINE_STGb = GetLevel0()(1).GetRowset(Scroll.VCHR_LINE_STG)(1).GetRecord(Record.VCHR_LINE_STG); /* (There will only ever be one row) */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;If Left(&amp;amp;recVCHR_LINE_STGb.VCHR_BLD_KEY_C2.Value, 1) = "X" Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Local Record &amp;amp;recVCHR_LINE_STG = CreateRecord(Record.VCHR_LINE_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_LINE_STGb.CopyFieldsTo(&amp;amp;recVCHR_LINE_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;tmpKeyVal = &amp;amp;recVCHR_LINE_STG.VCHR_BLD_KEY_C2.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_LINE_STG.VCHR_BLD_KEY_C2.Value = "";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   /* If a duplicate row exists (sans the "X" value) then delete. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      Else a unique row so update/remove the "X". */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   If &amp;amp;recVCHR_LINE_STG.SelectByKey() Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      &amp;amp;recVCHR_LINE_STG.VCHR_BLD_KEY_C2.Value = &amp;tmpKeyVal;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      &amp;amp;x = &amp;amp;recVCHR_LINE_STG.Delete();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      SQLExec("UPDATE %Table(VCHR_LINE_STG) SET VCHR_BLD_KEY_C2 = ' ' WHERE %KeyEqual(:1)", &amp;amp;recVCHR_LINE_STGb);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   End-If;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;End-If;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/* Distribution record. (b is for buffer) */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Local Record &amp;amp;recVCHR_DIST_STGb = GetLevel0()(1).GetRowset(Scroll.VCHR_LINE_STG)(1).GetRowset(Scroll.VCHR_DIST_STG)(1).GetRecord(Record.VCHR_DIST_STG); /* (There will only ever be one row) */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;If Left(&amp;amp;recVCHR_DIST_STGb.VCHR_BLD_KEY_C2.Value, 1) = "X" Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Local Record &amp;amp;recVCHR_DIST_STG = CreateRecord(Record.VCHR_DIST_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_DIST_STGb.CopyFieldsTo(&amp;amp;recVCHR_DIST_STG);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;tmpKeyVal = &amp;amp;recVCHR_DIST_STG.VCHR_BLD_KEY_C2.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;recVCHR_DIST_STG.VCHR_BLD_KEY_C2.Value = "";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   /* If a duplicate row exists (sans the "X" value) then delete. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      Else a unique row so update/remove the "X". */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   If &amp;amp;recVCHR_DIST_STG.SelectByKey() Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      &amp;amp;recVCHR_DIST_STG.VCHR_BLD_KEY_C2.Value = &amp;tmpKeyVal;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      &amp;amp;x = &amp;amp;recVCHR_DIST_STG.Delete();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   Else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      SQLExec("UPDATE %Table(VCHR_DIST_STG) SET VCHR_BLD_KEY_C2 = ' ' WHERE %KeyEqual(:1)", &amp;amp;recVCHR_DIST_STGb);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   End-If;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;End-If;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;/* UQAP0780, UQ SIR 178 End */&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3165012728589886819?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3165012728589886819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3165012728589886819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3165012728589886819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3165012728589886819'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/10/excel-to-ci-ci-component-interface.html' title='Excel-To-CI CI Component Interface PeopleCode'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-7683983242419563970</id><published>2008-10-03T14:53:00.002+10:00</published><updated>2008-10-03T14:57:08.492+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel CI Component Interface Process Order Record'/><title type='text'>Excel-To-CI Field Processing Order</title><content type='html'>When using the Excel-To-CI spreadsheets fields are processed in the same order that they appear on the records in the CI.  A problem can occur if field A is using the value of field B to populate a key value on its prompt table as field B will be populated after field A.  Note again that the order these fields appear on the page is not taken into consideration.&lt;br /&gt;&lt;br /&gt;To get around this problem you need to add a Derived Work record field on the page, up at level ) that will copy its value to Field B.  This DW field will be populated 1st.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-7683983242419563970?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/7683983242419563970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=7683983242419563970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7683983242419563970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7683983242419563970'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/10/excel-to-ci-field-processing-order.html' title='Excel-To-CI Field Processing Order'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1047875298632918803</id><published>2008-09-17T10:53:00.001+10:00</published><updated>2008-09-17T10:55:25.289+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pause sleep wait time PeopleCode'/><title type='text'>Pause/Sleep/Wait</title><content type='html'>Elegant way to pause or sleep processing for a while without using CPU time.  In PeopleCode:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;   Local JavaObject &amp;amp;thread = GetJavaClass("java.lang.Thread");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   &amp;amp;thread.sleep(2500);  // this is in milliseconds&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1047875298632918803?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1047875298632918803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1047875298632918803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1047875298632918803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1047875298632918803'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/09/pausesleepwait.html' title='Pause/Sleep/Wait'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-2578015668495975610</id><published>2008-09-16T14:09:00.001+10:00</published><updated>2008-09-16T14:09:44.466+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Index Delivered'/><title type='text'>Indexes on Delivered Tables</title><content type='html'>&lt;p class="Normal" style="margin-bottom: 10pt;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 10pt;"&gt;1. PSMENUITEM&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt;"&gt;create index psoft.MW_PSMENUITEM on psoft.PSMENUITEM ( PNLGRPNAME, ITEMNAME ) tablespace psindex;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Normal" style="margin-bottom: 10pt;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 10pt;"&gt;2. PSPNLGROUP&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt;"&gt;create index psoft.MW_PSPNLGROUP on psoft.PSPNLGROUP ( PNLNAME, ITEMNAME ) tablespace psindex;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Normal" style="margin-bottom: 10pt;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 10pt;"&gt;3. PSAUTHITEM&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt;"&gt;create index psoft.MW_PSAUTHITEM on psoft.PSAUTHITEM ( DISPLAYONLY, BARITEMNAME, PNLITEMNAME, CLASSID ) tablespace psindex;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Normal" style="margin-bottom: 10pt;"&gt;&lt;b style=""&gt;&lt;span style="font-size: 10pt;"&gt;4. PS_VAT_DEFAULT_HDR&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt;"&gt;&lt;br /&gt;create index PSOFT.MW_PS_VAT_DEFAULT_HDR on PSOFT.PS_VAT_DEFAULT_HDR ( VAT_DRIVER, COUNTRY, STATE, VAT_DRIVER_KEY1, VAT_DRIVER_KEY2, VAT_DRIVER_KEY3, EFF_STATUS, EFFDT, END_EFFDT, VAT_DRIVER_KEY4, VAT_DRIVER_KEY5, VAT_SETID );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-2578015668495975610?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/2578015668495975610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=2578015668495975610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2578015668495975610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2578015668495975610'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/09/indexes-on-delivered-tables.html' title='Indexes on Delivered Tables'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8242336306286963266</id><published>2008-09-11T16:55:00.002+10:00</published><updated>2008-09-11T16:56:27.284+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle SQL CLOB LOB Function Substr'/><title type='text'>Selecting CLOB Fields</title><content type='html'>Can be hard if you are using DISTINCT or LIKE clauses et al in your statement.  Try this Oracle function:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;   SELECT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   dbms_lob.substr(j.comments_2000,1,1000)&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8242336306286963266?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8242336306286963266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8242336306286963266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8242336306286963266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8242336306286963266'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/09/selecting-clob-fields.html' title='Selecting CLOB Fields'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5759745767330770648</id><published>2008-09-11T10:41:00.004+10:00</published><updated>2008-09-11T14:49:02.669+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RDS Report Manager Publish File'/><title type='text'>Publishing Files to Report Manager/RDS</title><content type='html'>See also: &lt;a href="http://capital-it.blogspot.com/2008/02/getting-sqrs-to-publish-to-rds.html"&gt;http://capital-it.blogspot.com/2008/02/getting-sqrs-to-publish-to-rds.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In short the generated files must be created in the same folder that is generated for the process.  I've found that App Engines at least are very fussy with filenames and they must follow the following convention:&lt;br /&gt;&lt;br /&gt;  AE_&lt;span style="font-style: italic;"&gt;ProcessName&lt;/span&gt;_&lt;span style="font-style: italic;"&gt;ProcessInstance&lt;/span&gt;.txt/csv&lt;br /&gt;&lt;br /&gt;I have found, with App Engines at least, that the RDS only likes extensions txt and csv.  Worth trying a few more.&lt;br /&gt;&lt;br /&gt;The path can be found here:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;    SELECT PRCSOUTPUTDIR || '\'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    FROM PSPRCSPARMS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    WHERE PRCSINSTANCE = 11579&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Example code:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;    Local string &amp;amp;pathNm&lt;br /&gt;  SQLExec("select prcsoutputdir || '\' from PSPRCSPARMS where prcsinstance = :1", UQ_UQAP0860_AET.PROCESS_INSTANCE.Value, &amp;amp;pathNm);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Local string &amp;amp;fileNm = "AE_UQAP0860_" | UQ_UQAP0860_AET.PROCESS_INSTANCE.Value | ".csv";&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Note:&lt;/span&gt; I have noticed that the file does not publish to RDS/Report Manager if... well I'm not sure.  Check that filename is not too long, does not contain extra periods (don't use %DateTime in the filename) etc., etc..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-5759745767330770648?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5759745767330770648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5759745767330770648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5759745767330770648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5759745767330770648'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/09/publishing-files-to-report-managerrds.html' title='Publishing Files to Report Manager/RDS'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8353409397491418038</id><published>2008-08-29T12:06:00.002+10:00</published><updated>2008-08-29T12:09:23.819+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oracle sql index key keys table'/><title type='text'>Finding Unique Index Keys - Oracle</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Will give you a list of indexes used by the table:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select * from all_indexes where table_name = 'T931_ACCOUNT_SWITCHING';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Will return fields (or keys) used by the index:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select * from all_ind_columns where table_name = 'T931_ACCOUNT_SWITCHING'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;and index_name = 'T931_ACCOUNT_SWITCHINGP1'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;order by 1,2,3,4,6&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8353409397491418038?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8353409397491418038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8353409397491418038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8353409397491418038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8353409397491418038'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/08/finding-unique-index-keys-oracle.html' title='Finding Unique Index Keys - Oracle'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-2730193926292738444</id><published>2008-08-26T11:45:00.002+10:00</published><updated>2008-08-26T11:47:27.838+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA file open close read interface'/><title type='text'>VBA example - Handling Import and Export Files</title><content type='html'>Because sometimes you have to use VBA.  This example was for a 3rd party's interface.&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: Consolas, "Courier New", Courier, Monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;Option&lt;/span&gt; Compare Database&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; ifcHR185GL_Actuals()&lt;br /&gt;    &lt;br /&gt;    DoCmd.SetWarnings &lt;span class="kwrd"&gt;False&lt;/span&gt;&lt;br /&gt;    stAurion = CheckEnviron()             &lt;span class="rem"&gt;' Get &amp;amp; set Env&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    locIn = &lt;span class="str"&gt;"C:\Temp\"&lt;/span&gt;&lt;br /&gt;    locOut = &lt;span class="str"&gt;"C:\Temp\"&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    stFilePathIn = locIn &amp;amp; &lt;span class="str"&gt;"gl_actuals.txt"&lt;/span&gt;&lt;br /&gt;    stFilePathOutHdr = locOut &amp;amp; &lt;span class="str"&gt;"JACT"&lt;/span&gt; &amp;amp; Format(&lt;span class="kwrd"&gt;Date&lt;/span&gt;, &lt;span class="str"&gt;"YYMMDD"&lt;/span&gt;) &amp;amp; &lt;span class="str"&gt;"_H.txt"&lt;/span&gt;&lt;br /&gt;    stFilePathOutLn = locOut &amp;amp; &lt;span class="str"&gt;"JACT"&lt;/span&gt; &amp;amp; Format(&lt;span class="kwrd"&gt;Date&lt;/span&gt;, &lt;span class="str"&gt;"YYMMDD"&lt;/span&gt;) &amp;amp; &lt;span class="str"&gt;"_L.txt"&lt;/span&gt;&lt;br /&gt;    stFilePathOut = locOut &amp;amp; &lt;span class="str"&gt;"JACT"&lt;/span&gt; &amp;amp; Format(&lt;span class="kwrd"&gt;Date&lt;/span&gt;, &lt;span class="str"&gt;"YYMMDD"&lt;/span&gt;) &amp;amp; &lt;span class="str"&gt;".txt"&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span class="rem"&gt;'    stFilePathIn = "U:\INTERFACE\CURRENT\IN\gl_interface_"&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;'    stFilePathOut = "U:\INTERFACE\CURRENT\OUT\JACT" &amp;amp; Format(Date, "YYMMDD") &amp;amp; ".txt"&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="rem"&gt;'Delete the existing records&lt;/span&gt;&lt;br /&gt;    DoCmd.OpenQuery &lt;span class="str"&gt;"qryHR185Actuals_Aurion_Del"&lt;/span&gt;, acNormal, acEdit&lt;br /&gt;    DoCmd.OpenQuery &lt;span class="str"&gt;"qryHR185Journal_Line_Actuals_Del"&lt;/span&gt;, , acEdit&lt;br /&gt;    &lt;br /&gt;    &lt;span class="rem"&gt;'Import the Aurion text file and create a new table&lt;/span&gt;&lt;br /&gt;    DoCmd.TransferText acImportDelim, &lt;span class="str"&gt;"HR185Gl_actuals Import Specification"&lt;/span&gt;, &lt;span class="str"&gt;"tblHR185Actuals_Aurion"&lt;/span&gt;, _&lt;br /&gt;    stFilePathIn, &lt;span class="kwrd"&gt;False&lt;/span&gt;, &lt;span class="str"&gt;""&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;    &lt;span class="rem"&gt;'Update header record with system date and PPEDN date to be used for journal lines&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;'may be commented out when the file has a PPEND&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;'but it requires import spec changes and qry_App changes&lt;/span&gt;&lt;br /&gt;    DoCmd.OpenQuery &lt;span class="str"&gt;"qryHR185HeaderRecord_Upd"&lt;/span&gt;, acNormal, acEdit&lt;br /&gt;    &lt;br /&gt;    &lt;span class="rem"&gt;'Create output table&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;''DoCmd.OpenQuery "qryHR185Journal_Header_Actuals_App", acNormal, acEdit&lt;/span&gt;&lt;br /&gt;    DoCmd.OpenQuery &lt;span class="str"&gt;"qryHR185Journal_Line_Actuals_App"&lt;/span&gt;, acNormal, acEdit&lt;br /&gt;    DoCmd.OpenQuery &lt;span class="str"&gt;"qryHR185Journal_Line_Actuals_UpdPPEND"&lt;/span&gt;, acNormal, acEdit&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;' Delete old copy of output files if found&lt;/span&gt;&lt;br /&gt;    stScratch = Dir(stFilePathOutHdr)&lt;br /&gt;    &lt;span class="kwrd"&gt;If&lt;/span&gt; stScratch &amp;lt;&amp;gt; &lt;span class="str"&gt;""&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;br /&gt;     Kill stFilePathOutHdr&lt;br /&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;br /&gt;    stScratch = Dir(stFilePathOutLn)&lt;br /&gt;    &lt;span class="kwrd"&gt;If&lt;/span&gt; stScratch &amp;lt;&amp;gt; &lt;span class="str"&gt;""&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;br /&gt;     Kill stFilePathOutLn&lt;br /&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;br /&gt;    stScratch = Dir(stFilePathOut)&lt;br /&gt;    &lt;span class="kwrd"&gt;If&lt;/span&gt; stScratch &amp;lt;&amp;gt; &lt;span class="str"&gt;""&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;br /&gt;     Kill stFilePathOut&lt;br /&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="rem"&gt;'Export the Header and Line tables&lt;/span&gt;&lt;br /&gt;    DoCmd.TransferText acExportFixed, &lt;span class="str"&gt;"tblHR185Journal_Header_Actuals Export Specification"&lt;/span&gt;, _&lt;br /&gt;    &lt;span class="str"&gt;"tblHR185Journal_Header_Actuals"&lt;/span&gt;, stFilePathOutHdr&lt;br /&gt;    DoCmd.TransferText acExportFixed, &lt;span class="str"&gt;"tblHR185Journal_Line_Actuals Export Specification"&lt;/span&gt;, _&lt;br /&gt;    &lt;span class="str"&gt;"qryHR185Journal_Line_Actuals_Export"&lt;/span&gt;, stFilePathOutLn&lt;br /&gt;            &lt;br /&gt;    &lt;span class="rem"&gt;' Merge Header and Line files into final export file.&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;Set&lt;/span&gt; fso = CreateObject(&lt;span class="str"&gt;"Scripting.FileSystemObject"&lt;/span&gt;)&lt;br /&gt;    &lt;span class="kwrd"&gt;Set&lt;/span&gt; fStrmH = fso.OpenTextFile(stFilePathOutHdr)&lt;br /&gt;    &lt;span class="kwrd"&gt;Set&lt;/span&gt; fStrmL = fso.OpenTextFile(stFilePathOutLn)&lt;br /&gt;    &lt;span class="kwrd"&gt;Set&lt;/span&gt; fStrmM = fso.CreateTextFile(stFilePathOut, &lt;span class="kwrd"&gt;True&lt;/span&gt;)&lt;br /&gt;    &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;Until&lt;/span&gt; fStrmH.AtEndOfStream&lt;br /&gt;        strLine = fStrmH.ReadLine&lt;br /&gt;        fStrmM.writeline strLine&lt;br /&gt;    &lt;span class="kwrd"&gt;Loop&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;Until&lt;/span&gt; fStrmL.AtEndOfStream&lt;br /&gt;        strLine = fStrmL.ReadLine&lt;br /&gt;        fStrmM.writeline strLine&lt;br /&gt;    &lt;span class="kwrd"&gt;Loop&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    fStrmH.Close&lt;br /&gt;    fStrmL.Close&lt;br /&gt;    fStrmM.Close&lt;br /&gt;    &lt;br /&gt;    &lt;span class="rem"&gt;' Cleanup Header and Line files.&lt;/span&gt;&lt;br /&gt;    Kill stFilePathOutHdr&lt;br /&gt;    Kill stFilePathOutLn&lt;br /&gt;    DoCmd.SetWarnings &lt;span class="kwrd"&gt;True&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="rem"&gt;'!!!   COMMENT OUT THE LINE BELOW LATER&lt;/span&gt;&lt;br /&gt;    MsgBox &lt;span class="str"&gt;"completed"&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-2730193926292738444?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/2730193926292738444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=2730193926292738444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2730193926292738444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2730193926292738444'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/08/vba-example-handling-import-and-export.html' title='VBA example - Handling Import and Export Files'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-2765180348999071846</id><published>2008-08-15T09:59:00.002+10:00</published><updated>2008-08-15T10:06:21.411+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App Application Package PeopleCode syntax'/><title type='text'>Simple Example of using an Application Package</title><content type='html'>Because I'm always forgetting the syntax:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;import APP_PACKAGE:AppClass;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Local APP_PACKAGE:AppClass &amp;amp;objAppClass = create APP_PACKAGE:AppClass();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;amp;x = &amp;amp;objAppClass.Method();&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-2765180348999071846?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/2765180348999071846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=2765180348999071846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2765180348999071846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2765180348999071846'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/08/simple-example-of-using-application.html' title='Simple Example of using an Application Package'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-333730903003413927</id><published>2008-08-01T10:59:00.003+10:00</published><updated>2008-08-01T11:01:13.082+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PeopleCode For Loop'/><title type='text'>For Loop Gotcha</title><content type='html'>From a recent email from a collegue.  It seems that &lt;span style="font-style:italic;"&gt;For&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/span&gt; loops only evaluate the conditions once, when the loop is entered:&lt;br /&gt;&lt;br /&gt;Hi all,&lt;br /&gt;&lt;br /&gt;I have just encountered an ‘interesting’ property of for loops.&lt;br /&gt;&lt;br /&gt;It appears that they hard-code the number that they loop through until, and there doesn’t seem to be any way to affect this number.&lt;br /&gt;&lt;br /&gt;I.e. If you have a rowset and are looping through it via a for loop - &amp;I = 1 to &amp;rowset.activerowcount, and you add a row to the rowset, the for loop will only go through the original number of rows – the added row will not be part of the &amp;rowset.activerowcount of the loop. (If there were originally 10 rows in the rowset, and I add another 5 rows to the rowset as part of the for loop, &amp;I will only ever get to 10 – not 15).&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;If you wish to loop through a rowset (or any variable number loops) you should use a while or a repeat loop, as the conditions &lt;span style="font-weight:bold;"&gt;are re-evaluated&lt;/span&gt; each time the loop comes to the conditional part (the top of the while statement, and the until of the repeat statement).&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Hope that helps people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-333730903003413927?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/333730903003413927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=333730903003413927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/333730903003413927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/333730903003413927'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/08/for-loop-gotcha.html' title='For Loop Gotcha'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-399289237443833209</id><published>2008-07-15T13:08:00.003+10:00</published><updated>2008-07-15T13:36:37.648+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle SQL Differences Compare'/><title type='text'>Easy Compare Differences in Tables</title><content type='html'>SELECT * FROM TABLE_A&lt;br /&gt;MINUS&lt;br /&gt;SELECT * FROM TABLE_B&lt;br /&gt;&lt;br /&gt;This can be expanded out to include the actual rows that are different between the two tables, or missing:&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: Consolas, "Courier New", Courier, Monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; (&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;&lt;br /&gt;  &lt;span class="str"&gt;'T906_TIME_CODE'&lt;/span&gt; &lt;span class="kwrd"&gt;AS&lt;/span&gt; TABLE_NAME&lt;br /&gt;, &lt;span class="str"&gt;'@AURPREP'&lt;/span&gt; &lt;span class="kwrd"&gt;AS&lt;/span&gt; DATABASE_NAME&lt;br /&gt;,     DECODE( &lt;span class="rem"&gt;-- Check if rows are different or missing.  Missing if no row found with matching keys.&lt;/span&gt;&lt;br /&gt;        (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; 1 &lt;span class="kwrd"&gt;FROM&lt;/span&gt; T906_TIME_CODE B&lt;br /&gt;        &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; NVL(B.T906F370_TRAN_CODE_TERM, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F370_TRAN_CODE_TERM, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F005_AWARD_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F005_AWARD_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F010_TIME_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F010_TIME_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F075_COSTING_ACCOUNT, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F075_COSTING_ACCOUNT, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F310_ACCOUNT, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F310_ACCOUNT, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F074_PC, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F074_PC, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F020_LEAVE_TYPE_AWARD, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F020_LEAVE_TYPE_AWARD, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F025_LEAVE_TYPE_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F025_LEAVE_TYPE_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F060_SECURITY_TASK, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F060_SECURITY_TASK, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        )    , 1, &lt;span class="str"&gt;'DIFFERENCES'&lt;/span&gt;&lt;br /&gt;    , &lt;span class="str"&gt;'MISSING IN CURRENT'&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; STATUS&lt;br /&gt;, A.*&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt;&lt;br /&gt;    (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; T906_TIME_CODE@AURPREP&lt;br /&gt;    MINUS&lt;br /&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; T906_TIME_CODE) A&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;UNION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;&lt;br /&gt;  &lt;span class="str"&gt;'T906_TIME_CODE'&lt;/span&gt; &lt;span class="kwrd"&gt;AS&lt;/span&gt; TABLE_NAME&lt;br /&gt;, &lt;span class="str"&gt;'CURRENT'&lt;/span&gt; &lt;span class="kwrd"&gt;AS&lt;/span&gt; DATABASE_NAME&lt;br /&gt;,     DECODE( &lt;span class="rem"&gt;-- Check if rows are different or missing.  Missing if no row found with matching keys.&lt;/span&gt;&lt;br /&gt;        (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; 1 &lt;span class="kwrd"&gt;FROM&lt;/span&gt; T906_TIME_CODE@AURPREP B&lt;br /&gt;        &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; NVL(B.T906F370_TRAN_CODE_TERM, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F370_TRAN_CODE_TERM, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F005_AWARD_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F005_AWARD_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F010_TIME_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F010_TIME_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F075_COSTING_ACCOUNT, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F075_COSTING_ACCOUNT, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F310_ACCOUNT, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F310_ACCOUNT, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F074_PC, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F074_PC, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F020_LEAVE_TYPE_AWARD, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F020_LEAVE_TYPE_AWARD, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F025_LEAVE_TYPE_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F025_LEAVE_TYPE_CODE, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;AND&lt;/span&gt; NVL(B.T906F060_SECURITY_TASK, &lt;span class="str"&gt;'X'&lt;/span&gt;) = NVL(A.T906F060_SECURITY_TASK, &lt;span class="str"&gt;'X'&lt;/span&gt;)&lt;br /&gt;        )    , 1, &lt;span class="str"&gt;'DIFFERENCES'&lt;/span&gt;&lt;br /&gt;    , &lt;span class="str"&gt;'MISSING IN @AURPREP'&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; STATUS&lt;br /&gt;, A.*&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt;&lt;br /&gt;    (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; T906_TIME_CODE&lt;br /&gt;    MINUS&lt;br /&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; T906_TIME_CODE@AURPREP) A&lt;br /&gt;&lt;br /&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; &lt;span class="rem"&gt;-- (keys)&lt;/span&gt;&lt;br /&gt;  T906F370_TRAN_CODE_TERM&lt;br /&gt;, T906F005_AWARD_CODE&lt;br /&gt;, T906F010_TIME_CODE&lt;br /&gt;, T906F075_COSTING_ACCOUNT&lt;br /&gt;, T906F310_ACCOUNT&lt;br /&gt;, T906F074_PC&lt;br /&gt;, T906F020_LEAVE_TYPE_AWARD&lt;br /&gt;, T906F025_LEAVE_TYPE_CODE&lt;br /&gt;, T906F060_SECURITY_TASK&lt;br /&gt;, 2&lt;br /&gt;;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-399289237443833209?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/399289237443833209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=399289237443833209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/399289237443833209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/399289237443833209'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/07/easy-compare-differences-in-tables.html' title='Easy Compare Differences in Tables'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-2593510949400491751</id><published>2008-07-14T17:26:00.001+10:00</published><updated>2008-07-14T17:26:42.954+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PL/SQL Array'/><title type='text'>PL/SQL Array example</title><content type='html'>&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: Consolas, "Courier New", Courier, Monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;declare&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    type table_list &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; &lt;span class="kwrd"&gt;of&lt;/span&gt; &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(128) &lt;span class="kwrd"&gt;index&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; binary_integer;&lt;br /&gt;    tabs table_list;&lt;br /&gt;    i number;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    tabs(1) := &lt;span class="str"&gt;'aaa'&lt;/span&gt;;&lt;br /&gt;    tabs(2) := &lt;span class="str"&gt;'bbb'&lt;/span&gt;;&lt;br /&gt;    tabs(3) := &lt;span class="str"&gt;'ccc'&lt;/span&gt;;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;for&lt;/span&gt; i &lt;span class="kwrd"&gt;in&lt;/span&gt; 1..3&lt;br /&gt;    loop&lt;br /&gt;        dbms_output.put_line(tabs(i));&lt;br /&gt;    &lt;span class="kwrd"&gt;end&lt;/span&gt; loop;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;end&lt;/span&gt;;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-2593510949400491751?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/2593510949400491751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=2593510949400491751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2593510949400491751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/2593510949400491751'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/07/plsql-array-example.html' title='PL/SQL Array example'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3665440926689519549</id><published>2008-07-14T16:10:00.002+10:00</published><updated>2008-07-14T16:13:53.083+10:00</updated><title type='text'>Simple Select and Loop in PL/SQL</title><content type='html'>Simple example of using PL/SQL to select and loop through a cursor.  &lt;br /&gt;&lt;strong&gt;Note: &lt;/strong&gt;Results are output to the output window.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: Consolas, "Courier New", Courier, Monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;OR&lt;/span&gt; REPLACE &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; test(p_table_name &lt;span class="kwrd"&gt;in&lt;/span&gt; user_tables.table_name%type) &lt;span class="kwrd"&gt;IS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    TYPE ref_cursor &lt;span class="kwrd"&gt;IS&lt;/span&gt; &lt;span class="kwrd"&gt;REF&lt;/span&gt; &lt;span class="kwrd"&gt;CURSOR&lt;/span&gt;;&lt;br /&gt;    l_cursor        ref_cursor;&lt;br /&gt;&lt;br /&gt;    v_query         varchar2(5000);&lt;br /&gt;    v_name          varchar2(64);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;    v_query := &lt;span class="str"&gt;'select T120F005_COST_CATEGORY_CODE from '&lt;/span&gt; || p_table_name;&lt;br /&gt;    &lt;span class="kwrd"&gt;OPEN&lt;/span&gt; l_cursor &lt;span class="kwrd"&gt;FOR&lt;/span&gt; v_query;&lt;br /&gt;    LOOP&lt;br /&gt;        &lt;span class="kwrd"&gt;FETCH&lt;/span&gt; l_cursor &lt;span class="kwrd"&gt;INTO&lt;/span&gt; v_name;&lt;br /&gt;        &lt;span class="kwrd"&gt;EXIT&lt;/span&gt; &lt;span class="kwrd"&gt;WHEN&lt;/span&gt; l_cursor%NOTFOUND;&lt;br /&gt;        dbms_output.put_line(&lt;span class="str"&gt;'Category Code: '&lt;/span&gt; || v_name);&lt;br /&gt;    &lt;span class="kwrd"&gt;END&lt;/span&gt; LOOP;&lt;br /&gt;    &lt;span class="kwrd"&gt;CLOSE&lt;/span&gt; l_cursor;&lt;br /&gt;&lt;span class="kwrd"&gt;END&lt;/span&gt;;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;-- Test.&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;EXEC&lt;/span&gt; test(&lt;span class="str"&gt;'T120_COSTING_CATEGORY'&lt;/span&gt;);&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3665440926689519549?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3665440926689519549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3665440926689519549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3665440926689519549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3665440926689519549'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/07/simple-select-and-loop-in-plsql.html' title='Simple Select and Loop in PL/SQL'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3757916791120877319</id><published>2008-06-06T13:38:00.001+10:00</published><updated>2008-06-06T13:39:21.618+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PS access he90ps'/><title type='text'>Access to HE90PS PS</title><content type='html'>(little note to self)&lt;br /&gt;   &lt;br /&gt;    GU_DEVELOPER_BSS_D0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3757916791120877319?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3757916791120877319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3757916791120877319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3757916791120877319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3757916791120877319'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/06/access-to-he90ps-ps.html' title='Access to HE90PS PS'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4448551348643991855</id><published>2008-05-27T14:11:00.001+10:00</published><updated>2008-05-27T14:12:05.819+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Keys key Oracle SQL table record'/><title type='text'>Viewing Keys (indexes) at Oracle Level</title><content type='html'>select * from system.dba_ind_columns where table_name='&lt;span style="font-style: italic;"&gt;ps_table_name&lt;/span&gt;';&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4448551348643991855?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4448551348643991855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4448551348643991855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4448551348643991855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4448551348643991855'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/05/viewing-keys-indexes-at-oracle-level.html' title='Viewing Keys (indexes) at Oracle Level'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6392459498667557694</id><published>2008-05-23T12:24:00.003+10:00</published><updated>2008-05-23T12:26:12.058+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Engine App Trace Tracing'/><title type='text'>Application Engine Tracing</title><content type='html'>You can turn on tracing for a distinct Application Engine process by appending AE parameters.  Append parameter "-TRACE 3" to enable the tracing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6392459498667557694?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6392459498667557694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6392459498667557694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6392459498667557694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6392459498667557694'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/05/application-engine-tracing.html' title='Application Engine Tracing'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1676122708192373520</id><published>2008-04-11T14:41:00.001+10:00</published><updated>2008-04-11T14:42:33.211+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle tune sql 10'/><title type='text'>Oracle 10</title><content type='html'>From email:&lt;br /&gt;&lt;br /&gt;Oracle (since version 8 ? ) has been recommending to all that we move toward the Cost Based Optimizer (CBO).  Prior to this Oracle used (and still can use) the RULE based Optimizer, which pretty much just uses predicate logic and knowledge of indexes to do its job.  (Also, the order of tables in the FROM clause is important, and the order of the WHERE clauses)&lt;br /&gt;&lt;br /&gt;The CBO attempts to come up with the cheapest row access plan based on the actual cost (CPU and IO) of the plan.  To do this, Oracle needs accurate statistics on the tables and indexes involved.  These statistics are gathered using the Oracle supplied PLSQL procedures within the DBMS_STATS package.  These procedures gather a bunch of different information about the tables and indexes, and can also gather histogram information, which can be invaluable on (mainly indexed) columns where there is highly skewed data.  Stats gathering is becoming more automagic as time goes on.  Everytime Oracle release a new version, there are new and improved auto options for stats gathering.   there is also the possibility (we are not doing this presently) of gathering "system stats" as well.  These are separate to the data object stats, and must be gathered by monitoring a live system.  These stats attempt to place real time values on IO based on system load.  If these are available, the CBO correlates its IO estimates with these real time estimates.&lt;br /&gt;&lt;br /&gt;The CBO is not perfect though, and occasionally it will choose a less than optimal access path.  This happens mainly because stats usually contain imprecise estimates made during stats gathering.  It is possible to collect complete and accurate stats, but this is extremely expensive.  To give you an example, it takes over 30 hours to gather stats in HE90U5 (using the auto options, which will estimate some things).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1676122708192373520?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1676122708192373520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1676122708192373520' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1676122708192373520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1676122708192373520'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/04/oracle-10.html' title='Oracle 10'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1843445375687724064</id><published>2008-04-09T09:01:00.000+10:00</published><updated>2008-04-09T09:02:16.019+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='portal navigation nav structure sql'/><title type='text'>Portal Navigation Structure</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;select t.portal_name, t.portal_reftype, LPAD (' ', 10 * (LEVEL - 1)) || t.portal_objname as portal_objname, LPAD (' ', 10 * (LEVEL - 1)) || t.portal_label as portal_label, t.portal_ispublic, t.portal_seq_num, t.lastupdoprid, level lev, t.portal_urltext&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;from sysadm.psprsmdefn t&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;where t.portal_name = 'EMPLOYEE'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;start with t.portal_prntobjname = 'PORTAL_ROOT_OBJECT'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;CONNECT BY PRIOR t.portal_objname = t.portal_prntobjname and PRIOR t.portal_name = t.portal_name and PRIOR t.portal_reftype = 'F';&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1843445375687724064?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1843445375687724064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1843445375687724064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1843445375687724064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1843445375687724064'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/04/portal-navigation-structure.html' title='Portal Navigation Structure'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-7721369322926950555</id><published>2008-02-28T18:08:00.001+10:00</published><updated>2008-02-28T18:13:20.164+10:00</updated><title type='text'>Impact List for Projects</title><content type='html'>&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: x-small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: Consolas, "Courier New", Courier, Monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;-- 1. Copy the results&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;-- 2. Paste into Word then: Table/Convert/Text to Table...&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;-- 3. You may need copy and paste formatting from other cells.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;define projectName = &lt;span class="str"&gt;'GUFNGL018'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--&lt;span class="kwrd"&gt;select&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;, type, &lt;span class="str"&gt;' '&lt;/span&gt;, &lt;span class="str"&gt;'New'&lt;/span&gt;, &lt;span class="str"&gt;'Easy'&lt;/span&gt;, 0, 0, &lt;span class="str"&gt;' '&lt;/span&gt;, &lt;span class="str"&gt;' '&lt;/span&gt; &lt;span class="kwrd"&gt;from&lt;/span&gt; (&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; (&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;&lt;br /&gt;a.projectname,&lt;br /&gt;A.OBJECTVALUE1 || decode(A.OBJECTVALUE2,&lt;span class="str"&gt;' '&lt;/span&gt;,&lt;span class="str"&gt;''&lt;/span&gt;,&lt;span class="str"&gt;'.'&lt;/span&gt;||A.OBJECTVALUE2) || decode(A.OBJECTVALUE3,&lt;span class="str"&gt;' '&lt;/span&gt;,&lt;span class="str"&gt;''&lt;/span&gt;,&lt;span class="str"&gt;'.'&lt;/span&gt;)|| A.OBJECTVALUE3 || decode(A.OBJECTVALUE4,&lt;span class="str"&gt;' '&lt;/span&gt;,&lt;span class="str"&gt;''&lt;/span&gt;,&lt;span class="str"&gt;'.'&lt;/span&gt;) || A.OBJECTVALUE4 &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;,&lt;br /&gt;decode(a.objecttype,&lt;br /&gt;&lt;span class="str"&gt;'0'&lt;/span&gt;, &lt;span class="str"&gt;'Record'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'1'&lt;/span&gt;, &lt;span class="str"&gt;'Index'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'2'&lt;/span&gt;, &lt;span class="str"&gt;'Field'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'3'&lt;/span&gt;, &lt;span class="str"&gt;'Field Format'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'4'&lt;/span&gt;, &lt;span class="str"&gt;'Translate value'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'5'&lt;/span&gt;, &lt;span class="str"&gt;'Page'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'6'&lt;/span&gt;, &lt;span class="str"&gt;'Menu'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'7'&lt;/span&gt;, &lt;span class="str"&gt;'Component'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'8'&lt;/span&gt;, &lt;span class="str"&gt;'Record Peoplecode'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'9'&lt;/span&gt;, &lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'10'&lt;/span&gt;,&lt;span class="str"&gt;'Query'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'11'&lt;/span&gt;,&lt;span class="str"&gt;'Tree Structure'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'12'&lt;/span&gt;,&lt;span class="str"&gt;'Tree'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'13'&lt;/span&gt;,&lt;span class="str"&gt;'Access Group'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'14'&lt;/span&gt;,&lt;span class="str"&gt;'Colours'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'15'&lt;/span&gt;,&lt;span class="str"&gt;'Style'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'16'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'17'&lt;/span&gt;,&lt;span class="str"&gt;'Business Processes'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'18'&lt;/span&gt;,&lt;span class="str"&gt;'Activities'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'19'&lt;/span&gt;,&lt;span class="str"&gt;'Roles'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'20'&lt;/span&gt;,&lt;span class="str"&gt;'Process Defintions'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'21'&lt;/span&gt;,&lt;span class="str"&gt;'Server Definition'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'22'&lt;/span&gt;,&lt;span class="str"&gt;'Process Type Definitions'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'23'&lt;/span&gt;,&lt;span class="str"&gt;'Job Definitions'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'24'&lt;/span&gt;,&lt;span class="str"&gt;'Recurrence Definition'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'25'&lt;/span&gt;,&lt;span class="str"&gt;'Message Catalog Entries'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'26'&lt;/span&gt;,&lt;span class="str"&gt;'Dimensions'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'27'&lt;/span&gt;,&lt;span class="str"&gt;'Cube Definitions'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'28'&lt;/span&gt;,&lt;span class="str"&gt;'Cube Instance Definitions'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'29'&lt;/span&gt;,&lt;span class="str"&gt;'Business Interlink'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'30'&lt;/span&gt;,&lt;span class="str"&gt;'Record SQL'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'31'&lt;/span&gt;,&lt;span class="str"&gt;'File Layout Definitions'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'32'&lt;/span&gt;,&lt;span class="str"&gt;'Component Interface'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'33'&lt;/span&gt;,&lt;span class="str"&gt;'Application Engine Programs'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'34'&lt;/span&gt;,&lt;span class="str"&gt;'Application Engine Sections'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'35'&lt;/span&gt;,&lt;span class="str"&gt;'Message Node'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'36'&lt;/span&gt;,&lt;span class="str"&gt;'Message Channels'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'37'&lt;/span&gt;,&lt;span class="str"&gt;'Messages'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'38'&lt;/span&gt;,&lt;span class="str"&gt;'Approval Rule Sets'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'39'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'40'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'41'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'42'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'43'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'44'&lt;/span&gt;,&lt;span class="str"&gt;'Page Peoplecode'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'45'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'46'&lt;/span&gt;,&lt;span class="str"&gt;'Component Peoplecode'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'47'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'48'&lt;/span&gt;,&lt;span class="str"&gt;'Component Rec Fld Peoplecode'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'49'&lt;/span&gt;,&lt;span class="str"&gt;'Images'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'50'&lt;/span&gt;,&lt;span class="str"&gt;'Style Sheet'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'51'&lt;/span&gt;,&lt;span class="str"&gt;'HTML'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'52'&lt;/span&gt;,&lt;span class="str"&gt;'File Reference'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'53'&lt;/span&gt;,&lt;span class="str"&gt;'Permission Lists'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'54'&lt;/span&gt;,&lt;span class="str"&gt;'Portal Registry Definitions'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'55'&lt;/span&gt;,&lt;span class="str"&gt;'Portal Registry Structures'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'56'&lt;/span&gt;,&lt;span class="str"&gt;'URL Definition'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'57'&lt;/span&gt;,&lt;span class="str"&gt;'Application Packages'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'58'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'59'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'60'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'61'&lt;/span&gt;,&lt;span class="str"&gt;'Archive Template'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'62'&lt;/span&gt;,&lt;span class="str"&gt;'Unknown Object Type'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'63'&lt;/span&gt;,&lt;span class="str"&gt;'Portal registry User Favourites'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'64'&lt;/span&gt;,&lt;span class="str"&gt;'Mobile page'&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'PeopleSoft are being smart again with - '&lt;/span&gt; || a.objecttype ) &lt;span class="kwrd"&gt;as&lt;/span&gt; Type,&lt;br /&gt;decode(UPGRADEACTION,0,&lt;span class="str"&gt;'Copy'&lt;/span&gt;,1,&lt;span class="str"&gt;'Delete'&lt;/span&gt;,2,&lt;span class="str"&gt;'Manual'&lt;/span&gt;,3,&lt;span class="str"&gt;'Copy Properties'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;Action&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;from&lt;/span&gt; sysadm.PSPROJECTITEM A&lt;br /&gt;&lt;span class="kwrd"&gt;where&lt;/span&gt; a.objecttype &amp;lt;&amp;gt; &lt;span class="str"&gt;'52'&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;and&lt;/span&gt; &lt;span class="kwrd"&gt;not&lt;/span&gt; (objecttype=0 &lt;span class="kwrd"&gt;and&lt;/span&gt; objectid2 = 2)&lt;br /&gt;&lt;span class="kwrd"&gt;and&lt;/span&gt; &lt;span class="kwrd"&gt;not&lt;/span&gt; (objecttype=2 &lt;span class="kwrd"&gt;and&lt;/span&gt; objectid2 = 102)&lt;br /&gt;&lt;span class="kwrd"&gt;union&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;&lt;br /&gt;a.projectname,&lt;br /&gt;decode(A.OBJECTVALUE2,&lt;span class="str"&gt;' '&lt;/span&gt;,&lt;span class="str"&gt;''&lt;/span&gt;,A.OBJECTVALUE2) || decode(A.OBJECTVALUE1,&lt;span class="str"&gt;' '&lt;/span&gt;,&lt;span class="str"&gt;''&lt;/span&gt;,A.OBJECTVALUE1) &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;,&lt;br /&gt;&lt;span class="str"&gt;'File Reference'&lt;/span&gt; &lt;span class="kwrd"&gt;as&lt;/span&gt; Type,&lt;br /&gt;decode(UPGRADEACTION,0,&lt;span class="str"&gt;'Copy'&lt;/span&gt;,1,&lt;span class="str"&gt;'Delete'&lt;/span&gt;,2,&lt;span class="str"&gt;'Manual'&lt;/span&gt;,3,&lt;span class="str"&gt;'Copy Properties'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;Action&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;from&lt;/span&gt; sysadm.PSPROJECTITEM A&lt;br /&gt;&lt;span class="kwrd"&gt;where&lt;/span&gt; a.objecttype = &lt;span class="str"&gt;'52'&lt;/span&gt;&lt;br /&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;where&lt;/span&gt; projectname &lt;span class="kwrd"&gt;like&lt;/span&gt; &amp;amp;projectName&lt;br /&gt;--&lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; 2,1&lt;br /&gt;&lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; 3,2&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-7721369322926950555?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/7721369322926950555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=7721369322926950555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7721369322926950555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7721369322926950555'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/02/impact-list-for-projects.html' title='Impact List for Projects'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-7245087661390143570</id><published>2008-02-13T14:05:00.009+10:00</published><updated>2008-09-11T10:53:17.369+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQR RDS Publish Report Manager App Engine'/><title type='text'>Getting SQRs to Publish to the RDS/Report Manager Everytime</title><content type='html'>See Also: &lt;a href="http://capital-it.blogspot.com/2008/09/publishing-files-to-report-managerrds.html"&gt;http://capital-it.blogspot.com/2008/09/publishing-files-to-report-managerrds.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In short if you want a process's output to appear in the RDS it has to end up residing in the same folder that is created for the process at run-time.&lt;br /&gt;&lt;br /&gt;For this example we are going to be producing a .ltr file using an SQR process called 'PROCNAME'.  In the end we want a file path like this, where 501 is the Process Instance number:&lt;br /&gt;&lt;span style=""&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;/opt/psoft8/HE900D9A/appserv/prcs/HE90D9A/log_output/SQR_PROCNAME_501/SQR_PROCNAME_501.LTR&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note that up to "log_output' is most likely going to be a system variable, set in something like setfile.sqc so it can be modified for each environment.&lt;br /&gt;&lt;br /&gt;Note that the folder name (SQR_PROCNAME_501) &lt;span style="font-weight: bold;"&gt;must &lt;/span&gt;be in this format, where 'SQR' is the Process Type, 'PROCNAME' is the Process Name and '501' is the Process Instance Number.&lt;br /&gt;&lt;br /&gt;The file name syntax is the same as the folder name (although at time of writing I think you may actually be able to get away with whatever file name you please).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update: &lt;/span&gt;It appears App Engines require the files to be in the strict format "AE_ProcName_ProcInstance.*" where * is an extension.  This was working when output type was Web/TXT.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The SQR code looks something like this:&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;#DEFINE FILEPREFIX    e:\psoft8\he900d9a\appserv\prcs\HE90D9A\log_output\&lt;br /&gt;&lt;br /&gt;! Folder&lt;br /&gt;Move '{FILEPREFIX}' to $fileName&lt;br /&gt;Concat 'SQR_PROCNAME_' with $fileName&lt;br /&gt;Concat $prcs_process_instance with $fileName&lt;br /&gt;Concat '\' with $fileName&lt;br /&gt;&lt;br /&gt;! File.&lt;br /&gt;Concat 'PROCNAME_' with $fileName&lt;br /&gt;Concat $prcs_process_instance with $fileName&lt;br /&gt;Concat '.LTR' with $fileName&lt;br /&gt;&lt;br /&gt;New-Report $fileName&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-7245087661390143570?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/7245087661390143570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=7245087661390143570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7245087661390143570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7245087661390143570'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/02/getting-sqrs-to-publish-to-rds.html' title='Getting SQRs to Publish to the RDS/Report Manager Everytime'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-5548580776677229339</id><published>2008-01-16T16:19:00.000+10:00</published><updated>2008-01-16T16:25:15.624+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql join null effdt outer'/><title type='text'>Using Outer Joins AND Effective Dated Logic</title><content type='html'>How can you use outer joins on a table and still use effective dated logic?  Something like this. &lt;br /&gt;&lt;br /&gt;Note that the outer join will either return no rows, and thus a NULL value for EFFDT, or it will return a date and subsequent effective dated logic can be used.&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;r /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: Consolas, "Courier New", Courier, Monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;AND&lt;/span&gt; C.BUSINESS_UNIT (+) = A.BUSINESS_UNIT&lt;br /&gt;&lt;span class="kwrd"&gt;AND&lt;/span&gt; C.COMMON_ID (+) = A.COMMON_ID&lt;br /&gt;&lt;span class="kwrd"&gt;AND&lt;/span&gt; C.SA_ID_TYPE (+) = A.SA_ID_TYPE&lt;br /&gt;&lt;span class="kwrd"&gt;AND&lt;/span&gt; C.ITEM_NBR_CHARGE (+) = A.ITEM_NBR&lt;br /&gt;&lt;span class="kwrd"&gt;AND&lt;/span&gt;&lt;br /&gt;   (&lt;span class="kwrd"&gt;NULL&lt;/span&gt; = C.EFFDT&lt;br /&gt;   &lt;span class="kwrd"&gt;OR&lt;/span&gt;&lt;br /&gt;       (C.EFFDT =&lt;br /&gt;           (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;MAX&lt;/span&gt;(C_ED.EFFDT)&lt;br /&gt;           &lt;span class="kwrd"&gt;FROM&lt;/span&gt; sysadm.ps_ITEM_XREF C_ED&lt;br /&gt;           &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; C_ED.BUSINESS_UNIT = C.BUSINESS_UNIT&lt;br /&gt;           &lt;span class="kwrd"&gt;AND&lt;/span&gt; C_ED.COMMON_ID = C.COMMON_ID&lt;br /&gt;           &lt;span class="kwrd"&gt;AND&lt;/span&gt; C_ED.SA_ID_TYPE = C.SA_ID_TYPE&lt;br /&gt;           &lt;span class="kwrd"&gt;AND&lt;/span&gt; C_ED.ITEM_NBR_CHARGE = C.ITEM_NBR_CHARGE&lt;br /&gt;           &lt;span class="kwrd"&gt;AND&lt;/span&gt; C_ED.ITEM_NBR_PAYMENT = C.ITEM_NBR_PAYMENT&lt;br /&gt;           &lt;span class="kwrd"&gt;AND&lt;/span&gt; C_ED.EFFDT &amp;lt;= SYSDATE)))&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-5548580776677229339?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/5548580776677229339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=5548580776677229339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5548580776677229339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/5548580776677229339'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/01/using-outer-joins-and-effective-dated.html' title='Using Outer Joins AND Effective Dated Logic'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-7730485519607733196</id><published>2008-01-10T14:49:00.000+10:00</published><updated>2008-01-10T15:03:05.094+10:00</updated><title type='text'>XML Publisher Example</title><content type='html'>Example of using PeopleCode to generate XML and then merge with a predefined RTF template.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;/* GUSAFN02 - HEUP Project, Michael Nitschke 27.11.2007 */&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;import PSXP_RPTDEFNMANAGER:*;&lt;br /&gt;import GU_EN_ENROLMENTS:*;&lt;br /&gt;&lt;br /&gt;Declare Function DeleteLocalFile PeopleCode PSXPFUNCLIB.FUNCLIB FieldFormula;&lt;br /&gt;Declare Function GetDirSeparator PeopleCode PSXPFUNCLIB.FUNCLIB FieldFormula;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;/* Function to populate a node based on given SQL. &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;   &amp;amp;node:     Create the node in the location you want and pass through to be populated.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;   &amp;amp;recName: Record that node data will be based on.  Must also match data structure returned from &amp;amp;sql.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;   &amp;amp;sql:     SQL that will populate &amp;amp;rec and the node. */&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Function AddNodeFromSQL(&amp;amp;node As XmlNode, &amp;amp;recName As &lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;string&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, &amp;amp;sqlName As &lt;/span&gt;&lt;span class="kwrd"  style="font-size:85%;"&gt;string&lt;/span&gt;&lt;span style="font-size:85%;"&gt;)&lt;br /&gt; Local Record &amp;amp;rec = CreateRecord(@(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"Record."&lt;/span&gt;&lt;span style="font-size:85%;"&gt; | &amp;amp;recName));&lt;br /&gt; Local SQL &amp;amp;sql = GetSQL(@(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"SQL."&lt;/span&gt;&lt;span style="font-size:85%;"&gt; | &amp;amp;sqlName), &amp;amp;emplid);&lt;br /&gt; While &amp;amp;sql.Fetch(&amp;amp;rec)&lt;br /&gt;    Local XmlNode &amp;amp;nodeRow = &amp;amp;node.AddElement(&amp;amp;node.NodeName | &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"Row"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;    For &amp;amp;f = 1 To &amp;amp;rec.FieldCount&lt;br /&gt;       Local XmlNode &amp;amp;nodeFld = &amp;amp;nodeRow.AddElement(&amp;amp;node.NodeName | &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"."&lt;/span&gt;&lt;span style="font-size:85%;"&gt; | &amp;amp;rec.GetField(&amp;amp;f).Name);&lt;br /&gt;       &amp;amp;nodeFld.NodeValue = &amp;amp;rec.GetField(&amp;amp;f).Value;&lt;br /&gt;    End-For;&lt;br /&gt; End-While;&lt;br /&gt;End-Function;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="rem"  style="font-size:85%;"&gt;/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;amp;emplid = %EmployeeId;&lt;br /&gt;Local PSXP_RPTDEFNMANAGER:ReportDefn &amp;amp;oRptDefn;&lt;br /&gt;Local XmlDoc &amp;amp;xmlDoc;&lt;br /&gt;&amp;amp;xmlDoc = CreateXmlDoc(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"&amp;lt;?xml version='1.0'?&amp;gt;&amp;lt;ACADEMIC_CHARGES/&amp;gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;/* Create header, config, programs, charges, unapplied charges and discounts xml elements, including data. */&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Local XmlNode &amp;amp;nodeHeader = &amp;amp;xmlDoc.DocumentElement.AddElement(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"Header"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;AddNodeFromSQL(&amp;amp;nodeHeader, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_HDR_DW"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_HDR"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;Local XmlNode &amp;amp;nodeConfig = &amp;amp;xmlDoc.DocumentElement.AddElement(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"Config"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;AddNodeFromSQL(&amp;amp;nodeConfig, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_CFG_DTL"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_CFG_DTL_AC"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;Local XmlNode &amp;amp;nodeProgram = &amp;amp;xmlDoc.DocumentElement.AddElement(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"Program"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;AddNodeFromSQL(&amp;amp;nodeProgram, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_PROG_DW"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_PROG"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;Local XmlNode &amp;amp;nodeCharges = &amp;amp;xmlDoc.DocumentElement.AddElement(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"Charges"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;AddNodeFromSQL(&amp;amp;nodeCharges, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_CHRG_DW"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_CHARGES"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;Local XmlNode &amp;amp;nodeChargesGST = &amp;amp;xmlDoc.DocumentElement.AddElement(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"ChargesGST"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;AddNodeFromSQL(&amp;amp;nodeChargesGST, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_CGST_DW"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_CHARGES_GST"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;Local XmlNode &amp;amp;nodeUnappliedCharges = &amp;amp;xmlDoc.DocumentElement.AddElement(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"UnappliedPayments"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;AddNodeFromSQL(&amp;amp;nodeUnappliedCharges, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_CHRG_DW"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_UNAPPLIED_PAYMENTS"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;Local XmlNode &amp;amp;nodeDiscounts = &amp;amp;xmlDoc.DocumentElement.AddElement(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"Discounts"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;AddNodeFromSQL(&amp;amp;nodeDiscounts, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_CHRG_DW"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_DISCOUNTS"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;Local XmlNode &amp;amp;nodeMessages = &amp;amp;xmlDoc.DocumentElement.AddElement(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"Messages"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;AddNodeFromSQL(&amp;amp;nodeMessages, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_MSG_DW"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_STMT_MESSAGES"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;/* Create report definition and connect to the generated XML document. */&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&amp;amp;rptDefn = create PSXP_RPTDEFNMANAGER:ReportDefn(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"GU_ACAD_CHRG"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;&amp;amp;rptDefn.Get();&lt;br /&gt;&amp;amp;rptDefn.SetRuntimeDataXMLDoc(&amp;amp;xmlDoc);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;/* Create output directories. */&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&amp;amp;sDirSep = GetDirSeparator();&lt;br /&gt;&amp;amp;RptOutputDir = GetEnv(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"PS_SERVDIR"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;) | &amp;amp;sDirSep | &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"files"&lt;/span&gt;&lt;span style="font-size:85%;"&gt; | &amp;amp;sDirSep | &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"XMLP"&lt;/span&gt;&lt;span style="font-size:85%;"&gt; | &amp;amp;sDirSep | UuidGen();&lt;br /&gt;&amp;amp;OutputDir = &amp;amp;RptOutputDir | &amp;amp;sDirSep | &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"RptInst"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;;&lt;br /&gt;&amp;amp;DataDir = &amp;amp;RptOutputDir | &amp;amp;sDirSep | &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;"Data"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;;&lt;br /&gt;CreateDirectory(&amp;amp;OutputDir, %FilePath_Absolute);&lt;br /&gt;CreateDirectory(&amp;amp;DataDir, %FilePath_Absolute);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;/* Process. */&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&amp;amp;rptDefn.OutDestination = &amp;amp;RptOutputDir;&lt;br /&gt;&amp;amp;rptDefn.ProcessReport(&lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;""&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, %Language_User, %Date, &lt;/span&gt;&lt;span class="str"  style="font-size:85%;"&gt;""&lt;/span&gt;&lt;span style="font-size:85%;"&gt;);&lt;br /&gt;CommitWork();&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;/* Display. */&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&amp;amp;rptDefn.DisplayOutput();&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" class="rem" &gt;/* Cleanup. */&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;DeleteLocalFile(&amp;amp;sOutputFile, %FilePath_Absolute);&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-7730485519607733196?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/7730485519607733196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=7730485519607733196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7730485519607733196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7730485519607733196'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/01/xml-publisher-example.html' title='XML Publisher Example'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4152088019016298416</id><published>2008-01-10T14:16:00.000+10:00</published><updated>2008-01-10T14:47:33.790+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='array peoplecode'/><title type='text'>Array example</title><content type='html'>Nice little example of using arrays in PeopleCode.  Probably a more elegant, 2 dimension solution but this works just fine.&lt;br /&gt;&lt;br /&gt;This example was required to handle overriding GL distribution by Elements, which are on level 3.  and element can appear on level 3 under many level 2 rows.  Code loops through &lt;span style="font-weight: bold;"&gt;all&lt;/span&gt; possible rows on level 3 and sums total for each unique Element found.  Must add to 100.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;font-size:78%;" class="rem"  &gt;/* &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;font-size:78%;" class="rem"  &gt;Check that sum of each given element, across all pin rows, adds to 100%. */&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;font-size:78%;" class="rem"  &gt;/* 2 arrays to hold all elements and sum of their percentages. */&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;amp;arrElements = CreateArray();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;amp;arrPercent = CreateArray();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;font-size:78%;" class="rem"  &gt;/* Populate the arrays. */&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Local Rowset &amp;amp;rsGP_GL_DIST_DTL = GetRowset(Scroll.GP_GL_DIST_DTL);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;For &amp;amp;i = 1 To &amp;amp;rsGP_GL_DIST_DTL.ActiveRowCount&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   Local Rowset &amp;amp;rsGP_GL_DIST_PIN = &amp;amp;rsGP_GL_DIST_DTL(&amp;amp;i).GetRowset(Scroll.GP_GL_DIST_PIN);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;font-size:78%;" class="rem"  &gt;/* Check there are actually any element rows (if one does they all do, vice-versa). Populate arrays if found.*/&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   If &amp;amp;rsGP_GL_DIST_PIN(1).GP_GL_DIST_PIN.PIN_NUM.Value = 0 Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;amp;hasElements = False;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;      Break;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;   Else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;amp;hasElements = True;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      For &amp;amp;j = 1 To &amp;amp;rsGP_GL_DIST_PIN.ActiveRowCount&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         &amp;amp;element = &amp;amp;rsGP_GL_DIST_PIN(&amp;amp;j).GP_PIN_DESCR_VW.DESCR.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         &amp;amp;percent = &amp;amp;rsGP_GL_DIST_PIN(&amp;amp;j).GP_GL_DIST_PIN.PCT_TO_ALLOCATE.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         &amp;amp;found = &amp;amp;arrElements.Find(&amp;amp;element);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         If &amp;amp;found = 0 Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &amp;amp;arrElements.Push(&amp;amp;element);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &amp;amp;arrPercent.Push(&amp;amp;percent);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         Else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &amp;amp;arrPercent [&amp;amp;found] = &amp;amp;arrPercent [&amp;amp;found] + &amp;amp;percent;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         End-If;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      End-For;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   End-If;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;End-For;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;font-size:78%;" class="rem"  &gt;/* Check for any elements that are &amp;lt;&amp;gt; 100% and advise with warning msg &amp;amp; highlighting the field. */&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;If &amp;amp;hasElements Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   For &amp;amp;k = 1 To &amp;amp;arrPercent.Len&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &amp;amp;err = False;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      If &amp;amp;arrPercent [&amp;amp;k] &amp;lt;&amp;gt; 100 Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         &amp;amp;err = True;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      End-If;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      For &amp;amp;i = 1 To &amp;amp;rsGP_GL_DIST_DTL.ActiveRowCount&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         &amp;amp;rsGP_GL_DIST_PIN = &amp;amp;rsGP_GL_DIST_DTL(&amp;amp;i).GetRowset(Scroll.GP_GL_DIST_PIN);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         For &amp;amp;j = 1 To &amp;amp;rsGP_GL_DIST_PIN.ActiveRowCount&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            If &amp;amp;rsGP_GL_DIST_PIN(&amp;amp;j).GP_PIN_DESCR_VW.DESCR.Value = &amp;amp;arrElements [&amp;amp;k] Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;               If &amp;amp;err Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  &amp;amp;rsGP_GL_DIST_PIN(&amp;amp;j).GP_GL_DIST_PIN.PCT_TO_ALLOCATE.SetCursorPos(%Page);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  &amp;amp;rsGP_GL_DIST_PIN(&amp;amp;j).GP_GL_DIST_PIN.PCT_TO_ALLOCATE.Style = &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:78%;" class="str"  &gt;"PSERROR"&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  Error &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:78%;" class="str"  &gt;"Sum percentages of Element '"&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt; | &amp;amp;arrElements [&amp;amp;k] | &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:78%;" class="str"  &gt;"' do not total 100%."&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;               Else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  &amp;amp;rsGP_GL_DIST_PIN(&amp;amp;j).GP_GL_DIST_PIN.PCT_TO_ALLOCATE.Style = &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:78%;" class="str"  &gt;"PSEDITBOX"&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;               End-If;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            End-If;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         End-For;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      End-For;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   End-For;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;End-If;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4152088019016298416?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4152088019016298416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4152088019016298416' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4152088019016298416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4152088019016298416'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2008/01/array-example.html' title='Array example'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4565301503771869428</id><published>2007-12-04T11:07:00.000+10:00</published><updated>2008-01-31T15:18:00.806+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Decode If Case'/><title type='text'>Decode, If, Case statements in SQL</title><content type='html'>Two examples of evaluating 2 values and returning a given value based on which is earlier/bigger:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;DECODE((SYSDATE - A.DUE_DT) - ABS(SYSDATE - A.DUE_DT), 0, 'OVERDUE', A.DUE_DT) AS DUE_DATE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CASE WHEN SYSDATE &gt; A.DUE_DT THEN 'OVERDUE' ELSE to_char(A.DUE_DT) END AS DUE_DATE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Both do the same thing.&lt;br /&gt;&lt;br /&gt;Related links:&lt;br /&gt;&lt;a href="http://www.4guysfromrolla.com/webtech/102704-1.shtml"&gt;&lt;/a&gt;&lt;a&gt;http://www.4guysfromrolla.com/webtech/102704-1.shtml&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlteam.com/article/the-case-for-case"&gt;http://www.sqlteam.com/article/the-case-for-case&lt;/a&gt;&lt;a href="http://www.4guysfromrolla.com/webtech/102704-1.shtml"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4565301503771869428?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4565301503771869428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4565301503771869428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4565301503771869428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4565301503771869428'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/12/decode-if-case-statements-in-sql.html' title='Decode, If, Case statements in SQL'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8946776337233636420</id><published>2007-11-08T10:09:00.001+10:00</published><updated>2008-01-10T15:04:32.957+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQR Parameters Process'/><title type='text'>Passing Parameters to SQR via the Process</title><content type='html'>&lt;span style="font-style:italic;"&gt;10.01.2008, update: seems Blogger has lost the uplaoded images for this post.  Perhaps they will come back?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Update the Parameter List of your process definition.  I this case I have used a Record.Field value.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://4.bp.blogspot.com/_85PwLFr_MR4/RzJWmaIWq-I/AAAAAAAAAEw/MUXu8-FacQ0/s400/1.gif" alt="" id="BLOGGER_PHOTO_ID_5130258143377796066" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PeopleCode to set the value of the Field (GU_GRDLPS_RC_WK.DESCR).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_85PwLFr_MR4/RzJYB6IWq_I/AAAAAAAAAE4/0GnCysDZHgc/s400/2.gif" alt="" id="BLOGGER_PHOTO_ID_5130259715335826418" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In your SQR you pick up the parameter by using the Input statement:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;input $procAcadOrg 'Academic Organisation to distribute report to: (Optional, Press ENTER to continue)'&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8946776337233636420?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8946776337233636420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8946776337233636420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8946776337233636420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8946776337233636420'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/11/passing-parameters-to-sqr-via-process_08.html' title='Passing Parameters to SQR via the Process'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_85PwLFr_MR4/RzJWmaIWq-I/AAAAAAAAAEw/MUXu8-FacQ0/s72-c/1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-1437895913591769106</id><published>2007-10-17T15:47:00.003+10:00</published><updated>2008-09-11T17:08:52.404+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Engine suspended crash error ae'/><title type='text'>Errors running Application Engines</title><content type='html'>If you get the following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:georgia;"&gt;"Message:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;All Processing Suspended: Restart OPRID=S390765, RUNID=31-01-03112240, PI=2988 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;A pending process was found for the current Operator id, Run Control id, and Application Engine Program.  This process either is running now or has abended.  Please restart the pending process if it has abended, and allow it to run to completion, before submitting a new process request."&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...you need to cleanup the dead rows in sysadm.ps_&lt;span style="font-weight: bold;"&gt;aeruncontrol&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;delete from ps_aeruncontrol&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;where oprid = '&lt;span style="font-style: italic;"&gt;UserID&lt;/span&gt;';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;commit;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-1437895913591769106?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/1437895913591769106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=1437895913591769106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1437895913591769106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/1437895913591769106'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/10/errors-running-application-engines.html' title='Errors running Application Engines'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-8944419451468408439</id><published>2007-10-17T14:52:00.000+10:00</published><updated>2007-10-17T14:54:54.115+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Grid grids excel download ie'/><title type='text'>Downloading from Grids - IE settings</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Problem:&lt;/span&gt;&lt;br /&gt;We found a problem when tring to download to spreadsheets from grids.  IE wouldn't open the spreadsheet, just refreshed a few times and then nothing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Resolution:&lt;/span&gt;&lt;br /&gt;Tools/Internet Options/&lt;br /&gt;Security/Custom Level/&lt;br /&gt;Downloading/Automatic prompting for downloads - tick enable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-8944419451468408439?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/8944419451468408439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=8944419451468408439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8944419451468408439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/8944419451468408439'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/10/downloading-from-grids-ie-settings.html' title='Downloading from Grids - IE settings'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-9124036946761756225</id><published>2007-10-17T10:44:00.001+10:00</published><updated>2009-01-29T16:48:27.364+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSV SQR'/><title type='text'>Bad CSV layout from SQR</title><content type='html'>I found that some CSVs had layout problems where the file being produced contained unwanted line breaks.  This of course mucked up the layout when the CSV was viewed in Excel or whatever.&lt;br /&gt;&lt;br /&gt;I added the following to the top of the SQR:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;begin-setup&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   page-size 79 600&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end-setup&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The page-size command sets the number of rows and columns, respectively (rows weren't an issue).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Edit: In latest version of SQR use the following:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   Declare-Layout my-layout&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     paper-size=(a4)       &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     orientation=landscape&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;     &lt;span class="Apple-style-span" style="font-style: italic;"&gt;MAX-COLUMNS=600&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   End-Declare&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;                                &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   Declare-Report THIS_REPORT&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;      Printer-Type=POSTSCRIPT&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;      LayOut=my-layout&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   End-Declare    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-9124036946761756225?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/9124036946761756225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=9124036946761756225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/9124036946761756225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/9124036946761756225'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/10/bad-csv-layout-from-sqr.html' title='Bad CSV layout from SQR'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-3748743309733588147</id><published>2007-10-10T11:38:00.000+10:00</published><updated>2007-10-10T11:48:21.278+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prompts'/><title type='text'>Prompts driven by other prompts</title><content type='html'>Sometimes you want to be able to filter the values returned by a prompt based on a value you have entered on another prompt on the page.  For example you have selected 'Australia' in the first prompt and now you want the second prompt to only list states for that country.&lt;br /&gt;&lt;br /&gt;This example uses Pay Groups and Run Types:&lt;br /&gt;When the user has selected a 'Pay Group' the prompt for 'Run Type' will only return run types that are in that pay group:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_85PwLFr_MR4/RwwtzOD5snI/AAAAAAAAAEA/sjYCLEe6lQ8/s1600-h/prompt01.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_85PwLFr_MR4/RwwtzOD5snI/AAAAAAAAAEA/sjYCLEe6lQ8/s320/prompt01.gif" alt="" id="BLOGGER_PHOTO_ID_5119517234384450162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The first record stores the values, in this case it has no keys.&lt;br /&gt;Note the key structure and list items on the two prompt records:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_85PwLFr_MR4/RwwuX-D5spI/AAAAAAAAAEQ/ehS6P7MOdws/s1600-h/prompt02.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_85PwLFr_MR4/RwwuX-D5spI/AAAAAAAAAEQ/ehS6P7MOdws/s400/prompt02.gif" alt="" id="BLOGGER_PHOTO_ID_5119517865744642706" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-3748743309733588147?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/3748743309733588147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=3748743309733588147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3748743309733588147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/3748743309733588147'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/10/prompts-driven-by-other-prompts.html' title='Prompts driven by other prompts'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_85PwLFr_MR4/RwwtzOD5snI/AAAAAAAAAEA/sjYCLEe6lQ8/s72-c/prompt01.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-7098124247620926052</id><published>2007-10-10T10:39:00.000+10:00</published><updated>2007-10-10T10:45:12.738+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Component Interface DoSaveNow'/><title type='text'>Component Interfaces - What they can't do.</title><content type='html'>The DoSaveNow() PeopleCode function does not trigger when run from a Component Interface.  There is no indication, error or warning.  There may be other misleading errors or warnings caused by the DoSaveNow() not being triggered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-7098124247620926052?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/7098124247620926052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=7098124247620926052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7098124247620926052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/7098124247620926052'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/10/component-interfaces-what-they-cant-do.html' title='Component Interfaces - What they can&apos;t do.'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6045562797298150052</id><published>2007-07-30T09:31:00.000+10:00</published><updated>2007-08-01T09:56:29.770+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lock'/><category scheme='http://www.blogger.com/atom/ns#' term='objects'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>SQL to lock all objects in a Project</title><content type='html'>How to lock all the objects in a project, very useful when migrating mega projects.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;INSERT INTO SYSADM.PSCHGCTLLOCK&lt;br /&gt;SELECT&lt;br /&gt; 'yourID'&lt;br /&gt;, A.OBJECTTYPE&lt;br /&gt;, A.OBJECTID1&lt;br /&gt;, A.OBJECTVALUE1&lt;br /&gt;, A.OBJECTID2&lt;br /&gt;, A.OBJECTVALUE2&lt;br /&gt;, A.OBJECTID3&lt;br /&gt;, A.OBJECTVALUE3&lt;br /&gt;, A.OBJECTID4&lt;br /&gt;, A.OBJECTVALUE4&lt;br /&gt;, SYSDATE&lt;br /&gt;, A.PROJECTNAME&lt;br /&gt;, ' '&lt;br /&gt;, ' '&lt;br /&gt;FROM SYSADM.PSPROJECTITEM A&lt;br /&gt;WHERE PROJECTNAME = 'projectName'&lt;br /&gt;AND NOT EXISTS&lt;br /&gt;   (SELECT 'X'&lt;br /&gt;   FROM SYSADM.PSCHGCTLLOCK B&lt;br /&gt;   WHERE B.OBJECTTYPE = A.OBJECTTYPE&lt;br /&gt;   AND B.OBJECTID1 = A.OBJECTID1&lt;br /&gt;   AND B.OBJECTVALUE1 = A.OBJECTVALUE1&lt;br /&gt;   AND B.OBJECTID2 = A.OBJECTID2&lt;br /&gt;   AND B.OBJECTVALUE2 = A.OBJECTVALUE2)&lt;br /&gt;AND OBJECTTYPE &lt;&gt; 30 -- (SQL for views)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6045562797298150052?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6045562797298150052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6045562797298150052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6045562797298150052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6045562797298150052'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/07/locking-all-objects-in-project.html' title='SQL to lock all objects in a Project'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4455919168100958698</id><published>2007-07-30T08:49:00.002+10:00</published><updated>2008-08-19T09:50:51.761+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Component'/><category scheme='http://www.blogger.com/atom/ns#' term='Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='Registry'/><title type='text'>Finding a Component in the Portal Registry</title><content type='html'>define Component_Name = 'GU_EX_SCH_DOWNLOAD';&lt;br /&gt;&lt;br /&gt;select distinct LEVEL, PORTAL_LABEL&lt;br /&gt;from PSPRSMDEFN&lt;br /&gt;where PORTAL_LABEL &lt;&gt; 'Root'&lt;br /&gt;connect by PORTAL_OBJNAME = prior PORTAL_PRNTOBJNAME&lt;br /&gt;start with PORTAL_URI_SEG2 = &amp;amp;Component_Name&lt;br /&gt;order by LEVEL desc;&lt;br /&gt;&lt;br /&gt;undefine Component_Name;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4455919168100958698?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4455919168100958698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4455919168100958698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4455919168100958698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4455919168100958698'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/07/finding-component-in-portal-registry.html' title='Finding a Component in the Portal Registry'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-6758085570710511750</id><published>2007-07-13T16:51:00.000+10:00</published><updated>2007-07-13T17:00:47.328+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PeopleCode'/><category scheme='http://www.blogger.com/atom/ns#' term='DoModalComponent'/><category scheme='http://www.blogger.com/atom/ns#' term='Function'/><title type='text'>Fun with the DoModalComponent function.</title><content type='html'>The example given in PeopleBooks is misleading.  Read the description carefully -&lt;br /&gt;&lt;br /&gt;The first three parameters are straighforward, and can be drag-dropped from the menu definition in your project (shortcut hint there).&lt;br /&gt;&lt;br /&gt;The fourth parameter is a little different:&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellspacing="2" width="100%"&gt;&lt;tbody valign="top"&gt;&lt;tr&gt;&lt;td&gt; &lt;p class="TERM"&gt;&lt;i&gt;component_item_name&lt;/i&gt; &lt;/p&gt;&lt;/td&gt; &lt;td&gt; &lt;p class="TERM"&gt;The component item name of the page to be displayed on top of the  modal component when it displays. The component item name is specified in the  component definition. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Note "&lt;span style="font-style: italic;"&gt;The component item name is specified in the component definition&lt;/span&gt;"?  Open up the component and find the page you want to navigate to.  &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;For this parameter use the page's "Item Name", not the "Page Name".&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;It's always a bit nasty when the example is misleading and the explanation slightly obscured, I mean who reads the doco really, really carefully?  ; )&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-6758085570710511750?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/6758085570710511750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=6758085570710511750' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6758085570710511750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/6758085570710511750'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/07/fun-with-domodalcomponent-function.html' title='Fun with the DoModalComponent function.'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-850454658165358339</id><published>2007-06-20T10:13:00.001+10:00</published><updated>2009-04-22T14:43:31.967+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sibling'/><category scheme='http://www.blogger.com/atom/ns#' term='PeopleCode'/><category scheme='http://www.blogger.com/atom/ns#' term='Field'/><category scheme='http://www.blogger.com/atom/ns#' term='Table'/><category scheme='http://www.blogger.com/atom/ns#' term='Synchronise'/><title type='text'>Synchronising Delivered &amp; Customised 1-1 tables</title><content type='html'>&lt;span style="font-weight: bold;"&gt;UPDATE (years later): I ask myself why not just use another scroll level below the delivered record/scroll containing the sibling record?  PeopleSoft will handle the inserts and updates automagically.&lt;br /&gt;&lt;br /&gt;Following is likely wrong, but left for reference.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Rather than add custom fields to a PeopleSoft delivered record it is better to create a new record with the same keys that will serve to store new, custom fields.  This table and the delivered table will have a 1-1 relationship and there will be less/no work for future upgrades.&lt;br /&gt;&lt;br /&gt;To display and synchronise the data on this new table a work record is used on the page.  The example below is using Griffith University (GU) records and delivered PS records.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Set default values&lt;/span&gt; on this derived record so that there will always be a row in the new table that matches the original table.  (Someone will try to join to the new table and have no data at some stage).  That is default the key values of the work record to those of the delivered record.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;RowInit PeopleCode&lt;/span&gt; (GU Work Rec.RI) displays the synchronised data on the Work Record:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;SQLExec("SELECT SOME_FIELD1, SOME_FIELD2 FROM GU_RECORD WHERE KEYFIELD1 = :1", PS_RECORD.KEYFIELD1.Value, GU_WORK_RECORD.SOME_FIELD1.Value);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;SavePostChange PeopleCode&lt;/span&gt; (Component.PS_RECORD.SPC) then synchronises the tables with a 1-1 relationship (updated 22.10.2007):&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Local Record &amp;amp;recGU_RECORD = CreateRecord(Record.GU_RECORD);&lt;br /&gt;&lt;br /&gt;/* Populate. */&lt;br /&gt;GetRecord(Record.GU_WORK_RECORD).CopyFieldsTo(&amp;amp;recGU_RECORD);&lt;br /&gt;GetRecord().CopyFieldsTo(&amp;amp;recGU_RECORD);&lt;br /&gt;&lt;br /&gt;/* Delete if required. */&lt;br /&gt;If GetRecord().IsDeleted Then&lt;br /&gt;  &amp;amp;recGU_RECORD.Delete();&lt;br /&gt;Else&lt;br /&gt;&lt;br /&gt;  /* Default (specific) values if required. */&lt;br /&gt;  If None(&amp;amp;recGU_RECORD.SOME_FIELD.Value) Then&lt;br /&gt;     &amp;amp;recGU_RECORD.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;GU_RECORD&lt;/span&gt;&lt;span style="font-size:85%;"&gt;.SetDefault();&lt;br /&gt;  End-If;&lt;br /&gt;&lt;br /&gt;  /* Insert/update. */&lt;br /&gt;  &amp;amp;saved = &amp;amp;recGU_RECORD.Save();&lt;br /&gt;&lt;br /&gt;End-If;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&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/7775978839077988970-850454658165358339?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/850454658165358339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=850454658165358339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/850454658165358339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/850454658165358339'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/06/synchronising-delivered-customised-1-1.html' title='Synchronising Delivered &amp; Customised 1-1 tables'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-9133015842050783198</id><published>2007-06-07T09:36:00.000+10:00</published><updated>2007-06-20T10:18:48.806+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3c communications'/><title type='text'>Setup and run 3C Communications</title><content type='html'>Document on how to setup and run the new v9 3C communications.  (Written by Kevin Spletter)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/Doc?id=df48r26b_3ffkjg4"&gt;http://docs.google.com/Doc?id=df48r26b_3ffkjg4&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-9133015842050783198?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/9133015842050783198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=9133015842050783198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/9133015842050783198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/9133015842050783198'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/06/setup-and-run-3c-communications.html' title='Setup and run 3C Communications'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7775978839077988970.post-4860251316669963853</id><published>2007-05-17T17:51:00.001+10:00</published><updated>2007-05-17T17:51:52.810+10:00</updated><title type='text'>Constrained</title><content type='html'>just what is the restraint talking about?&lt;br /&gt;&lt;br /&gt;select * from dba/user_constraints&lt;br /&gt;where constraint_name like 'nnn';&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7775978839077988970-4860251316669963853?l=capital-it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capital-it.blogspot.com/feeds/4860251316669963853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7775978839077988970&amp;postID=4860251316669963853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4860251316669963853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7775978839077988970/posts/default/4860251316669963853'/><link rel='alternate' type='text/html' href='http://capital-it.blogspot.com/2007/05/constrained.html' title='Constrained'/><author><name>Michael &amp;amp; Alfia</name><uri>http://www.blogger.com/profile/16912133635006899176</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/-zXTULB52t8c/Th1k7gDCoOI/AAAAAAAABjU/Xh0gNZ3Btdk/s220/me.jpg'/></author><thr:total>0</thr:total></entry></feed>
