Pages

Sunday, 11 April 2021

PeopleTools 8.59


Very excited about the latest PeopleTools 8.59 release.  Available on PeopleSoft Cloud Manager 12 from 9 April 2021 this release is packed with many new features and enhancements.

Cloud Manager 12 was released in March and so I got to work straight away installing this hoping that 8.59 was going to follow soon after.  I didn't have to wait long.

To get your hands on 8.59 you'll need Cloud Manager 12.  The CM12 install is pretty straight forward and there's some good guides out there from Oracle on how to get started.  You'll need an OCI tenancy and a little bit of cloud networking and OCI skills but you won't be able to get your hands on PeopleTools 8.59 without it so, get stuck in.  Give us a call at Version 1 if you need any help.  There's some nice features in CM12 which I've started to test and hope to write up on my experiences soon.

So, how do you get access to PeopleTools 8.59?

1) Use Cloud Manager to provision an 8.58 instance from a HCM, FSCM, Campus, ELM or CRM latest image. When I'm doing tools patches or upgrades I use the Cloud Manager Clone Environment feature to make a replica of an already provisioned Environment.  The Clone process only takes several minutes compared to nearly 2 hours to create a new Environment.  I make as many Clones as I want from the same Environment and that way I can repeat update operations to them over and over again.  This is a very nice feature! 


2) Use Cloud Manager to subscribe to the new 8.59 Linux and Windows Channels. You won't see these channels unless you upgrade to CM12 or install a fresh instance of CM12.  Once the DPKs are downloaded to your Cloud Manager Repository they are available in the \cm_psft_dpks File System mount point so if you wanted to take them on-premises I guess you could. 



3) Use Cloud Manager to perform a PeopleTools Upgrade of your PUM image.  At the time of writing (11 April 2021) the latest images are all delivered on tools 8.58.  I would expect the next HCM 38, FSCM 40, Campus 21, CRM 20 and ELM 22 images to be issued on the latest tools release but it may take a few images for the release cycle to catchup.  Until then we have to upgrade from 8.58 to 8.59 but this is super easy with Cloud Manager. 



This Upgrade PeopleTools step takes just under 3 hours and it gives you plenty of time to go and do something useful.  Something like watching your 12 year old son play football in the first match after Covid-19 restrictions were lifted on outdoor sports.  They were losing 1 - 0 after a determined battle only to level it 1 - 1 in a thrilling closing few seconds of the game.  

Cloud Manager is written using Fluid so I was able to check the status of my upgrade during the match half time break.

Looking forward to exploring some exciting news features in 8.59 including 

  • Real-time Elasticsearch indexing.  Hoping that I can configure components to update the associated ES index on save.
  • Application Services Framework. Hoping to make REST web services and PeopleSoft a little bit easier to use with support for Open API standard.
  • Homepage redesign with Search front and centre.  Hoping for some innovation in UI design to shine through here.
  • Event Mapping event override feature.  Long overdue ability to have my custom code replace a delivered event code.
  • Lifecycle Management enhacnements to the customisations repository and the automatic PRP download and apply.
  • And so much more.

Tuesday, 9 March 2021

Did you know? 3-tier Debugging in Application Designer is very useful

 

I'm a developer and so I work with lines of code, variables and complex data types like Rowsets, Arrays and the like.   I often need to debug and troubleshoot my own code and, also code written by others. 

Application Designer is missing some features that you'd expect from a web application IDE.   I'm not going to try and defend App Designer but I will say that if you want a feature rich ERP system with a good development and configuration tool then PeopleSoft ticks a lot of boxes.  But, on the other hand, if you need a comprehensive  development tool from which you build any application then you'd probably chose some other IDE.  Anyway.... things like code folding, code completion, refactoring features, etc.  are somewhat missing in Application Designer but I'm happy to live without those things because I have access to real-time PeopleCode debugging !  

Why use a debugger?

  • Inspect variable type and values at runtime
  • Understand the structure and flow of code especially complex component, nested methods or function calls
  • Accelerate the development process

Did you know this even existed?   It's pretty cool and you'll wonder how you ever managed without it.

Quick setup guide below or watch the video if you want to learn more. 


How to setup

