Category: PeopleTools

New Tables

I found some additional PeopleTools system tables that I am adding to my reference.

The PSPNLCNTRLDATA table stores additional settings for each field on the page.  For example, it holds the new fields PTGRDLAYOUT and GRIDROWS in PeopleTools 8.50 relating to scrollable grids.

The PSPNLFIELDEXT table also stores additional settings for the fields on the page.

The PSPTPNLRTEDITOR is a new table to PeopleTools 8.50 that stores settings related to the new rich-text editor on long character fields.

In the process of researching, I found a huge PeopleTools Tables Reference.

Here is another related tid-bit.  Here is how to decipher the bits in the UseEdit flag (for Oracle):

SELECT FIELDNAME, USEEDIT ,
BITAND(USEEDIT,1) BIT1,
BITAND(USEEDIT,2) BIT2,
BITAND(USEEDIT,4) BIT4,
BITAND(USEEDIT,8) BIT8,
BITAND(USEEDIT,16) BIT16,
BITAND(USEEDIT,32) BIT32,
BITAND(USEEDIT,64) BIT64,
BITAND(USEEDIT,128) BIT128,
BITAND(USEEDIT,256) BIT256,
BITAND(USEEDIT,512) BIT512,
BITAND(USEEDIT,1024) BIT1024,
BITAND(USEEDIT,2048) BIT2048,
BITAND(USEEDIT,4096) BIT4096,
BITAND(USEEDIT,8192) BIT8192,
BITAND(USEEDIT,16384) BIT16384,
BITAND(USEEDIT,32768) BIT32768,
BITAND(USEEDIT,65536) BIT65536,
BITAND(USEEDIT,131072) BIT131072,
BITAND(USEEDIT,262144) BIT262144,
BITAND(USEEDIT,524288) BIT524288,
BITAND(USEEDIT,1048576) BIT1048576,
BITAND(USEEDIT,2097152) BIT2097152,
BITAND(USEEDIT,4194304) BIT4194304,
BITAND(USEEDIT,8388608) BIT8388608,
BITAND(USEEDIT,16777216) BIT16777216,
BITAND(USEEDIT,33554432) BIT33554432,
BITAND(USEEDIT,67108864) BIT67108864,
BITAND(USEEDIT,134217728) BIT134217728,
BITAND(USEEDIT,268435456) BIT268435456
FROM PSRECFIELDALL
WHERE RECNAME = 'MIS_TEST_LONG'
AND FIELDNAME IN ('EMPLID', 'ACTION_TEXT');

For a reference on the UseEdit field, check out this link. I found that the second to last one is the new “Allow Search Events for Prompt Dialogs” option.  To find records that have this option selected, you can use this query:

SELECT * FROM PSRECFIELDALL 
WHERE BITAND(USEEDIT,134217728) <> 0;

Good Looking Messages

I have often wanted to display an informational message at the top of the page.  Rather than just slap a Long Edit Box at the top of the screen, I decided to look for a nice looking way to do it.  One of the great things about PeopleSoft, it always has an example somewhere in the huge product for what you are trying to do.

Here are some of the messages that I found:

Information Message:

Example Page: SSS_STDNTCTR_SR_SP

Here are the different pieces:

  • Stylesheet of the page: SSS_STYLESHEET
  • Group Box:
    • Label Stylesheet: PAGROUPBOXLABELINVISIBLE
    • Body Stylesheet: SSSMSGINFOFRAME
  • Static Image:
    • Image: PS_CS_MESSAGE_INFO_ICN
    • Size: 23×23
  • Static Text:
    • Style: SSSMSGINFOTEXT

Alert Message:

Example Page: SSF_SS_ERRORMSG

Here are the different pieces:

  • Page Stylesheet: SSS_STYLESHEET
  • Group Box
    • Label Stylesheet: PAGROUPBOXLABELINVISIBLE
    • Body Stylesheet: SSSMSGALERTFRAME
  • Push Button (for the image, you could use a static icon instead)
    • Image: PS_CS_MESSAGE_ALERT_ICN
    • Size: Large Icon
  • Long Edit Box (works the same as the static textbox, but lets you change it from code)
    • Stylesheet: SSSMSGALERTTEXT
    • No Label

