Monday, 5 October 2015

Oracle OpenWorld 2015

5 things not to miss at this years Oracle OpenWorld conference.

1. What's coming in PeopleTools 8.55?  Lookout specifically for information on what the tools team has done to make PeopleTools more cloud ready and what this means in practical terms.   The PeopleTools development team never disappoint.   Checkout the following sessions for all the detail...

2. Top PeopleTools blogger and developer expert Jim Marion will be presenting his ever popular PeopleSoft Developer: Tips and Techniques [CON8596] on Monday @ 12.15pm Moscone West 3007.  Always amazed at how much Jim packs into these famous Tips & Techniques sessions and with the creative ideas he gives us.

3. Lookout for Jim's new book  PeopleSoft PeopleTools: Mobile Applications Development .  Order now from Amazon or pick one of at the Oracle bookstore.  I'm sure Jim, along with many other members of the PeopleSoft team, will be around on the DemoGrounds to answer questions and demo all the latest stuff.

4. The PeopleSoft Tipster and Cedar technical consultant, Duncan Davies, will be presenting on Selective Adoption with Mark Thomas from Hays Recruitment.  PeopleSoft Selective Adoption Experiences from the Front Line [CON7071] is sure to filled with front-line real world experiences, tips and ideas on how to make Selective Adoption work for you.  Thursday @ 9.30am Moscone West #3003.

5. If you're doing anything with Fluid UI then you might want to look in on my own session on PeopleSoft UI: Fluid, Classic, or Both? A Decision for Every Customer - [CON2848] on Monday @ 4.00pm in Moscone West #3016.  I'll try and unpack the many choices around designing a user interface that works best for your users and figure out what to do with Classic UI now that we have Fluid UI.

Members of the Cedar Consulting team are presenting twice on this packed PeopleSoft agenda stream.  We were so excited at this opportunity to share our knowledge and discuss we produced a video.....

Looking forward to meeting with this wonderful PeopleSoft community again.   See you at OpenWorld.

Friday, 2 October 2015

Rowset to Excel - PeopleCode Friday #2

We all know that PeopleSoft grids can be exported to Excel using the button on the grid status bar.

But what if the data you want to export to Excel is not in a grid?  What if you need to programatically export data using PeopleCode.

I'm sure there are many ways to do this but I recently came across this useful technique for exporting RowSet record data to Excel.   Here's a working code sample.

The magic is in the use of the FormatResultString method from the Query class.  This accepts a rowset as input and will produce a string of HTML which when opened in Excel does just nicely.

HTML produced by the FormatResultString method

HTML opened in Excel