My quick notes are just a summary.  The PeopleSoft Online documentation will provide more details on setup and usage.  

1. Enable WSL and PC Debugger in the Application Server domain.  You need these 
  • WSL is needed because Application Designer is going to connect to the Application Server domain (3-tier) rather than directly to the database (2-tier).
  • Debugging process  PSDBGSRV is required so that the Application Server Domain can link a PIA session with your 3-tier 

2. Configure Application Designer to make a 3-tier connection by adding a new Profile.



Tuesday, 23 February 2021

Did you know? Search Keys are shared from one Component to another ?


Components which share the same Search Keys will always pass the Key values to the other.  

We can read about this standard behaviour in the  PeopleCode and the Component Processor > Search Processing in Update Modes 


Alternatively, we can see this at work in any PeopleSoft system by navigating to 

PeopleTools > Security > User Profiles > User Profile

Search for any OPRID and open the User Profile Component

Now navigate to 

      PeopleTools > Security > User Profiles > Copy User Profile

and we'll see that it's automatically passed the OPRID from the first component into this one ready for you to use.

I've worked on several PeopleTools 8.58 upgrade projects recently and discovered a bug which I thought might be useful for the community to know about and some ideas for a resolution.

To demonstrate the issue we need to create a Fluid Navigation Collection which contains the portal folder User Profiles.


We can use the Tile Wizard to create a Fluid Tile which opens this Navigation Collection.

There's a bug in PeopleTools 8.58 (Patch 9 and earlier) which means that Search Keys are not passed from one Component to another if you're operating in the context of a Fluid Navigation Collection.  This might not seem like a serious issue but when users are working on multiple components for the same entity (e.g OPRID in our case here) then they'll soon notice this.  And, of course, the very reason we created the Nav Collection in the first place is to group related Components together to reduce the amount of time spent traversing the menu.

You can see the effect of this issue in the video below.


Solution

We might need to wait until this is fixed in a PeopleTools patch (currently targeted for patch 10 under Bug ID 31890562 )  See Doc ID 2714929.1

But, depending on the impact of the issue on your users you could provide a low impact workaround using Event Mapping and a Global variable.

On Component PreBuild of each component get the Keys from the Search Record and set a Global variable,

On SearchInit of each Component simply read the Global Variable and (optionally) set the SearchDialogBehavior(0) to force the processing of the Key. 

The video below is a quick walk through of this hack.


I got this working on my two sample Components.  This is only a few hours work for a potentially big pay off and it's a totally isolated customisation because we're using Event Mapping.

Any other ideas or suggestions?

Tuesday, 12 January 2021

5 Things for 2021

5 Things to do in 2021 if you work with PeopleSoft

Happy New Year  !  

When we say this to one another, we hope that this year, this new year will be a happy one.  But no one can know what will happen this year and I don't think that by me wishing anyone a "happy new year" that it will indeed be a happy one.  So what do we really mean when we say "happy new year"?

Well, the word happy comes from the old Middle English word hap which means lucky or fortunate.  So, "happy new year" becomes a wish for someone to have a "fortunate new year".

Hmmm...?  I still have a problem with that.  Are my words magical in some way?  If I wish that someone has a fortunate year does it mean they will?  I don't think so. But I can still hope & try.

I hope that you and I together will try and contribute something positive to bring about a happy new year, in some small way, in our corner of this amazing planet and hope for a more kind, more helpful, more happy, more fortunate and more thankful world.

So, philosophical ramblings out of the way.... down to PeopleSoft business.

As a PeopleSoft professional what should you be doing this year?    Well, I'll tell what I'm going to be doing.  Maybe this will be helpful to someone.

(1) Upgrade to the latest PeopleTools release.  Right now (January 2021) that means PeopleTools 8.58.  But, have you read about some of the exciting things coming in 8.59?  Check it out here http://www.peoplesoftpfe.com/.  Lots of exciting things planned for the next Tools release.  And when will PeopleTools 8.59 be released?  Well, I don't know. But, the average gap between PeopleTools releases since 8.51 has been 468 days (yes... I know... I really did work it out).  8.58 landed 18 December 2019 so add 468 days to that and you get 30 March 2021.  I'm just playing an averages game here.  It could be earlier and it could be later.

