Categories
CRM Peoplecode Peoplesoft PeopleTools

PeopleSoft CRM 9.1 Case Corruption from My Cases Pagelet

There is a nasty bug in PeopleSoft CRM 9.1 that can lead to case data being overwritten by data from another case.

Just open two different cases from the My Cases pagelet. Each opens in a new window but they have identical URLs apart from the CASE_ID. The effect of this is that changes made to one case result in the component globals such as CASE_ID being overwritten on the second tab. If that tab is then saved, then incorrect data is written back to the database. Insidious little bug.

Categories
Peoplesoft PeopleTools Upgrade

PeopleTools Upgrade to 8.53.20

I have just completed a PeopleTools upgrade from 8.52.10 to 8.53.20 on a production CRM 9.1 MP5 system. Everything went very smoothly but it was a very intense weekend due to the size of the production stack and the need to ensure all the configurations were correct. The environment to be upgraded comprise:

  • 4 web-only servers on Windows 2008 R2 each with a single PIA
  • 8 application servers on Windows 2008 R2 running 7 application server domains, 3 process schedulers, 1 dedicated PUB/SUB domain and 1 shared search server.
  • 1 clustered SQL Server 2008 R2 database

Things to watch out for on the upgrade, and some techniques I used to speed/simplify the process:

Categories
Integration Broker Peoplesoft PeopleTools

PT 8.5x Integration Broker connection to pre-8.50 Node

Although not visible, all 8.4x nodes have a default Domain Connection Password of ‘PS’. During the security hardening process for Peoplesoft 8.5x this type of hidden password was made required and the hidden defaulting logic removed.

To connect to an 8.4x system from PeopleTools 8.53 and 8.54 onwards you must specify the password. You can override the password in the config of the 8.4x system to be something other than PS – in fact you should do that. But to get things working when you cannot “ping” the old node, try ‘PS’ (upper case) as the password.

Categories
App Engine Peoplecode Peoplesoft

Where you do CreateRowset does matter …..

In Peoplecode, it is common to see this construct:

1
Local Rowset &rs = CreateRowset(Record.RECNAME);

Often, this construct is used within a loop. But this is not a “free” statement – it goes to the database:

1
SELECT {column_list} FROM {tab_name} WHERE 1=2

Which, on SQL server would get wrapped in a SET FMTONLY ON / SET FMTONLY OFF statement pair in order to get the column META-DATA (describe output).

But if you use the above construct inside a loop, then there will be “n” executions of the above SQL – so “n” database round trips too. This is not free and will impact your performance.

Better to define the rowset at the component level and re-use inside the loop.

PS: The same applies to CreateRecord(Record.RECNAME). Think about where you place these statements in your code – especially in App Engine code where you are likely to be looping through rows..