Instructions for Cloning a Database

In an OTN Discussion Thread, I saw that Nicholas Gasparotto pointed out a document with instructions on cloning PeopleSoft instances.

The document is ID #643499.1 on support.oracle.com.  You can find it by pasting the document ID in the search box on the upper right-hand corner just after you login.

The information seemed like it had some great pointers, and if you haven’t already seen it, you might want to read through the steps to make sure you are taking all these things into account.  On the other hand, I think it is very important to keep a step by step list of tasks for your particular system that you keep up to date.  You will probably have specific things that you have to do for your environment that are unique to your installation.  For example, if you are cloning to a test environment, what about blanking out the email addresses so that test emails don’t get sent out as production emails.  Also, some people put a special message in the heading of the test instances so that it is obvious when you are in Test versus Production.

Thanks, Nicholas for the pointer — this is something I want to keep handy.

Record Type Values

Here are the values for the RECTYPE field in the table that stores the information about the records in PeopleSoft: PSRECDEFN.  Here are what the values mean:

  • 0 = SQL Table
  • 1 = SQL View
  • 2 = Work Record
  • 3 = Subrecord
  • 5 = Dynamic View
  • 6 = Query View
  • 7 = Temp Table

For example, you can do something like this to find all the tables that have the OPRID field:

SELECT A.RECNAME
FROM PSRECDEFN A, PSRECFIELDALL B
WHERE A.RECNAME = B.RECNAME
AND A.RECTYPE = 0
AND B.FIELDNAME = 'OPRID'

See the PeopleTools Tables for more information.

PeopleTools 8.50 App Server Location

In installing PeopleTools 8.50/HCM91, I noticed that PeopleTools began placing its Application Server configuration files in a different location.  Instead of finding them in %PS_HOME%/appserv, I found them at %USERPROFILE%\psft\pt\.  The culprit appears to be the PS_CFG_HOME environment variable. I found the documentation for this on page 30 of the Enterprise PeopleTools 8.50 Installation for Oracle (Task 1-5-7: Defining Server Domain Configurations).  I also just found a pretty good link in PeopleBooks about the settings. In order to fix my problem, I did the following:

  • Shut the Application Server and the Process Scheduler Server down
  • Configured the PS_CFG_HOME variable
    • Right click on My Computer
    • Choose Properties
    • Go to the Advanced Tab
    • Click on the Environment Variables
    • Add a new system variable
    • Enter PS_CFG_HOME for the variable name
    • Enter the path to the PeopleSoft Home directory for the value
  • Copied everything from the %USERPROFILE%\psft\pt to the PeopleSoft Home directory.  There were several folders that it wanted to merge, but I didn’t see any files that it wanted to overwrite.  I skipped the peopletools.properties file because it was the same in both locations.
  • Checked the value of %PS_CFG_HOME% in a Command Window.  If the value is not accurate, you might need to close the window and reopen a new one.
  • Reconfigured the Application Server and Process Scheduler (I didn’t change any values, but this let it regenerate the configuration files)
  • Booted the Application Server and Process Scheduler

PeopleTools Bug: Job Data CI

This is another look at an old post.  In summary, the problem is that when you create a Component Interface for the Job Data component, PeopleTools errors.  I decided to attempt to diagnose the PeopleTools bug by tracing it.

I tried this in PeopleTools 8.49.

Here are the last lines of the trace file:

1-8280 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8281 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8282 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8283 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=17 value=CONT_SAL_TYPE_BRA

1-8284 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=536

1-8285 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8286 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8287 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8288 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8289 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8290 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8291 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=17 value=CONT_SAL_TYPE_BRA

1-8292 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8293 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8294 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25008

1-8295 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8296 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8297 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8298 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=11 value=DUTIES_TYPE

1-8299 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=523

1-8300 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8301 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8302 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8303 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8304 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8305 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8306 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=11 value=DUTIES_TYPE

1-8307 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8308 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8309 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25009