Anyway, why should you get onto the latest PeopleTools release?

  • Take learn about and take advantage of new features.  For example you don't get Kibana without 8.58.
  • Stay supported 
    • 8.57 is already out of platform and fix support.
  • Stay Secure
(2) Get involved in the PeopleSoft and Oracle Community.     It's all about the people ! 
Oracle PeopleSoft SIG 2020 - Bangalore, India
Get online... join a user group.... attend online events.... connect with the community.  Here's just a few suggestion.
Oracle Community Forums
Quest Community User Group

Get involved with Oracle Partner community events like Version 1 's Oracle Apps Day and the PeopleSoft Innovation Summit from PeopleSoft security specialists, Appsian.
All the content from 2020 event are online

17 - 18 February is the next event

If you're a PS Admin then join in the fun at


And if you're interests are also in the Oracle technology that underpins PeopleSoft then the UK based UKOUG, the India run AIOUG with their fabulous Sangam and Yatra events or the Asia Pacific user group APACOUC will have something for you.

Tune in often to countless community bloggers. You'll find a few on my Blogroll to the right of this post.  

And sign up for the free PeopleSoft Weekly newsletter.  It'll contain everything you need to know and more!

(3) Explore the value of running PeopleSoft in public cloud infrastructure.   There are many benefits to utilising cloud services for IT systems and PeopleSoft has been designed for running in the cloud. Public cloud might not be for you so make sure you use a trusted partner to help with assessing the benefits.  https://www.version1.com/erp-pps-peoplesoft-cloud-hosting/




(4)  Exploit the Power of PeopleSoft for positive impact
Create Positive Impact
Q: Why does any company have a computer system?  
A: To secure and manage business data.

Q: What if your chosen information management system doesn't manage this data in a way that's useful to your business?
A: Modify the information system.  (I could modify my business but why should I compromise!)

Q:What should I do if my information management system can't be modified in exactly the way I need?
A: You either compromise, miss opportunities, lose revenue or incur cost.  Or, if you're happy/fortunate/lucky enough to be running PeopleSoft then you can extend and modify it in order meet those business demands.

The ability to change the delivered system to create value for my business without seriously damaging my ability to take new releases from the vendor is a powerful feature of any information system.

Exploit the power of delivered frameworks: Guided Self Service, Approval Workflow, Search, Related Content, Activity Guides, Page & Field Configurator, Chatbot Integration Framework, Kibana Dashboards, Push Notifications, to name a few.

(5) Learn something new each month.  
One thing you learn very quickly in the IT industry is that nothing stands still very long.  There's always something new, some new feature, new application, new method, new module, new script, new programming command.  Why is there so much change?  I believe it's because so many people in the IT world are innovators and creative types who are always looking for opportunities to improve life, the workplace, to save money, make money, improve customer quality, product quality, service delivery and so on.  This creativity inevitably means we live in a constantly evolving ecosystem.

Struggling to keep up?  You're not alone. Join the club.  (in fact action item (2) above and join a community group).

How best to keep up and learn?  Here's my 5 point plan for 2021

A) I'm going to get access to PeopleTools 8.59 once it's GA and use that to learn. (see 1 above)

B) I'm going to contribute the best I can to the PeopleSoft community. (see 2 above)

C) I'm going to install, access and develop PeopleSoft in Oracle Cloud Infrastructure. (see 3 above)

D) I'm going to pick a few of the new 8.59 features and understand their potential value (see 4 above)

E) I'm going to learn a little at a time and often.  (see 5 above )
Dan and Kyle, from psadmin.io, discussed the power of incremental improvement or "marginal gains" in their October 2020 podcast.  Highly recommend it (both the podcast and the idea).  The basic premise is that if you make a 1% improvement each week in something, like learning, then you might not notice to start with but incrementally start adding up all the 1% improvements and before you know it you'll be an expert in something.

Have a 2021 full of hope, learning and connecting with people.

I'll leave you with a few of my lockdown memories of 2020.

My workspace for most of 2020.

My Dad's 60 year old bureau desk
Fits my laptop just perfectly.

Finally get out of the house.  Working lunch by the Skatepark


Joining in virtual community events