I've repeated the code below if you want to copy it.

 Local string &strExcel, &fileName;  
 Local File &exportFile;  
 /*Create a rowset. This can be a standalone or buffer rowset */  
 Local Rowset &rs = CreateRowset(Record.PSPRCSRQST);  
 Local object &qryObject = %Session.GetQuery();  
 /* Create a file on the application server */  
 &fileName = "Output_" | %UserId | %Date | %Time | ".XLS";  
 &exportFile = GetFile(&fileName, "W");  
 If &exportFile.IsOpen Then  
   /*Use the FormatResultString method of the Query object to generate Excel string */  
   &strExcel = &qryObject.FormatResultString(&rs, %Query_XLS, 1, &rs.RowCount);  
 /* Add attachment and view */  
 &putFileName = "files/" | &fileName;  
 /* Pickup the app server file, attach and view */  
 /* CommitWork is required as ViewAttachment is a thinktime function.  
   Using an iScript to view the attachment is another option here.   
   See Jim Marion here  
 &res = PutAttachment("record://PSFILE_ATTDET", &fileName, &putFileName, "PS_SERVDIR");  
 &res = ViewAttachment("record://PSFILE_ATTDET", &fileName, &fileName);  

Please feel free to discuss other methods you know of in the comments below.

Friday, 28 August 2015

Checkbox with Error - PeopleCode Friday #1

This is the first in what I hope to be a regular Friday feature on PeopleCode.  I hope you find these useful.

Today's puzzle came from a friend of mine David Jubber at BMI Healthcare - thanks David !

QUESTION:  What happens if you tick ON a check box but during the FieldEdit event an ERROR is thrown?

OPTIONS:  Would you expect it to display the error message and...

   (A) leave the check box ticked ON, or
   (B) leave the check box unticked

Figure 1 shows the PeopleCode behind the check box and I'm simply throwing an Error if the user is gsmith.
Fig 1. Code to validate the change of CheckBox

Fig 2. Error Message after check box ticked ON

ANSWER:  The answer is OPTION (A).  The tick is left ON even though the Edit (validation) fails the Edit test.

Is this what you were expecting?  It might not behave quite as you wanted.  After all ... the edit failed.... so clearly I shouldn't be allowed to tick the check box on.  So, let's try and code around this behaviour and undo the tick action with what seems like some obvious PeopleCode.  See Fig 3.

Fig 3.  Code to revert the tick action
However, as you can see from Fig. 4 it's not possible to make change to the current field in FieldEdit.  (you can read more on processing sequence in PeopleBooks ).

Fig 4.  Illegal operation to set current field value during FieldEdit


One possible solution might be to move the code from FieldEdit to FieldChange, use a MessageBox function instead of ERROR and handle the "exit error" from the event manually.   FieldChange allows the setting of current field and can therefore reset the checkbox value to OFF.

Interestingly, Radio Buttons do not behave the same.  This next example uses the same field and the same code but the radio button change is reset to it's original value if the Edit fails.

Fig 5. Radio buttons behave as OPTION (B)
  • Which one do you prefer?  
  • I wonder why they behave differently?  
  • Can anyone suggest another solution to revert the check box on ERROR?
  • Why doesn't the checkbox get highlighted red?
NOTE: I'm not responsible for the label typo on field object PTCHKBX.  That's a delivered PeopleTools object.  :-)

Tuesday, 18 August 2015

UKOUG Apps 2015 Conference

Two days of high quality PeopleSoft presentations and great networking opportunities sum up the annual UKOUG APPS15 conference at the ICC Birmingham on Tuesday 8th and Wednesday 9th December.

Check out the Agenda here.   Great to have Jeff Robbins (Senior Director, PeopleTools Strategy, Oracle) join us to give us first hand insight into the latest PeopleSoft software and upcoming enhancements.

On Wednesday I'll be presenting on PeopleSoft Fluid, Classic or Both: A decision for Every Customer

PeopleSoft 9.2 on PeopleTools 8.54 made available the Fluid user interface aimed at self service, casual and executive users. Many Classic self service components now have an alternative Fluid based component giving customers a choice of running Classic or Fluid versions. However, with choice comes the need to make decisions. This presentation explains what these choices are and some real world discussion on what decisions need to be made and offers some help in making them.

NOTE:  The APPS15 conference runs over 3 days but there is only PeopleSoft content on 2 days.  This is a great opportunity to meet PeopleSoft customers, partners and Oracle staff.  I hope to see you there.

Friday, 31 July 2015

Date formatting in PeopleSoft Pagelets

Following on from last weeks post on number formatting in Query you may have noticed that date and datetime fields display with different formats in PeopleSoft Query and Query Pagelets .  See Fig. 1 & 2 below for examples of this difference.

Fig. 1. Pagelet Date Formats (note the raw native dates)

Fig. 2. Query Date Formats (note the correct formatting)

So, why the inconsistency in formatting?  Well, I think this has to do with the XML document generated as source data for the Pagelet Wizard.  One of the issues with this XML is that it contains no field data type declarations.  Consequently the Pagelet Wizard XSL cannot distinguish XML element values that are dates from any other type of field.  See example XML source data in Fig 3.

Fig. 3. XMLQuery source data (no field type declarations)
You may have noticed that when running a PS Query to XML through Query Manager/Viewer there is also an absence of field declarations and also has date time values in native, raw unformatted text.  However, Query Manager/Viewer takes care of the date formatting for us.

So, if you want to format dates in your Pagelet results then you can use the same tag as used to format numbers.   PeopleBooks describes XSL ost transformation processing  here.

We first need to write some XSL which will identify the field you want to format.  What you write will depend on the method used by the XSL to process the XML.  For example if you are using the delivered Bulleted List XSL template then there is an iteration of the XML document using an
 <xsl:for-each ...=""> </xsl:for-each>  
construct.  This will apply the same XSL to every element in the querdata result set.  So to pickout just the date fields we need to test each field.   So, add an
 <xsl:when ...="" condition="" test="expression"> </xsl:when>  
 logic to identify the nth field.  An example of this is shown in Fig 4.

Fig. 4. Bulleted List iteration of XML querydata
In addition to testing column ordinal position (which of course could change if you add/remove fields from the). you can test for field names using the code in Fig.5. The field name is stored as an  attribute of the querydata element.  (read more on XPATH functions like position() here

Fig. 5. Evaluate fieldname attribute in the querydata element
If you're using the table layout XSL template then the XSL becomes a little more involved.  When working with XML I always like to format and syntax highlight.  I use these tools often

Anyway, back to XSL for Table based layouts in pagelets.  You'll find a block of XSL for each column so you won't need to try and work out which field your processing.  This makes targeting only the date fields easier.  Fig. 6 shows the PSFORMAT tag added into the XSL for table based Pagelet.

Fig. 6. PSFORMAT added to table based XSL template (note the position()=2 selector)

Hope you find this helpful and have as much fun with it as I did.

Monday, 20 July 2015

Number formatting in Pivot Grids and Pagelet Wizard

(1) Pivot Grid without number formatting
I recently had to solve a Pivot Grid and Pagelet Query number formatting problem.  By default numbers are not formatted to show thousand separator or currency symbols.  Without this common styling it's much harder to read large numbers.

I found this problem exists in PeopleSoft Query, Pivot Grids and Pagelets that render Query output.

Number Format in Pivot Grid

To control number formatting in a Pivot Grid model you need to include a Currency Code field in your Pivot Grid Query.  The value in this field is then used to drive currency symbol and thousand and decimal characters.  This field can then be used in Step 3 of the Pivot Grid Wizard to control currency symbol and/or thousand separator.  The PeopleSoft 3 character currency code is used to lookup currency symbol and the precision level at runtime from table CURRENCY_CD_TBL.

(2) Set Currency Control Field in Formatting Options.

Number Format in Pagelet Query

The Pagelet Wizard allows you to customise the XSL used to transform the Query XML data into HTML.  So, the obvious solution here is to use XSL language to handle the number formatting. After  all that's what XSL is for.  We could use an XSL function format-number() however in testing this in PeopleTools 8.54.08 I found it didn't have any effect (See example in screenshot (5) below) .  If I take the XML and XSL and do the transform outside of PeopleSoft using something like or XML/Spy then it works just fine.  I don't know why the PeopleSoft XSL transform engine is not correctly processing this function.  So I asked around and a friend of mine pointed me to a blog entry by PeopleSoft Blogger David who refers to Pagelet Wizard Post-Transformation Processing in which there are some very useful post processing tags.  Using the delivered PeopleSoft PSFORMAT tag has a number of advantages over the standard format-number() function in that it is aware of PeopleTools meta data and can automatically deal with such things as inserting the correct currency symbol and the precision level (did you know that the Kuwaiti, Jordanian and Tunisian Dinar has 3 decimal places?)

 You can see the effect of this in the screenshots below (3).  I've also added align="right" to the table div so that it right aligns my numbers.  I've only targeted columns that I want to format (ie not Year values)  and these are in column 6 and 7.

         <xsl:when test="position()=1">  
             <PSFORMAT TYPE="NUMBER" FORMAT="%10.2v"><xsl:value-of select="text"/></PSFORMAT>  
             <xsl:value-of select="text"/>  

(3) Using the PSFORMAT post processing tag to format numbers

(4) Example of Formatted and Unformatted Pagelets
In the Table XSL template each field in the querydata collection is processed one at a time and are numbered in the XSL text.  However, other XSL templates such as the Bulleted List use  < xsl:for-each select="text" > to iterate through the querydata values.  Again, you'll need to test for specific columns to apply format to only the number fields.

(5) Use the position() function to identify specific columns

Monday, 8 June 2015

Windows Drive Mappings

Recently, TheSmartPanda blogged on a common problem found when trying to use drive mappings from a command window running in elevated/admin mode.

Just wanted to share another way of dealing with this.  This Microsoft article explains why this problem occurs and documents are more permanent workaround.

Class 43 Diesel at London Paddington

Tuesday, 2 June 2015

What is a modern software solution?

Oracle’s vision for the future of PeopleSoft.  Recent conversation between Marc Weintraub (Senior Director of PeopleSoft Product Strategy) and Jo Randles (Cedar’s Head of HR Optimisation).

Jo: What would you say to those individuals that might think that PeopleSoft is considered a bit old-school?

Mark: "I turn that around and ask customers... you're looking for a modern solution. ... I consider a modern solution is 
  • intuitive and simple user experience
  • available on mobile devices
  • has incredible amounts of functionality
  • can be deployed and provisioned rapidly
  • can get new updates without disruptions
That's what PeopleSoft does now.  I would say PeopleSoft is a modern solution"

Watch the video here 

Tuesday, 19 May 2015

Fluid Landing Page or Classic Portal Homepage ?

For PeopleSoft 9.2 customers that are thinking about Fluid there are many questions to answer.  I don't think it's as simple as "should I use Fluid or not".

Fluid is the name of a new user interface in PeopleSoft which is designed for self service, casual and executive users.  It's important to be aware that this new user interface is experienced at both a component (application) level and at a landing page (first page visible) level.

Throw the classic PeopleSoft Portal into the mix and it starts to get interesting.

Here are just a few of the questions and implications if you decide to "use Fluid".  There are no easy answers to these questions so a I simply offer some discussion.  Feel free to comment.  I'll be blogging a few suggestions over the next few weeks.

Q1) What do your users see when they first signin?  The Fluid landing page or the Classic Portal Homepage?  They look, behave and function very differently but essentially they both represent the initial view from which users will navigate to applications and/or view key business information (eg pagelet charts, queries, etc).  It potentially gets confusing for users if you give them both.  For example a user may log into PeopleSoft on their desktop PC and see the Classic Portal Homepage but then on their mobile device they see Fluid Landing page.

Fluid Landing Page

Classic Portal Homepage

Q2) Should I use the Fluid component or Classic component?  (for example in HR self service there is both a Fluid and Classic version of Absence Request).  Not all components have a Fluid equivalent and not all will because Fluid is primarily targeted at self service users.  The reality is that if you choose to use Fluid where it exists and Classic for all other components then some users will inevitably be switching between Fluid and Classic.  Potential for more UI confusion.  It's nice and tidy for the user who has 100% self service - give them access to the Fluid component only and all they will experience is Fluid.  However, if a user has both self service and access to the more complex classic components, then by using Fluid for the self service part this user will experience both user interfaces.

Q3) If I adopt Fluid then do I show the Fluid component on all devices my users might log in with or do I just restrict Fluid to truly mobile devices?  For example:  If a user logs in on a cell phone at home they may see the Fluid Landing page and Fluid components but back at the office, on a desktop do you show the Fluid Landing page and the Fluid component or the Classic Homepage and Fluid component or (more confusing still) the Classic Homepage and Classic component.  More potential confusion at the UI level if you determine the user interface (Classic or Fluid) based on what device they're using.

I'll be blogging some suggestions in time but please feel free to comment below.

Friday, 15 May 2015

My last day at Oxfam

Today is my last day at Oxfam. After over 18 years I figured it was time to move on and gain some new experiences.

Oxfam has been using PeopleSoft applications since 2000 and I joined the team in 1997 on a 1 year contract to help with supplier selection and implementation.  I loved it so much I stayed another 16 years.  Oxfam now has over 4,000 users in around 75 countries using PeopleSoft FSCM and HR to manage their global finances, logistics, project management and HR functions.


It's been a thrilling place to work - the challenges have been many and great but the people and Oxfam's mission have made it all more than worthwhile.  We have, together as a team, produced a system that has made a real difference to Oxfam's work worldwide.  I'm immensely proud to have been part of that and count it a real privilege to have worked with some truly wonderful people.

But the future holds some new challenges and experiences.  I'm looking forward to joining the team at Cedar Consulting and will, of course, still be part of the Oracle PeopleSoft community.