1-8310 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8311 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8312 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8313 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=14 value=INTCP_BUS_UNIT

1-8314 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=512

1-8315 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8316 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8317 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8318 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8319 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8320 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8321 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=14 value=INTCP_BUS_UNIT

1-8322 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8323 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8324 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25010

1-8325 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8326 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8327 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8328 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=13 value=INTCP_COMPANY

1-8329 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=516

1-8330 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8331 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8332 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8333 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8334 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8335 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8336 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=13 value=INTCP_COMPANY

1-8337 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8338 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8339 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25011

1-8340 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8341 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8342 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8343 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=14 value=INTCP_COMPANY2

1-8344 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=517

1-8345 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8346 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8347 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8348 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8349 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8350 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8351 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=14 value=INTCP_COMPANY2

1-8352 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8353 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8354 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25012

1-8355 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8356 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8357 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8358 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=12 value=INTCP_DEPTID

1-8359 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=513

1-8360 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8361 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8362 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8363 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8364 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8365 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8366 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=12 value=INTCP_DEPTID

1-8367 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8368 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8369 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25013

1-8370 06.50.32 3.335000 CMgrUpdateTransaction::OnAbort

1-8371 06.50.32 0.000000 CMgrUpdateTransaction::OnAbort

1-8372 06.50.32 0.111000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 COM Stmt=SELECT DISPLAYONLY FROM PSOPROBJ A, PSOBJGROUP B WHERE B.ENTTYPE = :1 AND B.ENTNAME = :2 AND A.CLASSID = :3 AND (A.OBJGROUPID = '*ALL DEFINITIONS*' OR A.OBJGROUPID = B.OBJGROUPID) UNION SELECT 2 FROM PSOBJGROUP WHERE ENTTYPE = :4 AND ENTNAME = :5 ORDER BY 1

1-8373 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 SSB column=1 type=6 length=4 scale=0

1-8374 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=1 length=1 value=D

1-8375 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=2 length=1 value=

1-8376 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=7 value=HCPPALL

1-8377 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=1 length=1 value=D

1-8378 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=2 length=1 value=

1-8379 06.50.32 0.001000 Cur#1.4240.HCM90 RC=1 Dur=0.000000 Fetch

1-8380 06.50.35 3.214000 Tuxedo session opened { DisconnectAll at01C88868, pid=4240}

Here is the insert statement that the error message reported:

INSERT INTO PSBCITEM ( 
    BCNAME, BCTYPE, BCITEMPARENT, BCITEMNAME, 
    SEQUENCE_NBR_6, BCACCESS, BCSCROLL, BCSCROLLNUM, 
    BCSCROLLNAME, RECNAME, SUBRECNAME, FIELDNAME, COMMENTSHORT, 
    MPDEVICEPERSISTINT, SYNCID
) VALUES ( 
    :1, :2, :3, :4, 
    :5, :6, :7, :8, 
    :9, :10, :11, :12, :13, 
    :14, :15
)

So, I looked up the table, and the keys are the first four fields: BCNAME, BCTYPE, BCITEMPARENT, and BCITEMNAME.

Assuming the last row is the duplicate, that means that another row has the same parent and name as:

Type = 4

Parent = JOB_JR

Item Name = INTCP_DEPTID

I did a search through the trace, and the INTCP_DEPTID only exists in this one location.  So, I don’t know what the problem is — our mystery goes unsolved.  What makes it more confusing is that saving a second time fixes the problem.

Maybe I will pull all of the Bind values into an Excel and see if I can find duplicates that way.  But, that is an exercise for another day.

PeopleTools 8.50 Update

I just noticed the other day that Oracle has a planned PeopleTools 8.50 release date.  According to Doc ID 813258.1, the date is 9/18/2009!

In addition, here are a few more links I found of people who are talking about it:

AutoLogin GreaseMonkey Script

Here is a GreaseMonkey Script that changes the languages options on the PeopleSoft login page to users’ names.  When you click on the user’s name, it populates the username and password.  It is great for when you are testing Workflow or something like that.