Version 1 Oracle Apps Day with Robbin Velayedam 

Escaping to the hills

Early morning walk by the river Thames

Monday, 9 November 2020

OCI Command Line JSON File Data


Part of my day job is to manage PeopleSoft system running on Oracle Cloud Infrastructure (OCI).  I use the OCI API extensively in PeopleCode and Python but I don't often use the Command Line Interface (CLI).

Just wanted to call out an issue I hit recently when trying to pass in a JSON file as input to a CLI command.

In this example I'm using the CLI to update an existing Security List.  Security Lists in OCI define IP and Port based rules allowing traffic in or out of a subnet.

You can see an example of a network Ingress (Inbound) rule below.


Let's use the CLI to modify the Destination Port Number of this Rule from 8000 to 8001.

The CLI command for this is:

oci network security-list update --security-list-id <ocid of Security List> --ingress-security-rules file://myNewRule.json

JSON can be supplied on the command line as a string input.  However, if you're running CLI on Windows then you need to escape the " in the string (e.g. /"). It's much easier to include the JSON in a file and then input that to the --ingress-security-rules parameter.

But what does the shape of this JSON file need to be?  Well we don't need to guess or try and key from some online documentation as there's a handy parameter which will generate a JSON file template --generate-param-json

oci network security-list update  --generate-param-json-input ingress-security-rules > myNewRule.json

I'm using the standard redirect symbol > to send the output of the command to a file.  A sample fragment of this input template looks like this:


This template makes it easy to create the JSON to make the change we want.



WARNINGWhen a Security List is updated the existing Security List is replaced with the inbound definition.  You get a warning of this when you execute the command.

I ran the command and this is what I got:

Parameter 'ingress_security_rules' must be in JSON format.



But my file is in JSON format.  A few hours of tinkering around and my file is still in JSON format, looks valid but still throwing this error.

Turns out the File Encoding matters.  My JSON input file was in UCS-2 LE BOM.  This got set when I redirected the output of the OCI command which was running in the Windows PowerShell.  This file encoding is obsolete and not appreciated by the OCI CLI.   If I execute the command to redirect the template JSON to file in a regular Command Prompt window then I get a supported encoding of UTF-8 which works.



Sunday, 20 September 2020

Fetch browser data into Component Buffer

It's Hidden in the Field.
Photo by Patrick Mueller

I had to remind myself recently of how to solve a particular problem that I first solved probably over 15 years ago (probably in version 8.01 of PeopleTools).  

If I use JavaScript to fetch some data from the browser then how do I get this new local data back into the component processor and make it available to PeopleCode?

This might be useful to someone out there so here's how it's done.  I'm going super simple with this example so that hopefully the concepts are clear.  

Let's assume we have a Page with a single Field - DESCR (Description).  We're going to use JavaScript to fetch the Operating System of the local machine.  A button will then pass that back to the Component Processor and in the FieldChange event we'll display the Operating System name in the DESCR field.




(1) First I need to get my Javascript into the page.  There are many ways to do this but for this example I'm just going to add an HTML area to the page and set it's value to be my JavaScript during the PageActivate of the Page.

This is my JavaScript to get the Operating System.

<script>

// Get the Operating System name from the appVersion property*/
var OSName="Unknown Operating System"; 
if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows"; 
if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS"; 
if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux"; 

// Set the hidden field on page using the PageField Name
document.getElementById("MY_DESCR1").value = OSName;

// The hidden field can also be referenced by using RECORD_FIELDNAME
// document.getElementById("GRS_TEST_WRK_DESCR1").value = OSName;

</script>
And the code to inject this into my Page at runtime.

NOTE: When the HTMLAREA value is set in PageActivate the JavasScript at this stage has not been rendered in the browser and therefore it hasn't executed yet.  This is important to note as anything which the JavaScript does on the page at render time will not be available to the Component Processor until the next rountrip.

ALSO NOTE:  It might matter where you put your JavaScript on the page.  HTML pages do not load all at once and so HTML elements that your JavaScript reference may not have rendered at the time they execute and may not be available.  For the purposes of this simple test we can get away with adding the JavaScript to the end of the Page but a much more thorough discussion on this can be found here  https://www.kirupa.com/html5/running_your_code_at_the_right_time.htm

