I'm speaking at OpenWorld 2017

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 https://developer.mozilla.org/en-US/docs/Web/XPath/Functions/position).

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.

1 comment:

Awesome said...

Very nice blog and i would also recommends JSON Formatter and JSON Viewer for JSON Lover