// ==UserScript==
// @name           PSautologin
// @namespace      http://psst0101.wordpress.com
// @description    Automatic Login for PS
// @include        http://ps_server:*/psp/*/EMPLOYEE/ERP/?cmd=logout
// @include        http://ps_server:*/psp/*/?cmd=login*
// @include        http://ps_server:*/psp/HR90CNV/*/HRMS/?cmd=logout
// ==/UserScript==

// set up jQuery variable
var $;

// Add jQuery
var GM_JQ = document.createElement("script");
GM_JQ.src = "http://code.jquery.com/jquery-latest.min.js";
GM_JQ.type = "text/javascript";

document.body.appendChild(GM_JQ);

// Check if jQuery's loaded
var checker=setInterval(function(){
if(typeof ($ = unsafeWindow.jQuery) != "undefined") {
clearInterval(checker);
letsJQuery();
}
},100);

// All your GM code must be inside this function
function letsJQuery() {
var selectALanguage = $('.pslanguageframe .psloginlabel:contains("Select a Language")');
selectALanguage.text("Select A User:");
$('.pslanguageframe .pslogintext').toggleClass('skpremove');
$('.pslanguageframe .pslogintext').text("Hello");
$('.pslanguageframe .textnormal').remove();
$('.pslanguageframe .pslogintext:first').text("test");
addUser('PS', 'PS');
addUser('VP1', 'VP1');
$('.pslanguageframe .skpremove').remove();

$('table:first table:first > tbody > tr:eq(1) td').html('<a href="http://serverWithList/">Other Instances</a>');
}

function addUser(userName, password) {
var newLink = $('.pslanguageframe .skpremove:first').html("<a href='javascript:login'>" + userName + "</a>").toggleClass('skpremove').children('a');
newLink.attr('userName', userName);
newLink.attr('password', password);
newLink.click(loginwith);
}

function loginwith() {
userName = $(this).attr('userName');
password = $(this).attr('password');

$('#userid').val(userName);
$('#pwd').val(password);

// don't trigger URL for link
return false;
}

Looking for Orphan Rows

Here is some SQL that you might find helpful:

SELECT ‘SELECT ”’ + C.RECNAME + ”’ AS RECNAME, OPRID FROM ‘ + D.TABLENAME +
‘ A WHERE NOT EXISTS (SELECT ”X” FROM PSOPRDEFN B WHERE A.OPRID = B.OPRID) UNION ‘
FROM PSRECFIELDALL C,
(SELECT RECNAME, SQLTABLENAME AS TABLENAME
FROM PSRECDEFN
WHERE SQLTABLENAME <> ‘ ‘
AND RECTYPE = 0
UNION
SELECT RECNAME, ‘PS_’ + RECNAME AS TABLENAME
FROM PSRECDEFN
WHERE SQLTABLENAME = ‘ ‘
AND RECTYPE = 0
) D
WHERE C.RECNAME = D.RECNAME
AND C.FIELDNAME = ‘OPRID’

This Query writes a huge SQL Statement that looks for rows in any table that has an OPRID that does not exist in the PSOPRDEFN table.

Here is how to use it:

  • Run the SQL Statement
  • Copy all of the rows as a new query
  • Remove the last Union from the last line
  • You might want to add “ORDER BY 1” at the end to get it in record order
  • Execute the newly generated query

Note, this pattern can be replicated for other fields or situations too.  It is not just limited to use with OPRID.

PSUnit

I just noticed Jim’s annoucement of PSUnit, a tool for automated testing in PeopleSoft.   I had to link it so I could come back and give it a try.  To download load it, look for the link at the bottom of the PeopleSoft Technology Blog post.

In my opinion, automated testing would be huge for PeopleSoft.  It is such a huge and complex system that a complete system test requires many users to perform many different actions.  Maintaining a series of automated tests would allow an organization to run a full test everytime they apply a tax update, bundle, or any sort of modification to their system.

Well, I will report when I get a change to play with it some more.

Resources

Jim’s PeopleSoft Journal: Test Driven Development for PeopleSoft

PeopleSoft Technology Blog: PSUnit