(2) Pass the JavaScript variable to the local PeopleSoft Page.  Fields on a PeopleSoft Page are located inside the <FORM> object so that when the next HTTP POST event (or roundtrip) occurs the collection of Field objects or (HTML INPUT elements) in the form are posted (sent) back to the web server and then to the application server to be made available in the Component Buffer.

Normally we use data entry elements on the Page to capture human input but in this instance our JavasScript is doing the inputting.  However, we don't necessarily want our Operating System name to be visible on the Page so we add a hidden Field on the Page and set the value of this using JavaScript. In this example the hidden Field name is DESCR1 and we're going to make it invisible.

Setting the Page Field Invisible property not only makes the field hidden from human view but the way in which PeopleSoft does this (quite rightly) is to not include the Field in the HTML page response thus making it invisible to JavaScript too.  We solve this problem by also setting the Generate in HTML property and Modifiable by Javascript* property.


NOTE: If you don't set the Modifiable by Javascript property then you'll get this error.

This is because the HTML element for the Field will be present in the HTML but is not permitted to be changed. Actually, JavaScript will modify the Field value but the next roundtrip will catch this illegal operation and throw the error.  This feature might be useful if you wanted to apply some special HTML/CSS wizardry to  Field data but didn't want to display the default PeopleSoft styled Field.

One other Page Field property is useful to set on our hidden field and that's the Page Field Name.  All Page Fields can be referenced by the RECORD_FIELDNAME and this is set as the Element ID.  However, as we all know, it's possible to have the same Field appear multiple times on a page and having a method of uniquely identifying a specific instance of a Field is useful and sometimes essential.  



The line of JavaScript which sets the hidden field is this one:
/*Set the hidden field on page*/
document.getElementById("MY_DESCR1").value = OSName;
or, alternatively using the RECORD_FIELDNAME.  
// The hidden field can also be referenced by using RECORD_FIELDNAME
document.getElementById("GRS_TEST_WRK_DESCR1").value = OSName;
(There's a lot of useful information online to help understand how to reference HTML elements.  Here's a good place to start https://www.w3schools.com/js/js_htmldom_elements.asp ).

(3) Pass the hidden field into the Component Buffer.  Because our JavaScript has been used to set a field  the data is still on the local browser and will not be available to PeopleCode in any events until the next roundtrip.  This can be a Save, Refresh, non-deferred FieldEdit/Change, RowInsert/Delete, etc).  Think of it as if a human had just entered the data into a field.   

In Summary

If we put all this together this is what's happening.
1) We add our JavaScript is added to the page in Page Activate. (The JS hasn't run yet).
2) The Page HTML is generated by the Application Server and returned through WebLogic to the browser.
3) The browser renders the HTML and, if we've been clever (or lucky), our JavaScript will execute once the page is loaded.
4) The JavaScript grabs the data we're interested in and sets the value property of our Invisible, Modifiable by JavaScript, Generate in HTML enabled Page Field.
5) This Page Field is part of our Form and so will be passed back to be included in our Component Buffer during the next roundtrip (Save, Refresh, non-deferred FieldChange/FieldEdit, etc).
6) Once it's in the Buffer we can get to it like any other Field.

I hope this is useful to someone.  There might be other ways of doing this and other observations, gotchas or things to look out for so please feel free to share in the comments below.


Wednesday, 22 July 2020

Cloud Manager Magic # 11

24 July 2020 Update:   See Step (8) for update.

It's been nearly 2 years since Cloud Manager gave us fully automated PeopleTools Upgrading - the magic button. You can read my reaction to it here.

On 10 July 2020 the Oracle PeopleSoft team released Cloud Manager 11  (VFO and CFO ) with features like multi node backup, database refresh, new OCI shapes, stop/start VMs associated with an environment, Kibana and Elasticsearch on mid-tier node, extended us of the native OCI File System and much more.

Very excited to get my hands on CM11 but I resisted the temptation to just install a new instance using the OCI Resource Manager stack available on Oracle Cloud Marketplace.  Instead, I decided to upgrade my existing CM10 instance.   Here's how this breathtaking piece of fully automated Selective Adoption magic went.  I've broken it down into steps with some commentary that I hope will be useful to someone.

