<?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-3499303456313294328</id><updated>2012-02-15T01:11:25.508+08:00</updated><category term='SOAP'/><category term='Unix'/><category term='Scripting'/><category term='System Administration'/><category term='Firefox'/><category term='SQL 2000'/><category term='Application Pacakge'/><category term='Application Designer'/><category term='Web Services'/><category term='PL/SQL'/><category term='Solaris'/><category term='PeopleCode'/><category term='Misc'/><category term='VIM'/><category term='Peoplesoft'/><category term='Windows'/><category term='Security'/><category term='PSQuery'/><category term='Oracle'/><category term='Trace'/><category term='Component Interface'/><title type='text'>A Developer's Notes</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-5179452958290107622</id><published>2010-10-05T12:50:00.012+08:00</published><updated>2011-03-23T17:41:48.600+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Calculate Database Connections Needed For A PeopleSoft Instance</title><content type='html'>As a PeopleSoft system administrator or a DBA, chance may be you need to calculate how many database connections are needed for a PeopleSoft database. Below are some tips for the calculation:-&lt;br /&gt;&lt;br /&gt;&lt;b&gt;App Server Domain&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The following processes connect to the database: PSMONITORSRV, PSANALYTICSRV, PSSAMSRV, PSQRYSRV, PSAPPSRV, PSQCKSRV, PSBRKDSP, PSBRKHND, PSPUBDSP, PSPUBHND, PSSUBDSP, PSSUBHND, PSMCFLOG, PSUQSRV, PSRENSRV (Tip: in psappsrv.ubb, all processes except for PSWATCHSRV with -D parameter connect to the database)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;One PSAPPSRV can have 2 db connections if DbFlags is not set to 4(Disable Second DB Connection) or 8(Disable Persistent Secondary DB Connection)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The following processes don't connect to the database: BBL, JSL, JSH, WSL, WSH, PSDBGSRV, JREPSVR, PSWATCHSRV&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Process server domain&lt;/b&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The following processes connect to the database: PSPRCSRV, PSAESRV, PSDSTSRV, PSMSTPRC, PSMONITORSRV (Tip: in psprcsrv.ubb, all processes with -CD parameter connect to the database)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;One PSAESRV can have 2 db connections if DbFlags is not set to 4(Disable Second DB Connection) or 8(Disable Persistent Secondary DB Connection)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The following processes don't connect to the database: BBL&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Others&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;External programs, such as PSRUN (cobol remote call), PSCRRUN.exe(Crystal Reports), PSSQR(SQR report), PSNVS(nVision) etc, also need db connection&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tools/applications used by developers/system administrators, such as pside.exe, psdmt.exe, Oracle client, etc, also need db connection&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-5179452958290107622?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/5179452958290107622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=5179452958290107622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/5179452958290107622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/5179452958290107622'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2010/10/calculate-database-connections-needed.html' title='Calculate Database Connections Needed For A PeopleSoft Instance'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-3643960543028481557</id><published>2010-07-14T08:55:00.010+08:00</published><updated>2011-03-18T17:18:46.686+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><title type='text'>Quickly Reconfigure App/Process Server Domain</title><content type='html'>PeopleSoft system administrators rely on psadmin to reconfigure the application or process server domain. We all have experience of having to go through all the configuration items from psadmin option 14, just to turn on/off one process (let's say, pub/sub server). Actually this is not necessary if you have an understanding of where the configuration items stay - you can bypass psadmin and manually modify those configurations quickly.&lt;br /&gt;&lt;br /&gt;All items configurable from psadmin are saved in 3 different files for each server domain:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For application server: psappsrv.ubb, psappsrv.ubx and psappsrv.cfg.&lt;/li&gt;&lt;li&gt;For process server: psprcsrv.ubb,  psprcsrv.ubx and psprcs.cfg.&lt;/li&gt;&lt;/ul&gt;For example, your app server domain's pub/sub server is currently off and you want ti turn it on, you can do the following:&lt;br /&gt;&lt;br /&gt;1) Shutdown the server domain first - this is a must&lt;br /&gt;2) (This is no more needed, as UBB file is generated using UBX as a template.)&lt;p&gt;&lt;br /&gt;&lt;strike&gt;Open psappsrv.ubb, scroll down to the bottom, you will find two lines under 'ubbgen control values:'&lt;/strike&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;strike&gt;# [ 6]:             {PUBSUB}:  FALSE&lt;br /&gt;# [ 7]:            {!PUBSUB}:  TRUE&lt;/strike&gt;&lt;/blockquote&gt;&lt;strike&gt;Swap the FALSE and TRUE so the 2 lines appear as below and save/close the file.&lt;/strike&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;strike&gt;# [ 6]:             {PUBSUB}:  TRUE&lt;br /&gt;# [ 7]:            {!PUBSUB}:  FALSE&lt;/strike&gt;&lt;/blockquote&gt;&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;3) Open psappsrv.ubx, search '*PS_DEFINES', under this line you will see&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;{PUBSUB} Do you want the Publish/Subscribe servers configured (y/n)? [n]:&lt;/blockquote&gt;Change [n] to [y] and save/close the file.&lt;br /&gt;&lt;br /&gt;4) Reconfigure - psadmin -c reconfigure -d DOMAIN&lt;br /&gt;5) Restart - psadmin -c boot -d DOMAIN&lt;br /&gt;&lt;br /&gt;You will see PUB/SUB server processes are running now.&lt;br /&gt;&lt;br /&gt;You can manipulate process server configurations similarly.&lt;br /&gt;&lt;br /&gt;Be sure to make a backup of the files before you try with this.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;- 18 Mar 2011: Remote point 2) as it is an unnecessary step.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-3643960543028481557?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/3643960543028481557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=3643960543028481557' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/3643960543028481557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/3643960543028481557'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2010/07/quickly-reconfigure-appprocess-server.html' title='Quickly Reconfigure App/Process Server Domain'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-7545817449571707543</id><published>2009-11-09T12:01:00.029+08:00</published><updated>2009-11-24T12:57:01.501+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='PL/SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PSQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Make It Easy To Check User's Accessibility To PS Queries</title><content type='html'>In PeopleSoft, checking whether a user has access to a PS Query is sometime a very frustrating job, particularly when the query has references to many base records which are added into multiple access groups in different query trees, and these query trees and access groups are granted to different permission lists which are owned by different roles.&lt;br /&gt;&lt;br /&gt;Unfortunately, I am the guy who have always been asked 'How come I am not able to view/edit query ... blah blah...' and I have spent too much time and efforts on this. Yesterday I eventually decided something must be done to pull me out of this repetitive and monotonous job, so I wrote the PL/SQL script &lt;a href="http://docs.google.com/View?id=ddjh6km2_11d9db2sc2"&gt;chk_query_access.sql&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This script asks for 3 parameters:&lt;br /&gt;&lt;br /&gt;1) PS Query Name: wildcards (%, _) are accepted. Escape character '\' is allowed too. For example, you can type in full query name &lt;span style="font-family:monospace;"&gt;N_Q006_SR_LOA, or you can also type in a query name pattern N\_Q00_\_% to check accessibility for queries N_Q001 to N_Q009.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;2) User ID: is case-sensitive&lt;br /&gt;&lt;br /&gt;3) Verbose Level: ranges from 0 - 3&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Level 0: only shows query grant status. This is the default level.&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;br /&gt;SQL&gt; @d:\SQL\chk_query_access.sql&lt;br /&gt;SQL&gt; SET ECHO OFF&lt;br /&gt;Query Name (wilecard accepted): N_Q006_SR_LOA&lt;br /&gt;User ID: PSTEST&lt;br /&gt;Verbose Level:&lt;br /&gt;0 - Show query grant status (default)&lt;br /&gt;1 - Show query/record grant status&lt;br /&gt;2 - Show query/record grant status and grant paths&lt;br /&gt;3 - Show query/record grant status and all paths&lt;br /&gt;Your Choice(0,1,2,3):&lt;br /&gt;old   5:                v_qryname_pattern PSQRYDEFN.QRYNAME%TYPE        := trim('&amp;amp;prompt_qryname');&lt;br /&gt;new   5:                v_qryname_pattern PSQRYDEFN.QRYNAME%TYPE        := trim('N_Q006_SR_LOA');&lt;br /&gt;old   6:                v_oprid PSOPRDEFN.OPRID%TYPE                    := trim('&amp;amp;prompt_oprid');&lt;br /&gt;new   6:                v_oprid PSOPRDEFN.OPRID%TYPE                    := trim('PSTEST');&lt;br /&gt;old   7:                v_verbose_lvl INTEGER                                   := &amp;amp;prompt_verbose;&lt;br /&gt;new   7:                v_verbose_lvl INTEGER                                   :=          0;&lt;br /&gt;===========================================================&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;=== Checking User(PSTEST)'s access to query 'N_Q006_SR_LOA'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;===&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;===&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;=== &lt;/span&gt;&lt;y&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt; Query 'N_Q006_SR_LOA' granted to 'PSTEST'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;===&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;/y&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Level 1: shows query grant status and record grant status. This is useful when you want to know what record is not granted if the query is not accessible.&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;===========================================================&lt;br /&gt;=== Checking User(PSTEST)'s access to query 'N_Q006_SR_LOA'&lt;br /&gt;===&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-----------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&gt;&gt;&gt; Record 1: N_STNT_PERS_VW&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&gt;&gt;&gt; Record granted&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;-----------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&gt;&gt;&gt; Record 2: N_STNT_SUMAC_VW&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&gt;&gt;&gt; Record not granted&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;-----------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&gt;&gt;&gt; Record 3: N_LOA&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&gt;&gt;&gt; Record granted&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;===&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;=== &lt;/span&gt;&lt;y style="font-weight: bold; color: rgb(0, 0, 0);"&gt; Query 'N_Q006_SR_LOA' not granted to 'PSTEST'&lt;br /&gt;===&lt;/y&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Level 2: show query grant status, record grant status, and grant path. At this level the script also shows the whole grant path, eg Record - Query Tree/Access Group - Permission List - Role - User Profile.&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;===========================================================&lt;br /&gt;=== Checking User(PSTEST)'s access to query 'N_Q006_SR_LOA'&lt;br /&gt;===&lt;br /&gt;-----------------------------------------------------------&lt;br /&gt;&gt;&gt;&gt; Record 1: N_STNT_PERS_VW&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;[Y] N_QUERY_TREE_RPT.N_RPTQAG_MOD_RANK -&gt; N_R030_SR_MODULE_RANKING -&gt; N_EXAM_QRY_EU -&gt; PSTEST&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;[Y] N_QUERY_TREE_RPT.N_RPTQAG_BOE_ATTACH -&gt; N_R031_SR_BOE_ATTACHMENTS -&gt; N_EXAM_QRY_EU -&gt; PSTEST&lt;/span&gt;&lt;br /&gt;&gt;&gt;&gt; Record granted&lt;br /&gt;-----------------------------------------------------------&lt;br /&gt;&gt;&gt;&gt; Record 2: N_STNT_SUMAC_VW&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&gt;&gt;&gt; Record not granted&lt;br /&gt;-----------------------------------------------------------&lt;br /&gt;&gt;&gt;&gt; Record 3: N_LOA&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;[Y] N_QUERY_TREE_DEN.N_DNQAG_LOA -&gt; N_PROG_PLAN_ADMIN_QRY_EU -&gt; N_PROG_PLAN_ADMIN_QRY_EU -&gt; PSTEST&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;[Y] N_QUERY_TREE_DEN.N_DNQAG_LOA -&gt; N_PROG_PLAN_ADMIN_QRY_IT -&gt; N_PROG_PLAN_ADMIN_QRY_IT -&gt; PSTEST&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;[Y] N_QUERY_TREE_RPT.N_RPTQAG_BOE_ATTACH -&gt; N_R031_SR_BOE_ATTACHMENTS -&gt; N_EXAM_QRY_EU -&gt; PSTEST&lt;/span&gt;&lt;br /&gt;&gt;&gt;&gt; Record granted&lt;br /&gt;===&lt;br /&gt;=== &lt;n&gt; Query 'N_Q006_SR_LOA' not granted to 'PSTEST'&lt;br /&gt;===&lt;br /&gt;...&lt;br /&gt;&lt;/n&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Level 3: the most detailed verbose, especially useful when a query is not accessible and you need to find out at what position the granting is not done.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;===========================================================&lt;br /&gt;=== Checking User(PSTEST)'s access to query 'N_Q006_SR_LOA'&lt;br /&gt;===&lt;br /&gt;-----------------------------------------------------------&lt;br /&gt;&gt;&gt;&gt; Record 1: N_STNT_PERS_VW&lt;br /&gt;[Y] N_QUERY_TREE_RPT.N_RPTQAG_MOD_RANK -&gt; N_R030_SR_MODULE_RANKING -&gt; N_EXAM_QRY_EU -&gt; PSTEST&lt;br /&gt;[Y] N_QUERY_TREE_RPT.N_RPTQAG_BOE_ATTACH -&gt; N_R031_SR_BOE_ATTACHMENTS -&gt; N_EXAM_QRY_EU -&gt; PSTEST&lt;br /&gt;&gt;&gt;&gt; Record granted&lt;br /&gt;-----------------------------------------------------------&lt;br /&gt;&gt;&gt;&gt; Record 2: N_STNT_SUMAC_VW&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;[N] N_QUERY_TREE_RPT.N_RPTQAG_MOD_RANK -&gt; N_R030_SR_MODULE_RANKING -&gt; N_EXAM_QRY_EU&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;[N] N_QUERY_TREE_RPT.N_ROGQAG_ENRL_STATS2 -&gt; N_R042_SR_ENROL_STATS2&lt;/span&gt;&lt;br /&gt;&gt;&gt;&gt; Record granted&lt;br /&gt;-----------------------------------------------------------&lt;br /&gt;&gt;&gt;&gt; Record 3: N_LOA&lt;br /&gt;[Y] N_QUERY_TREE_DEN.N_DNQAG_LOA -&gt; N_PROG_PLAN_ADMIN_QRY_EU -&gt; N_PROG_PLAN_ADMIN_QRY_EU -&gt; PSTEST&lt;br /&gt;[Y] N_QUERY_TREE_DEN.N_DNQAG_LOA -&gt; N_PROG_PLAN_ADMIN_QRY_IT -&gt; N_PROG_PLAN_ADMIN_QRY_IT -&gt; PSTEST&lt;br /&gt;[Y] N_QUERY_TREE_RPT.N_RPTQAG_BOE_ATTACH -&gt; N_R031_SR_BOE_ATTACHMENTS -&gt; N_EXAM_QRY_EU -&gt; PSTEST&lt;br /&gt;&gt;&gt;&gt; Record granted&lt;br /&gt;===&lt;br /&gt;=== &lt;y&gt; Query 'N_Q006_SR_LOA' granted to 'PSTEST'&lt;br /&gt;===&lt;br /&gt;&lt;/y&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Updates:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;18-Nov-2009: Added check for defnition security.&lt;/li&gt;&lt;li&gt;24-Nov-2009: Added support for command line arguments. Added access group cascading check.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-7545817449571707543?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/7545817449571707543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=7545817449571707543' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/7545817449571707543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/7545817449571707543'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2009/11/make-it-easy-to-check-users.html' title='Make It Easy To Check User&apos;s Accessibility To PS Queries'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-8664850252715443498</id><published>2009-11-04T13:54:00.006+08:00</published><updated>2010-03-10T13:26:26.944+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Trace'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='Peoplesoft'/><title type='text'>Script Analyzing TraceSQL File And Extracting SQL Statements</title><content type='html'>TraceSQL is a great tool for Peoplesoft development debugging and application troubleshooting. But TraceSQL file only logs SQL statements and SQL variable values separately and so is less readable and hard to re-run.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/Doc?docid=0AVRpotBFmfCVZGRqaDZrbTJfMTBmZjR4ODg2OQ&amp;amp;hl=en"&gt;This script&lt;/a&gt; is developed to analyze TraceSQL files, filter out unnecessary information, extract SQL statements and replace all SQL variables with the actual values.&lt;br /&gt;&lt;br /&gt;For example, for the following contents in a tracesql file:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;PSAPPSRV.12271 (951)     1-190    20.22.39    0.008245 Cur#1.12271.CS90SUP RC=0 Dur=0.000238 COM Stmt=SELECT OBJNAME, FLAG, PTCUSTOMFORMAT FROM PSUSEROBJTYPE WHERE MENUNAME = :1 AND PNLGRPNAME = :2 AND PNLNAME = :3 AND OPRID = :4 AND FIELDTYPE = :5&lt;br /&gt;PSAPPSRV.12271 (951)     1-191    20.22.39    0.000013 Cur#1.12271.CS90SUP RC=0 Dur=0.000001 Bind-1 type=2 length=26 value=CALCULATE_TUITION_AND_FEES&lt;br /&gt;PSAPPSRV.12271 (951)     1-192    20.22.39    0.000008 Cur#1.12271.CS90SUP RC=0 Dur=0.000000 Bind-2 type=2 length=14 value=ADJ_TERM_PANEL&lt;br /&gt;PSAPPSRV.12271 (951)     1-193    20.22.39    0.000008 Cur#1.12271.CS90SUP RC=0 Dur=0.000001 Bind-3 type=2 length=1 value=&lt;br /&gt;PSAPPSRV.12271 (951)     1-194    20.22.39    0.000006 Cur#1.12271.CS90SUP RC=0 Dur=0.000000 Bind-4 type=2 length=2 value=PS&lt;br /&gt;PSAPPSRV.12271 (951)     1-195    20.22.39    0.000010 Cur#1.12271.CS90SUP RC=0 Dur=0.000000 Bind-5 type=18 length=2 value=-1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;the script comes out with below SQL:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SELECT OBJNAME, FLAG, PTCUSTOMFORMAT FROM PSUSEROBJTYPE WHERE MENUNAME = 'CALCULATE_TUITION_AND_FEES' AND PNLGRPNAME = 'ADJ_TERM_PANEL' AND PNLNAME = ' ' AND OPRID = 'PS' AND FIELDTYPE = -1;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Script usage: xsql /path/to/tracesql&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;- 03-Mar-2010: Bug fix: encapsulated date/time values with quotes. Fixed the issue that the last SQL statement is not outputed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-8664850252715443498?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/8664850252715443498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=8664850252715443498' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/8664850252715443498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/8664850252715443498'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2009/11/script-analyzing-tracesql-file-and.html' title='Script Analyzing TraceSQL File And Extracting SQL Statements'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-2540311033051717476</id><published>2009-10-02T15:43:00.016+08:00</published><updated>2009-10-13T09:29:58.121+08:00</updated><title type='text'>Enhancements To The Scripts Listing Processes and Memory Usage of PeopleSoft Application Server and Process Scheduler</title><content type='html'>In the &lt;a href="http://devwfb.blogspot.com/2009/02/scripts-listing-processes-and-memory.html"&gt;post &lt;/a&gt;released in February I introduced a script that is able to list all processes of a Peoplesoft app server/process scheduler as well as each process' memory usage information.&lt;br /&gt;&lt;br /&gt;I have enhanced this&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt; script with the following new features:&lt;br /&gt;&lt;br /&gt;- For Peoplesoft App Server &amp;amp; Process Scheduler:&lt;br /&gt;&lt;br /&gt;= When -m is specified, the script will print CPU usage percentage aside from memory usage.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ~/bin/pl -cmh DOMAIN&lt;br /&gt; PID  PROCESS            VSIZE(m)          RSS(m)     CPU%&lt;br /&gt; ---  -------            --------          ------     ----&lt;br /&gt;7744  PSBRKHND              104.6            48.3      0.0&lt;br /&gt;27887  PSAPPSRV              585.0           401.7      0.8&lt;br /&gt;7799  PSPUBHND              100.7            24.6      0.0&lt;br /&gt;7685  BBL                    11.6             3.9      0.0&lt;br /&gt;7704  PSSAMSRV               98.2            19.6      0.0&lt;br /&gt;7796  PSBRKDSP              108.6            51.8      0.0&lt;br /&gt;7802  PSPUBDSP              332.7            61.8      0.1&lt;br /&gt;9122  JREPSVR                 9.5             1.0      0.0&lt;br /&gt;9055  JSL(9050)              11.0             1.9      0.0&lt;br /&gt;8030  PSSUBHND              100.6            19.7      0.0&lt;br /&gt;8350  PSSUBDSP              108.6            49.1      0.0&lt;br /&gt;20335  PSAPPSRV              986.7           803.7      0.7&lt;br /&gt;20562  PSAPPSRV              962.3           712.4      1.0&lt;br /&gt;15765  PSAPPSRV             1006.4           805.3      0.5&lt;br /&gt;13737  PSAPPSRV              188.0           157.3      0.8&lt;br /&gt;6362  PSMONITORSRV          103.3            75.6      0.0&lt;br /&gt;21579  PSWATCHSRV             14.6             8.2      0.0&lt;br /&gt;9114  JSH(9053)              52.6            21.1      0.0&lt;br /&gt;9089  JSH(9051)              44.6            16.8      0.1&lt;br /&gt;9107  JSH(9052)              36.6            21.0      0.0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;= When -s is specified, the script will print statistical information on the bottom.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ~/bin/pl -cmhs DOMAIN&lt;br /&gt; PID  PROCESS            VSIZE(m)          RSS(m)     CPU%&lt;br /&gt; ---  -------            --------          ------     ----&lt;br /&gt;7744  PSBRKHND              104.6            48.3      0.0&lt;br /&gt;27887  PSAPPSRV              585.0           401.7      0.1&lt;br /&gt;7799  PSPUBHND              100.7            24.6      0.0&lt;br /&gt;7685  BBL                    11.6             3.9      0.0&lt;br /&gt;7704  PSSAMSRV               98.2            19.6      0.0&lt;br /&gt;7796  PSBRKDSP              108.6            51.8      0.0&lt;br /&gt;7802  PSPUBDSP              332.7            61.8      0.1&lt;br /&gt;9122  JREPSVR                 9.5             1.0      0.0&lt;br /&gt;9055  JSL(9050)              11.0             1.9      0.0&lt;br /&gt;8030  PSSUBHND              100.6            19.7      0.0&lt;br /&gt;8350  PSSUBDSP              108.6            49.1      0.0&lt;br /&gt;20335  PSAPPSRV              986.7           803.7      0.2&lt;br /&gt;20562  PSAPPSRV              962.3           712.4      0.1&lt;br /&gt;15765  PSAPPSRV             1006.4           805.3      0.3&lt;br /&gt;13737  PSAPPSRV              188.0           157.3      0.1&lt;br /&gt;6362  PSMONITORSRV          103.3            75.6      0.0&lt;br /&gt;21579  PSWATCHSRV             14.6             8.2      0.0&lt;br /&gt;9114  JSH(9053)              52.6            21.1      0.0&lt;br /&gt;9089  JSH(9051)              44.6            16.8      0.1&lt;br /&gt;9107  JSH(9052)              36.6            21.0      0.0&lt;br /&gt; ---  -------            --------          ------     ----&lt;br /&gt;  17  SERVER               4832.3          3245.7      0.9&lt;br /&gt;   5  PSAPPSRV             3728.4          2880.3      0.8&lt;br /&gt;   3  CLIENT                133.8            59.0      0.1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;= For app server, ports opened by JSL/JSH/WSL/WSH will be printed.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;See above example.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;= When -r is specified, the script will print the summary memory and CPU usage of processes of all app servers/process schedulers running on the server. This is useful when you need to monitor server's performance. Actually Oracle recommends that the total resident memory for the entire PS Processes not exceed 70 percent of the total real memory available on the server.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ~/bin/pl -r&lt;br /&gt;CATEGORY        COUNT      VSIZE(m)          RSS(m)      RSS%   CPU%&lt;br /&gt;--------        -----     ---------          ------      ----   ----&lt;br /&gt;All                98       37598.7         19232.7      29.3    1.7&lt;br /&gt;PSAPPSRV           28       26224.3         15047.6      22.9    1.1&lt;br /&gt;PSAESRV             0           0.0             0.0       0.0    0.0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;- For Peoplesoft Web Server: the script now can print some configuration information and running information (memory and CPU usage) of a web domain.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ~/bin/pl -w webdomain&lt;br /&gt;DOMAIN:        webdomain&lt;br /&gt;TYPE:          Single Server&lt;br /&gt;WEBSITES:      server1, server2&lt;br /&gt;HEAP SIZE:     -Xms512m -Xmx512m -XX:MaxPermSize=256m&lt;br /&gt;SERVER:        PIA&lt;br /&gt; HTTP:        8080&lt;br /&gt; HTTPS:       8843 enabled&lt;br /&gt; PID:         19098&lt;br /&gt; RESOURCES:   VSIZE=893.8m RSS=700.4m CPU=0.2%&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The help message:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Usage 1: list process info for a app server and/or a prcs server&lt;br /&gt;   pl [-f] -c|p [-m -h] [-s] &lt;instance&gt;&lt;br /&gt;&lt;br /&gt;Options:&lt;br /&gt;   -f force execution even appserv domain doesn't exsit&lt;br /&gt;   -c print processes of application server&lt;br /&gt;   -p print processes of process scheduler&lt;br /&gt;   -m print memory usage (virtual memory and RSS) and CPU usage(%)&lt;br /&gt;   -h print memory usage in human readable format&lt;br /&gt;   -s print summary and statistical info&lt;br /&gt;&lt;br /&gt;Usage 2: calculate RAM/CPU usage of all app/prcs processes&lt;br /&gt;   pl -r&lt;br /&gt;&lt;br /&gt;Usage 3: list setting and running info from a web domain (Weblogic only)&lt;br /&gt;   pl -w &lt;domain&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/domain&gt;&lt;/instance&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;Currently only Solaris version of the script is available. You can get it from &lt;a href="http://docs.google.com/View?id=ddjh6km2_9g5f2zxdm"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Update on 13-Oct-2009: Some bug fixes. pl -w produces more information.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-2540311033051717476?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/2540311033051717476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=2540311033051717476' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/2540311033051717476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/2540311033051717476'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2009/10/enhancement-to-scripts-listing.html' title='Enhancements To The Scripts Listing Processes and Memory Usage of PeopleSoft Application Server and Process Scheduler'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-752730249234395343</id><published>2009-05-06T12:06:00.002+08:00</published><updated>2009-06-01T09:18:01.889+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Component Interface'/><title type='text'>Manipulating Child Rows in A PeopleSoft Component Through Web Services</title><content type='html'>I had this issue when trying to manipulate ID types for a user profile through web service. It was easy to update an existing ID type or to insert a non-existing ID type. For example, look at the following SOAP message:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;   &amp;lt;ns1:Update__CompIntfc__USER_PROFILE xmlns:ns1="http://xmlns.oracle.com/Enterprise/Tools/schemas/M274199.V1"&amp;gt;&lt;br /&gt;      &amp;lt;ns1:UserID&amp;gt;COPYUSER2&amp;lt;/ns1:UserID&amp;gt;&lt;br /&gt;      &amp;lt;ns1:IDTypes&amp;gt;&lt;br /&gt;         &amp;lt;ns1:IDType&amp;gt;EMP&amp;lt;/ns1:IDType&amp;gt;&lt;br /&gt;         &amp;lt;ns1:Attributes&amp;gt;&lt;br /&gt;            &amp;lt;ns1:Fieldname&amp;gt;EmplID&amp;lt;/ns1:Fieldname&amp;gt;&lt;br /&gt;            &amp;lt;ns1:Recname&amp;gt;PERSONAL_DATA&amp;lt;/ns1:Recname&amp;gt;&lt;br /&gt;            &amp;lt;ns1:AttributeValue&amp;gt;AA0001&amp;lt;/ns1:AttributeValue&amp;gt;&lt;br /&gt;            &amp;lt;ns1:AttributeName&amp;gt;EmplID&amp;lt;/ns1:AttributeName&amp;gt;&lt;br /&gt;         &amp;lt;/ns1:Attributes&amp;gt;&lt;br /&gt;      &amp;lt;/ns1:IDTypes&amp;gt;&lt;br /&gt;   &amp;lt;/ns1:Update__CompIntfc__USER_PROFILE&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If ID Type '&lt;span style="color: rgb(0, 0, 153);"&gt;EMP&lt;/span&gt;' exists for user profile '&lt;span style="color: rgb(0, 0, 153);"&gt;TESTUSER'&lt;/span&gt;, system updates the ID Type's attribute value as '&lt;span style="color: rgb(0, 0, 153);"&gt;AA0001&lt;/span&gt;'. Or if ID Type '&lt;span style="color: rgb(0, 0, 153);"&gt;EMP&lt;/span&gt;' doesn't exist with user profile '&lt;span style="color: rgb(0, 0, 153);"&gt;TESTUSER&lt;/span&gt;', it  inserted.&lt;br /&gt;&lt;br /&gt;However, this way won't work if we need to remove '&lt;span style="color: rgb(0, 0, 153);"&gt;EMP&lt;/span&gt;' from '&lt;span style="color: rgb(0, 0, 153);"&gt;TESTUSER&lt;/span&gt;'. We must adopt an attribute '&lt;span style="color: rgb(0, 0, 153);"&gt;CINodeAction&lt;/span&gt;' to do the work:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;    &amp;lt;ns1:Update__CompIntfc__USER_PROFILE xmlns:ns1="http://xmlns.oracle.com/Enterprise/Tools/schemas/M274199.V1"&amp;gt;&lt;br /&gt;       &amp;lt;ns1:UserID&amp;gt;TESTUSER&amp;lt;/ns1:UserID&amp;gt;&lt;br /&gt;       &amp;lt;ns1:IDTypes CINodeAction="delete"&amp;gt;&lt;br /&gt;          &amp;lt;ns1:IDType&amp;gt;EMP&amp;lt;/ns1:IDType&amp;gt;&lt;br /&gt;       &amp;lt;/ns1:IDTypes&amp;gt;&lt;br /&gt;    &amp;lt;/ns1:Update__CompIntfc__USER_PROFILE&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As the matter of fact, we can also set value 'update' or 'insert' to '&lt;span style="color: rgb(0, 0, 153);"&gt;CINodeAction&lt;/span&gt;' for first and second scenacios stated above, and this makes the SOAP message unambiguous and more understandable.&lt;br /&gt;&lt;br /&gt;Attribute '&lt;span style="color: rgb(0, 0, 153);"&gt;CINodeAction&lt;/span&gt;' is not documented, but can be digged from application package SOAPTOCI.&lt;br /&gt;&lt;br /&gt;PS: This tip applies up to PeopleTools 8.49. In to-be-released PeppleTools 8.50, property 'action' has been announced together with some other properties.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-752730249234395343?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/752730249234395343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=752730249234395343' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/752730249234395343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/752730249234395343'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2009/02/manipulating-child-rows-in-peoplesoft.html' title='Manipulating Child Rows in A PeopleSoft Component Through Web Services'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-1153751931091209140</id><published>2009-02-12T11:01:00.014+08:00</published><updated>2009-02-12T14:36:26.860+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Pacakge'/><category scheme='http://www.blogger.com/atom/ns#' term='Peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='PeopleCode'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Component Interface'/><title type='text'>Badly-coded PeopleCode Fails Invocation of User-defined methods Through Web Services</title><content type='html'>I wrote a user-defined method in a PeopleSoft component interface (i.e. USER_PROFILE) which was exposed as a web services. But when I called this method from a web service client, I received below error:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;The key UserID was not found in the request. (158,16017) PT_INTEGRATION.CIDefinition.OnExecute Name:setKeys PCPC:16560 Statement:306Called from:PT_INTEGRATION.CIDefinition.OnExecute Name:invokeUserDefinedFunction Statement:97Called from:PT_INTEGRATION.CIDefinition.OnExecute Name:OnEvent Statement:34&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;By using PeopleCode debugging, I traced the error to method &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;setKeys &lt;/span&gt;of &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;PT_INTEGRATION:CIDefinition&lt;/span&gt; and concluded it is the badly-coded PeopleCode that has resulted in the error.&lt;br /&gt;&lt;br /&gt;Let's investigate the PeopleCode(partial) of method setKeys:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/* set the keys */&lt;br /&gt;For &amp;amp;i = 1 To &amp;amp;ciKeyCollection.Count&lt;br /&gt;&lt;br /&gt;&amp;amp;currentKey = &amp;amp;ciKeyCollection.item(&amp;amp;i);&lt;br /&gt;&amp;amp;keyNotFound = True;&lt;br /&gt;&lt;br /&gt;/* is there a corresponding element in the input XML? */&lt;br /&gt;&lt;br /&gt;For &amp;amp;j = 1 To &amp;amp;rootNode.ChildNodeCount&lt;br /&gt;/* NOTE: This is the bad code that causes the error! */&lt;br /&gt;If (Upper(&amp;amp;rootNode.GetChildNode(&amp;amp;j).LocalName) = &amp;amp;currentKey.name) Then&lt;br /&gt;&lt;br /&gt;   /* the key is present in the XML */&lt;br /&gt;   &amp;amp;keyNotFound = False;&lt;br /&gt;&lt;br /&gt;   Local string &amp;amp;keyValue = &amp;amp;rootNode.GetChildNode(&amp;amp;j).NodeValue;&lt;br /&gt;&lt;br /&gt;   If (&amp;amp;keyValue = "") Then&lt;br /&gt;      throw CreateException(&amp;amp;ibMsgSetNumber, &amp;amp;emsgKeyValueNotInRequest, "No value found for the key %1 in the request.", &amp;amp;currentKey.name);&lt;br /&gt;   End-If;&lt;br /&gt;&lt;br /&gt;   /* set the key data */&lt;br /&gt;   &amp;amp;ciInstance.SetPropertyByName(&amp;amp;currentKey.name, &amp;amp;keyValue);&lt;br /&gt;&lt;br /&gt;End-If;&lt;br /&gt;End-For;&lt;br /&gt;&lt;br /&gt;If (&amp;amp;keyNotFound) Then&lt;br /&gt;throw CreateException(&amp;amp;ibMsgSetNumber, &amp;amp;emsgKeyNotInRequest, "The key %1 was not found in the request.", &amp;amp;currentKey.name);&lt;br /&gt;End-If;&lt;br /&gt;&lt;br /&gt;End-For;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The logic of method setKeys is clear: it tries to search the SOAP request for the component interface search key values and sets key values if the search succeeds, or throws an exception if it fails. For example, the search key of component interface USER_PROFILE 'UserId', method setKeys should be able to extract key value 'TESTUSER1' from SOAP request&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;Method__CompIntfc__USER_PROFILE&amp;gt;&lt;br /&gt; &amp;lt;UserID&amp;gt;TESTUSER1&amp;lt;/UserID&amp;gt;&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/Method__CompIntfc__USER_PROFILE&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;However, things don't go as expected because of the following statement:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;If (Upper(&amp;amp;rootNode.GetChildNode(&amp;amp;j).LocalName) = &amp;amp;currentKey.name) Then&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This If-Then statement tries to compare a SOAP node with a search key name. You may have noticed the SOAP node name (&amp;amp;rootNode.GetChildNode(&amp;amp;j).LocalName) is formatted to upper case while the search key name (&amp;amp;currentKey.name) is not. It seems that the programmer assumed that the search key name was always upper case and so required no formatting, but how could he/she made such an arbitary assumption?&lt;br /&gt;&lt;br /&gt;For component interface USER_PROFILE which I was working with, since the search key name happens to be 'UserId' instead of 'USERID', above comparison always gives a 'false' and the codes setting key values will never be executed, that is the reason why I saw error "The key %1 was not found in the request."&lt;br /&gt;&lt;br /&gt;The resolution is simple, after modifying above statement as&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;If (Upper(&amp;amp;rootNode.GetChildNode(&amp;amp;j).LocalName) = Upper(&amp;amp;currentKey.name)) Then&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;the web service has executed properly.&lt;br /&gt;&lt;br /&gt;Alternatively, the code can also be&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;If (&amp;amp;rootNode.GetChildNode(&amp;amp;j).LocalName = &amp;amp;currentKey.name) Then&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;but it is less safe obviously.&lt;br /&gt;&lt;br /&gt;This code persists until PeopleTools rel 8.49.08. Hopefully Oracle will correct it in later release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-1153751931091209140?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/1153751931091209140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=1153751931091209140' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/1153751931091209140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/1153751931091209140'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2009/02/badly-coded-peoplecode-fails-invocation.html' title='Badly-coded PeopleCode Fails Invocation of User-defined methods Through Web Services'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-301138271250399661</id><published>2009-02-10T17:22:00.012+08:00</published><updated>2009-10-03T11:31:36.387+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='Peoplesoft'/><title type='text'>Scripts Listing Processes and Memory Usage of PeopleSoft Application Server and Process Scheduler</title><content type='html'>Sometimes I want to list all processes belonging to a PeopleSoft app/process domain. Although PSADMIN does provide some options for this purpose, none can satisfy me fully. For example:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;./psadmin -c sstatus -d DOMAIN&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;- No JSH and WSH, also no PID (process id, which is important to me)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;./psadmin -c pslist -d DOMAIN&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;- Shows PID, but no BBL, JSH and WSH&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;./psadmin -p status -d DBNAME&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;- No PID&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Besides, I am also interested in the memory usage each process, but PSADMIN doesn't provide this kind of information too.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Therefore, I wrote 2 scripts in order to self-help. One is a shell script (&lt;a href="http://docs.google.com/Doc?docid=ddjh6km2_6ds8mkjhp&amp;amp;hl=en" target="_blank"&gt;view&lt;/a&gt;) runnable at Solaris. The other one is a VB script (&lt;a href="http://docs.google.com/View?docid=ddjh6km2_75r3f7mc7&amp;amp;pageview=1&amp;amp;hgd=1&amp;amp;hl=en" target="_blank"&gt;view&lt;/a&gt;) runnable at Windows. A bat file (&lt;a href="http://docs.google.com/View?docid=ddjh6km2_8g3gkgtgf&amp;amp;pageview=1&amp;amp;hgd=1&amp;amp;hl=en" target="_blank"&gt;view&lt;/a&gt;) is provided as a wrapper to make the VB script run on and output to DOS commandline, it must reside at the same directory as the VB script.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Both scripts have similar syntax: &lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;pl [-f] {-c-p-c -p} [-m [-h]] instance&lt;br /&gt;Options: -f force execution even appserv domain doesn't exsit&lt;br /&gt;      -c print processes of application server&lt;br /&gt;      -p print processes of process scheduler&lt;br /&gt;      -m print memory usage&lt;br /&gt;      -h print memory usage in human readable format (only applicable to solaris version)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sample output for running shell script:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ ~/bin/pl -cmh DOMAIN&lt;br /&gt;PID  PROCESS               VSIZE             RSS&lt;br /&gt;---  -------               -----             ---&lt;br /&gt;6431  PSSUBDSP             107.7M           92.5M&lt;br /&gt;6430  PSPUBDSP             345.2M          161.5M&lt;br /&gt;6397  BBL                   10.9M            8.9M&lt;br /&gt;6407  PSSUBHND              99.7M           84.4M&lt;br /&gt;6446  JREPSVR                8.9M            7.0M&lt;br /&gt;6403  PSAPPSRV             514.7M          306.3M&lt;br /&gt;8105  PSWATCHSRV            15.0M           11.9M&lt;br /&gt;6429  PSBRKDSP             107.7M           92.5M&lt;br /&gt;6402  PSAPPSRV             513.8M          297.5M&lt;br /&gt;6442  JSL                   10.4M            8.4M&lt;br /&gt;6401  PSAPPSRV             533.9M          317.6M&lt;br /&gt;19680  PSMONITORSRV         102.4M           87.2M&lt;br /&gt;6440  WSL                    9.4M            7.6M&lt;br /&gt;6405  PSBRKHND             107.7M           92.5M&lt;br /&gt;6406  PSPUBHND              99.9M           84.6M&lt;br /&gt;6404  PSSAMSRV              97.4M           82.3M&lt;br /&gt;6444  JSH                   12.8M           11.0M&lt;br /&gt;6445  JSH                   16.0M           14.3M&lt;br /&gt;6443  JSH                   16.0M           14.3M&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;Sample output for running VB script:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;C:\WINDOWS\system32&gt;pl -c -p -m DOMAIN&lt;br /&gt;PID     Command         VSize   Working Set&lt;br /&gt;---     -------         -----   -----------&lt;br /&gt;5640    BBL             22.3M   5.8M&lt;br /&gt;1764    PSAPPSRV        114.5M  43.1M&lt;br /&gt;1692    PSAPPSRV        324.5M  81.3M&lt;br /&gt;5856    PSAPPSRV        114.0M  42.5M&lt;br /&gt;2448    PSSAMSRV        104.4M  40.4M&lt;br /&gt;7060    PSANALYTICSRV   107.6M  41.0M&lt;br /&gt;6556    PSANALYTICSRV   107.6M  41.0M&lt;br /&gt;6364    PSANALYTICSRV   107.6M  41.0M&lt;br /&gt;3348    PSDBGSRV        101.5M  37.3M&lt;br /&gt;4592    PSRENSRV        79.4M   17.4M&lt;br /&gt;8112    PSMONITORSRV    101.5M  37.6M&lt;br /&gt;3984    WSL(7000)       24.3M   4.6M&lt;br /&gt;4540    JSL(9000)       25.0M   4.6M&lt;br /&gt;5452    JREPSVR         19.9M   3.9M&lt;br /&gt;7292    PSSAMSRV        100.9M  37.2M&lt;br /&gt;740     PSWATCHSRV      25.1M   6.7M&lt;br /&gt;&lt;br /&gt;3840    WSH(7001)       23.9M   4.9M&lt;br /&gt;820     JSH(9001)       24.0M   4.7M&lt;br /&gt;6256    JSH(9002)       26.1M   5.5M&lt;br /&gt;3164    JSH(9003)       24.0M   4.7M&lt;br /&gt;6064    JSH(9004)       26.1M   5.0M&lt;br /&gt;7732    JSH(9005)       24.0M   4.7M&lt;br /&gt;&lt;br /&gt;PID     Command         VSize   Working Set&lt;br /&gt;---     -------         -----   -----------&lt;br /&gt;5552    BBL             21.7M   2.7M&lt;br /&gt;5572    PSAESRV         109.9M  14.4M&lt;br /&gt;5616    PSAESRV         109.9M  14.4M&lt;br /&gt;5748    PSPRCSRV        130.8M  21.7M&lt;br /&gt;7112    PSAESRV         303.4M  63.0M&lt;br /&gt;7488    PSDSTSRV        282.0M  50.5M&lt;br /&gt;5812    PSMONITORSRV    100.9M  37.6M&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Update on 02/Oct/2009: the enhanced version of pl script (for solaris) is available &lt;a href="http://devwfb.blogspot.com/2009/10/enhancement-to-scripts-listing.html"&gt;here&lt;/a&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/3499303456313294328-301138271250399661?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/301138271250399661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=301138271250399661' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/301138271250399661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/301138271250399661'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2009/02/scripts-listing-processes-and-memory.html' title='Scripts Listing Processes and Memory Usage of PeopleSoft Application Server and Process Scheduler'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-6813049616558396695</id><published>2008-08-29T09:14:00.004+08:00</published><updated>2009-02-12T12:08:43.924+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Designer'/><title type='text'>Speed Up PeopleSoft Project Comparison And Migration Using Application Designer Command Line Parameters</title><content type='html'>As a PeopleSoft system/data administrator, project comaprison or migration is the regular work I have been undertaking. The usual procedure of doing this is:&lt;br /&gt;&lt;br /&gt;1) Logon to app designer with source DB name, user and password&lt;br /&gt;&lt;br /&gt;2) Open a project that you want to work on&lt;br /&gt;&lt;br /&gt;3) Compare it with the target DB  to which you would need to provide username and password so as to logon.&lt;br /&gt;&lt;br /&gt;4) After comparing the project, migrate it to the target DB. At this point you need to type in username and password one more time.&lt;br /&gt;&lt;br /&gt;It is OK if you only need to work on one or two projects everyday. But imagine you receive dozens of requests per day, in particular during the implementation period?&lt;br /&gt;&lt;br /&gt;Fortunately, we are able to make use of app designer command line parameters to automate above procedures.&lt;br /&gt;&lt;br /&gt;I hereby list the most important parameters below:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;-CT &lt;db&gt;: DB type&lt;/db&gt;&lt;/li&gt;&lt;li&gt;-CD &lt;db&gt;: source DB name&lt;/db&gt;&lt;/li&gt;&lt;li&gt;-CO &lt;user&gt;: username for source DB&lt;/user&gt;&lt;/li&gt;&lt;li&gt;-CP &lt;passwd&gt;: password for source DB&lt;/passwd&gt;&lt;/li&gt;&lt;li&gt;-TD &lt;db&gt;: target DB name&lt;/db&gt;&lt;/li&gt;&lt;li&gt;-TO &lt;user&gt;: username for target DB&lt;/user&gt;&lt;/li&gt;&lt;li&gt;-TP &lt;passwd&gt;: password for target DB&lt;/passwd&gt;&lt;/li&gt;&lt;li&gt;-PJM &lt;project&gt;: name of project to compare&lt;/project&gt;&lt;/li&gt;&lt;li&gt;-PJC &lt;project&gt;: name of project to migrate&lt;/project&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There are many other parameters that specify comare, copy or report options. Please refer to PeopleBooks for details.&lt;/p&gt;&lt;p&gt;I wrote 2 bat files: &lt;a href="http://docs.google.com/View?docid=ddjh6km2_4f27dhqgn&amp;amp;hl=en" target="_blank"&gt;pscmp.bat&lt;/a&gt; and &lt;a href="http://docs.google.com/View?docid=ddjh6km2_5g9gmz8fw&amp;amp;hl=en" target="_blank"&gt;pscpy.bat&lt;/a&gt;, which invoke app designer (pside.exe) with all kinds of parameters mentioned above. The basic usage is:&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;pscmp &amp;lt;project&amp;gt; &amp;lt;source DB&amp;gt; &amp;lt;source user&amp;gt; &amp;lt;source password&amp;gt; &amp;lt;target DB&amp;gt; &amp;lt;target user&amp;gt; &amp;lt;target password&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;and &lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;pscpy &amp;lt;project&amp;gt; &amp;lt;source DB&amp;gt; &amp;lt;source user&amp;gt; &amp;lt;source password&amp;gt; &amp;lt;target DB&amp;gt; &amp;lt;target user&amp;gt; &amp;lt;target password&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Further simpification can be achieved by hard-cording some parameters in the batch scripts. And similarly, you are able to write other scripts to build projects, or just in order to logon without typing in username/password.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Two issues:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;1) No parameters provided to customize report filter options. So you still need to logon interactively to change them manually.&lt;/p&gt;&lt;p&gt;2) There may be some definitions that are absent on source but in non-absent state in target. Although this kind of definitions are suposed to be removed from target, they are tagged as 'not upgrade' by default because Peoplesoft would leave them for users to make final desicion. So you also need to logon interactively the tag them as 'upgrade' if you really hope to remove them.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-6813049616558396695?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/6813049616558396695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=6813049616558396695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/6813049616558396695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/6813049616558396695'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2008/08/speed-up-peoplesoft-project-comparison.html' title='Speed Up PeopleSoft Project Comparison And Migration Using Application Designer Command Line Parameters'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-8638191121486876076</id><published>2008-07-18T12:39:00.013+08:00</published><updated>2009-04-09T11:41:45.951+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Solaris'/><title type='text'>A Script Looking For Processes That Open Specific Ports</title><content type='html'>Question: In Solaris, how to know which process opens a specific port?&lt;br /&gt;&lt;br /&gt;There is an easy answer in Linux: lsof. However, Solaris doesn't deliver a similar command. So I need a workround to resolve it: using ps command to get pid of all processes, and use pfiles to find ports opened by those processes and match them with the given ports.&lt;br /&gt;&lt;br /&gt;I wrote the following script to manage it.&lt;br /&gt;&lt;br /&gt;Example of usage:&lt;br /&gt;&lt;br /&gt;pp 9000&lt;br /&gt;pp 9000 9001&lt;br /&gt;pp 9000-9010 9100 9200-9201&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/bash&lt;br /&gt;&lt;br /&gt;# The script lists the process that opens given ports&lt;br /&gt;&lt;br /&gt;# function printing usage message&lt;br /&gt;help_msg () {&lt;br /&gt; echo "Usage: pp &lt;port&gt;... &lt;port&gt;-&lt;port&gt;..."&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# initialize argument array&lt;br /&gt;aports=""&lt;br /&gt;&lt;br /&gt;# function appending a port to $aports&lt;br /&gt;append_arg () {&lt;br /&gt; if echo " $aports " | grep " $1 " &gt; /dev/null&lt;br /&gt; then&lt;br /&gt;   return&lt;br /&gt; fi&lt;br /&gt; aports=`echo $aports $1`&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# verify arguments&lt;br /&gt;if [ $# -eq 0 ]&lt;br /&gt;then&lt;br /&gt; help_msg&lt;br /&gt; exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# process arguments&lt;br /&gt;for arg in $*&lt;br /&gt;do&lt;br /&gt; if echo $arg | grep "^[0-9]*$" &gt; /dev/null&lt;br /&gt; then&lt;br /&gt;   #process single port&lt;br /&gt;   append_arg $arg&lt;br /&gt; elif echo $arg | grep "^[0-9]*-[0-9]*" &gt; /dev/null&lt;br /&gt; then&lt;br /&gt;   # process port range (&lt;port&gt;-&lt;port&gt;)&lt;br /&gt;   n1=`echo $arg | cut -d "-" -f1`&lt;br /&gt;   n2=`echo $arg | cut -d "-" -f2`&lt;br /&gt;   if [ $n1 -le $n2 ]&lt;br /&gt;   then&lt;br /&gt;     until [ $n1 -gt $n2 ]&lt;br /&gt;     do&lt;br /&gt;       append_arg $n1&lt;br /&gt;       n1=$((n1 + 1))&lt;br /&gt;     done&lt;br /&gt;   else&lt;br /&gt;     echo "Invalid port:" $arg&lt;br /&gt;   fi&lt;br /&gt; else&lt;br /&gt;   echo "Invalid port: " $arg&lt;br /&gt; fi&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;# loop arguments&lt;br /&gt;for port in $aports&lt;br /&gt;do&lt;br /&gt; echo "Port: $port"&lt;br /&gt; found=false&lt;br /&gt;&lt;br /&gt; # find processes&lt;br /&gt; for pid in `ps -ef -o pid | tail +2`&lt;br /&gt; do&lt;br /&gt;   for pport in `/usr/proc/bin/pfiles $pid 2&gt;/dev/null | grep "sockname:" | cut -d: -f 3`&lt;br /&gt;   do&lt;br /&gt;       if [ $pport -eq $port ]&lt;br /&gt;       then&lt;br /&gt;         found=true&lt;br /&gt;         echo "Process: $pid"&lt;br /&gt;         # echo "Command: " `ps -ef -o pid -o args | grep ^\ *$pid | cut -b7-`&lt;br /&gt;         echo "Command: " `pargs -l $pid`&lt;br /&gt;         #echo $pports&lt;br /&gt;         echo&lt;br /&gt;         break&lt;br /&gt;       fi&lt;br /&gt;   done&lt;br /&gt; done&lt;br /&gt;&lt;br /&gt; if ! $found&lt;br /&gt; then&lt;br /&gt;   echo "Not found"&lt;br /&gt;   echo&lt;br /&gt; fi&lt;br /&gt;done&lt;br /&gt;&lt;port&gt;&lt;port&gt;&lt;br /&gt;&lt;/port&gt;&lt;/port&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-8638191121486876076?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/8638191121486876076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=8638191121486876076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/8638191121486876076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/8638191121486876076'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2008/07/script-looking-for-processes-that-open.html' title='A Script Looking For Processes That Open Specific Ports'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-3296888947442168336</id><published>2008-07-10T17:13:00.011+08:00</published><updated>2008-07-18T12:38:42.430+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>How To Map A HTTPS-only Web Folder To A Drive</title><content type='html'>&lt;u&gt;Question:&lt;/u&gt; In Windows XP/2003, how to map a web folder which allows for &lt;strong&gt;only HTTPS&lt;/strong&gt; connections to a drive?&lt;br /&gt;&lt;br /&gt;Windows web folder is Microsoft's implementation of WebDAV (Web Distributed Authoring and Versioning). Two WebDAV clients: Web Folders and WebDAV Mini Redirector are integrated and preinstalled with Windows. Based on them, there are usually 2 methods to access a web folder in Windows:&lt;br /&gt;&lt;br /&gt;1) Use 'Add Network Place' in 'My Network Places',&lt;br /&gt;&lt;br /&gt;This always works regardless of the connection type (HTTP or HTTPS). However, you can't map a web folder opened this way to a drive.&lt;br /&gt;&lt;br /&gt;2) Use 'net use' at command line, as shown below:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;net use x: &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;http://domain-name/path-to-web-folder&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-size:+0;"&gt;&lt;span style="font-family:times new roman;"&gt;The web folder is mapped to a drive, but this method only works for HTTP connection because of the limitations of WebDAV Mini Redirector:&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;&lt;blockquote&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;No support for HTTPS, i.e. no support for secure connections, unless you are using Vista as a client. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;No support for declared ports (http://myserver.com:8080/dav/) i.e. your WebDAV server must be using port 80, the default port. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;No support for LOCK and UNLOCK commands, i.e. no locking if, for example, two users try to access (open) the same Word document. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Therefore, if a web folder supports only HTTPS connections, and you issue command: &lt;/p&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;net use x: &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;https&lt;/strong&gt;&lt;/span&gt;://domain-name/path-to-web-folder&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;p&gt;you are given an error message something like 'Sysytem error 67 has occurred. The network name cannot be found.' &lt;/p&gt;&lt;p&gt;A software called WebDrive does feature a function mapping a HTTPS web folder to a drive, but it is not free, unfortunately.&lt;/p&gt;&lt;p&gt;Good news is we can do it free, with the help of stunnel - a universal SSL wrapper.&lt;/p&gt;&lt;p&gt;Stunnel is a program that allows you to encrypt arbitrary TCP connections inside SSL available on both Unix and Windows. And it is licensed under GPL. We use it here as a proxy that encrypts a HTTP request to a HTTPS one and submits to WebDAV server. The details are below:&lt;/p&gt;&lt;p&gt;1) Download stunnel Win32 binary from &lt;a href="http://www.stunnel.org/download/binaries.html"&gt;here&lt;/a&gt; and install it. The latest release is 4.25.&lt;/p&gt;&lt;p&gt;2) Edit stunnel.conf that is located at 'c:\program Files\stunnel\', make the following changes:&lt;/p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;client=yes&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;verify=0&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/span&gt;&lt;/span&gt;and add the following section to the end of the file:&lt;/p&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;[psuedo-https]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;accept = 80&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;connect = domain-name&lt;domain-name&gt;:443&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;TIMEOUTclose = 0&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;The '&lt;span style="font-family:courier new;"&gt;domain-name&lt;/span&gt;' above refers to the WebDAV server's domain name or IP address. Save the changes and start stunnel, now you should be able to map the HTTPS web folder to a drive by issuing command:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;net use x: &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;http://&lt;span style="color:#ff0000;"&gt;localhost&lt;/span&gt;/path-to-web-folder&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;&lt;u&gt;Note:&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;This solution has been tested to work on Windows XP Pro SP3 and Windows 2003 EE SP2. &lt;/li&gt;&lt;li&gt;Please make sure WebClient service is on, and 'Networking Services' component has been installed with your Windows, otherwise you can't use 'net use' command to connect web folder.&lt;/li&gt;&lt;li&gt;If the WebDAV server requires Windows AD authentication, ie you must provide a user id in format of 'domain\user' and password so as to connect, you must logon to the domain first. My attempt to map a drive while logging on as a local user has failed, even I have forced stunnel to launch using a valid domain user id. The reason is not known yet. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;Reference:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://smallvoid.com/article/winnt-webdav-network-drive.html"&gt;http://smallvoid.com/article/winnt-webdav-network-drive.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simple-groupware.de/cms/Main/WebDAV"&gt;http://www.simple-groupware.de/cms/Main/WebDAV&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-3296888947442168336?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/3296888947442168336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=3296888947442168336' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/3296888947442168336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/3296888947442168336'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2008/07/how-to-map-https-only-web-folder-to.html' title='How To Map A HTTPS-only Web Folder To A Drive'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-8784150843492793888</id><published>2008-07-01T13:51:00.011+08:00</published><updated>2008-07-01T15:28:17.282+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Peoplesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Change Shortcut Key for Firefox Download Manager</title><content type='html'>&lt;span style="color:#000000;"&gt;Firefox is officially supported by Peoplesoft PIA, and it works fine most of the time. But advanced users may have found they were stuck when trying to invoke system info screen - they hit CTRL-J in FF as they did in IE but saw no system info appeared. Instead, FF popped up a download manager window.&lt;br /&gt;&lt;br /&gt;The reason is simple: CTRL-J is being used by FF as a shortcut key for download manager. And unfortunately, FF is not shipping a direct way for user to customize those keys. 'about:config' doesn't enable you to do that.&lt;br /&gt;&lt;br /&gt;But there are still ways to tweak it:&lt;br /&gt;&lt;br /&gt;1) With add-on. An unofficial FF add-on, &lt;span style="color:#ff0000;"&gt;'keyconfig'&lt;/span&gt;, is available at &lt;/span&gt;&lt;a href="http://forums.mozillazine.org/viewtopic.php?t=72994"&gt;&lt;span style="color:#000099;"&gt;http://forums.mozillazine.org/viewtopic.php?t=72994&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;. With that you are free to customize shortcut keys for FF, provided you know how to manually edit FF's user preference file (&lt;span style="color:#ff0000;"&gt;perfs.js&lt;/span&gt;). If you can't or don't want, install one more add-on, &lt;span style="color:#ff0000;"&gt;'functions for keyconfig'&lt;/span&gt; from &lt;/span&gt;&lt;a href="http://www.pqrs.org/tekezo/firefox/extensions/functions_for_keyconfig/index.html"&gt;&lt;span style="color:#000099;"&gt;http://www.pqrs.org/tekezo/firefox/extensions/functions_for_keyconfig/index.html&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;. This enables you to change keys through UI.&lt;br /&gt;&lt;br /&gt;2) Without add-on. Knowing where to get a tool is good, but doing it w/o a tool is cool, right? &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;Let's look at how FF launches download manager first. Explorer %FIREFOX_HOME%\chrome, find the following 2 files:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#ff0000;"&gt;browser.jar&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="color:#ff0000;"&gt;en-US.jar&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Unjar browser.jar into %TEMP%, find &lt;span style="color:#ff0000;"&gt;browser.xul&lt;/span&gt; from extracted files and open it in your text editor, you see a line that looks like&lt;/span&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&amp;lt;menuitem id="menu_openDownloads" label="&amp;amp;downloads.label;" &lt;span style="color:#ff0000;"&gt;key="key_openDownloads"&lt;/span&gt; accesskey="&amp;amp;downloads.accesskey;" command="Tools:Downloads"/&amp;gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color:#000000;"&gt;Note the highlighted 'key' attribute, this obviously defines a shortcut key for download manager menu. Remove it to disable the key.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;But what if you only want to change the shortcut key rather than disabling it? Let's look at how "key_openDownloads" is defined. In the same browser.xul, you see&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;lt;key id="key_openDownloads" &lt;span style="color:#ff0000;"&gt;key="&amp;amp;downloads.commandkey;"&lt;/span&gt; command="Tools:Downloads" modifiers="accel"/&amp;gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color:#000000;"&gt;The highlighted attribute denotes the key value, but how do we know what "&amp;amp;downloads.commandKey;" actually is? &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;Now extract en-US.jar into %TEMP%, find &lt;span style="color:#ff0000;"&gt;browser.dtd&lt;/span&gt; in which you see &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#ff0000;"&gt;&amp;lt;!ENTITY downloads.commandkey "j"&amp;gt;&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;The truth is out there!. Change 'j' to whatever you prefer, but make sure the new key doesn't conflict with other FF shortcuts. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Stuff the modified browser.xul or/and browser.dtd back into the jar files. Open FF and see whether it works.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;This tip applies to both FireFox 2 and 3.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-8784150843492793888?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/8784150843492793888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=8784150843492793888' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/8784150843492793888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/8784150843492793888'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2008/07/change-shortcut-key-for-firefox.html' title='Change Shortcut Key for Firefox Download Manager'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-8042449297270085745</id><published>2007-10-03T12:34:00.000+08:00</published><updated>2007-10-03T12:52:02.114+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Troubltshoot Error Occurred When Installing Office 2003 SP3 Into Windows VISTA</title><content type='html'>I had been trying to install Office 2003 SP3 into my new Thinkpad T61 laptop but kept failing. When trying intallation from Windows Update, it started normally but prompted error on the half way, and never gave a detailed explanation.&lt;br /&gt;&lt;br /&gt;I thought it might be Windows Update's fault and so download the separate installer from MS site, but the error persisted, except it gave a detailed error message somethign like 'no sufficient permission to c:\windows\system32\mapisvc.inf'.&lt;br /&gt;&lt;br /&gt;I checked the ACL of above mentioned file and found its owner is 'TrustedIntaller', which actually stand for Windows installer service instead of a real group in VISTA. And this file was read-only to the local administrators.&lt;br /&gt;&lt;br /&gt;So I made it owned by administrator, and grant write to administrators group. The the SP3 insallation was flying!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=921189&amp;amp;SiteID=17" target=_blank&gt;Here&lt;/a&gt; is the detailed explanation of 'TrustedInstaller'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-8042449297270085745?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/8042449297270085745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=8042449297270085745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/8042449297270085745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/8042449297270085745'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2007/10/troubltshoot-error-occurred-when.html' title='Troubltshoot Error Occurred When Installing Office 2003 SP3 Into Windows VISTA'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-6370683085011774436</id><published>2007-08-01T16:30:00.001+08:00</published><updated>2009-03-26T15:47:24.730+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VIM'/><title type='text'>Some Useful VIM Commands</title><content type='html'>- Go to current directory:&lt;br /&gt;&lt;br /&gt;:cd %:p:h&lt;br /&gt;&lt;br /&gt;- Covert DOS line feeds to Unix line feeds, or vice versa:&lt;br /&gt;&lt;br /&gt;:set fileformat=unix&lt;br /&gt;:w&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;:set fileformat=dos&lt;br /&gt;:w&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-6370683085011774436?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/6370683085011774436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=6370683085011774436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/6370683085011774436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/6370683085011774436'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2007/08/some-useful-vim-commands.html' title='Some Useful VIM Commands'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-4783205588716950746</id><published>2007-07-17T16:41:00.000+08:00</published><updated>2007-07-30T15:13:42.872+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2000'/><title type='text'>SQL Server Agent starting problem</title><content type='html'>A lot of people(indluding me) had problem starting SQL Agent and saw the following error from Event Viewer:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SQLServerAgent could not be started (reason: Unable to connect to server '(local)'; SQLServerAgent cannot start). &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There is a resolution &lt;a href="http://www.dbforums.com/showthread.php?t=584771"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This tip is go to EM-&gt;Management-&gt;SQL Server Agent-&gt;Properties-&gt;Connection, change windows authentication to SQL server authentication(you must provide an admin account/password such as sa).&lt;br /&gt;&lt;br /&gt;This fault took place because SQLSERVERAGENT service was by default set to started with a 'Local System Account', while local accounts were usually not added into SQL Server logins and granted  system admin role.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-4783205588716950746?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/4783205588716950746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=4783205588716950746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/4783205588716950746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/4783205588716950746'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2007/07/sql-agent-starting-problem.html' title='SQL Server Agent starting problem'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-5318023210470983599</id><published>2007-07-12T10:36:00.000+08:00</published><updated>2007-07-12T10:46:48.420+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>My Portrait</title><content type='html'>&lt;a href="http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s1600-h/Portrait_mid.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5086135753179161954" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;My son's work.&lt;br /&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/3499303456313294328-5318023210470983599?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/5318023210470983599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/5318023210470983599'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2007/07/blog-post.html' title='My Portrait'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s72-c/Portrait_mid.gif' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3499303456313294328.post-1844543985586943314</id><published>2007-07-12T09:11:00.000+08:00</published><updated>2007-07-13T13:30:22.571+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2000'/><title type='text'>A T-SQL script extracting DB schema info</title><content type='html'>Sometime I need to get a full view of a MS SQL database's schema details, e.g. user table and its columns, constraints, indexes, etc. And I prefer a plain text output instead of others (let's say XML). Since MS doesn't provide this and I can't find one from web, I wrote a script to implement this on my own:-&lt;br /&gt;&lt;br /&gt;&lt;a href=http://docs.google.com/Doc?id=ddjh6km2_0dcz7q5 target=_blank&gt;TSQL script&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The output is tab spearated and can be easily imported into Excel/Access for a better look.&lt;br /&gt;&lt;br /&gt;In write this I found TSQL in SQL 2000 is really depressing in constrast to PL/SQL. It event doesn't provide a convenient way of exporting output into an external file, as SPOOL command of PL/SQL does, unless COM is used. More terrible is the lack of support for parameterized cursor as well as 'inline' procedures or functions.&lt;br /&gt;&lt;br /&gt;Does SQL 2005 provide any significant enhancements?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3499303456313294328-1844543985586943314?l=devwfb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devwfb.blogspot.com/feeds/1844543985586943314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3499303456313294328&amp;postID=1844543985586943314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/1844543985586943314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499303456313294328/posts/default/1844543985586943314'/><link rel='alternate' type='text/html' href='http://devwfb.blogspot.com/2007/07/my-1st-post.html' title='A T-SQL script extracting DB schema info'/><author><name>devwfb</name><uri>http://www.blogger.com/profile/01611633354267787735</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_ZWSNC6u4A8k/RpWVhR-oZWI/AAAAAAAAAAU/EHQj7vLL6hQ/s320/Portrait_mid.gif'/></author><thr:total>0</thr:total></entry></feed>