(1) Subscribe to the Interaction Hub channel updates in the CM Repository.  If you didn't know Cloud Manager application is part of the Interaction Hub.  I had already subscribed to the IH channel after first installing CM10 back in December 2019 in order to pickup essential PRPs required to provision 8.58 environments..  All the necessary DPK files for CM will be automatically download once the channel is subscribed.  I strongly recommend that you  only do a backup of the CM system when there are no outstanding repository downloads.  If you get your File System files and the CM meta data out of synch then it be difficult to rectify these.


(2) Backup Cloud Manager.  My chosen method of backing up Cloud Manager, before I begin a major upgrade, is to simply shutdown the PeopleSoft domains and backup both the boot volume and attached block volume storage devices using the OCI console.  It takes just a few minutes and allows me to restore back the entire VM back to the pre-upgraded state.

(3) Setup Cloud Manager for update.  If you've been using CM10 before then you've probably already gone into Cloud Manager Settings > Manage Updates so that you could apply the required PRPs.  If not, then just specify the necessary OCI and PeopleSoft PUM attributes making sure you select the correct subnets - ft for the Full Tier and win for the PeopleSoft Client.


(4) Verify required DPKs.  Don't worry if you forget this step.  I didn't realise that patch 03 was required to be in the Repository even though my plan was to apply patch 05.  It's because the base IH image is shipped on 03.  So.... watch out for this little warning highlighted below as we'll see later.  You need 8.58.03 patch in the repository.  If you need it just unsubscribe and subscribe again specifying the minimum patch level to download.


(5) Click the Apply button and select the target tools patch (05 in my case) for CM11 plus a final chance to review the Update Attributes.


This will kick off a self update process. You can't monitor some parts of the upgrade while logged into the very system that's being upgraded so the next screen provides a set of scripts that allow you to monitor progress (get_status), retry a failed step and mark a step as manually completed.  Putty into your CM instance as user opc to execute these.




(6) Validation and Creation of PUM Source steps
The self update process begins with a pre-update validation and patching of the mechanism which does the self updating.  This is a kind of patching the patching process before it begins.  During Step 1 the PIA and App domains will restart so if you're in you'll get kicked out while this happens.

Next, a PUM Source template is created so that an instance of IH Image 11 Update Source environment can be provisioned.  This will have a name of CDMSLFUPDnnnn and will be a Full-Tier and Windows Client topology.



The PUM Source Environment takes about 2 hours to build.  I think the reason why the Pre Tools Validation step can't happen earlier is because CM doesn't know what base Tools version is needed by the PUM Source until it''s provisioned.

This is a minor issue easily resolved by unsubscribing and subscribing to the Linux and Windows PeopleTools 858 Channel.  Once downloaded you can restart the failed step 4 by clicking the arrow button and selecting Retry Failed Step.

(7)  All the other steps will continue in sequence.  Once it gets to Upgrading PeopleTools step it's unlikely you'll be able to remain logged in.  If you drop into Putty you can use the delivered script to get the status of the self update process.



(8) That's it.  Amazing!  

24 July 2020 Update:  I got so carried away with Cloud Manager reporting that all steps had completed successfully that I completely forgot to go and check in the Cloud Manager Online Documentation to see what else needed to be done,  It clearly states that after the self updating process completes you should login as root and run $PS_APP_HOME/cloud ./post_upgrade_script.sh . I wonder why this couldn't be automated?

Note #1: If any point of this had failed it would not have been an amazing experience and how I wonder how easy it would have been to fix and restart the process?  Deep knowledge of the inner workings of Cloud Manager is not easily obtained.

Note #2: Because my branding logo and background Fluid homepage image were both implemented using Event Mapping then they are still there even after a major PeopleTools upgrade.  Nice!




I can't claim to have "done" the CM 11 upgrade but I can claim to have "pushed the buttons".  And all done from my lock-down office by the front door working on a desk bureau handed down to me from my Dad who received it himself as a 21st birthday present.  That makes this desk 60+ years old!  It fits my laptop perfectly - almost like it was designed with this in mind.  It's old... well made.... with a forward thinking design and it's still creating value for another generation.