Search This Blog


Friday, 20 May 2016

PeopleSoft Cloud Architecture, PeopleSoft Predictions and more ...

I think the community building work of Dan Iverson and Kyle Benson through their site is terrific.  I highly recommend their podcasts, videos, discussion and blogs.  Recently, I had a great time chatting with Dan & Kyle and you can listen to the podcast here.

We talked about warm air produced by power supplies, loading 8" floppy disks into an IBM 36 and occasionally you can hear, in the background, a Class 43 Diesel heading into London as it passes my garden office  .... we also talked about PeopleSoft including the huge investment that Oracle continues to put into the applications and technology, what is the "cloud", what is "PeopleSoft Cloud Architecture", what does the automation of some admin tasks mean to the PeopleSoft administrator role and also some of my own thoughts on the exciting future of PeopleSoft.

Friday, 22 April 2016

UKOUG PeopleSoft Roadshow 2016

What a great day at the annual UKOUG PeopleSoft Roadshow.

My top 5 highlights include
  1. Networking with Customers, Oracle and Partners.  Discussing new stuff, sharing stories, showing our tech-scars and solving problems.  Love it!
  2. Hearing all the latest from Marc Weintraub, Director of PeopleSoft Product Strategy at Oracle.  He's an engaging speaker and covered a huge range of topics including PeopleTools 8.55 and beyond, PeopleSoft Cloud Architecture, Oracle Compute Cloud Services, PeopleSoft ERP(FSCM) and HCM application updates.  The innovations and pace of new and exciting features is quite astonishing. 
  3. From PeopleTools 8.56 the monthly patch releases will start to include feature enhancements to PeopleTools.  This is an exciting prospect.

    The engineer in me loves PeopleTools.  One of those meta data based, domain specific programming frameworks where the language is used to develop and enhance the language itself.  (For example....  Q. what is PeopleTools Query Manager written in ?  A. PeopleTools ).
  4. Oracle Compute Cloud has a Database as a Service offering.  PeopleSoft can run on this platform  Very exciting for those temporary and transient instances of PeopleSoft that you need to spin up for development, testing, training etc but you don't want to buy another RDBMS license or go to the expense and trouble of finding a server, installing and then ongoing patching and maintenance.  I'll be blogging more on this very soon.
  5. And finally... I got a chance to discuss in detail some of the learning experiences of using the new PeopleSoft DPKs on both VirtualBox and Native.  The PeopleSoft Cloud Architecture really is another game changer for PeopleSoft customers in a similar way to Selective Adoption.  I'll be blogging more on this soon too.

Friday, 1 April 2016

PeopleCode Debug a 2-tier Application Engine Process - PeopleCode Friday #6

This is not really a PeopleCode tip but rather a tip to debug PeopleCode in an Application Engine process.

I had forgotten you could do this until recently I needed to step through some code in an AE and be able to examine buffer and variable state as I went.

For PIA debugging you need the debug service and the WSL setup on the Application Server and then connect Application Designer in 3-tier mode.  My recommendation is to set this up long before you need it!  This mode, however, is only useful for debugging online PIA sessions and not Application Engine process running on the batch server.

If you can run your AE process in Application Designer then you can use this technique to step through each Section, Step and PeopleCode statement.

Just a few tips

  • Create a run control called "RUN01".  This will make life easier if you're repeatedly running the same AE during development or testing as RUN01 is the default.
  • You can enable SQL and PeopleCode trace in Configuration Manager.  This will send trace output of the actual SQL being executed and you can open this file during debugging. Very useful.
  • Don't forget to use Step Over (F10) for avoiding getting bogged down in lots of function or method code.
  • Don't use Output Log to File when you run as it will repeatedly send prompts for user interaction to the log file until your local disk is full !!!! 

Step 1 -  Setup Config Manager

In Configuration Manager > Profile > Edit > Process Scheduler > Application Engine tick the Debug option.

Step 2 - Open the Application Engine

Step 3 - Open PeopleCode section and Enable Debug

Step 4 - Set Breakpoints in PeopleCode

Step 5 - Run the App Engine process

Step 6 - Use the AE process window

Step 7 - Step through PeopleCode

Watch the whole thing here...

Friday, 19 February 2016

Embed Query Results in Page - PeopleCode Friday #5

I recently had a requirement to include Query results in a component alongside other regular page objects.   I know that you can run an existing Query using PeopleCode I just needed a way to handle prompts and download to Excel etc.

I didn't have to look far for the answer.  PeopleSoft Query Manager  has a Run tab in which you can preview the results of your unsaved Query.    Behind the Run tab is a call to PeopleCode Functions ExecQuery and FormatResults.
Query Manager Run Tab.

Throw a Query object at these and hey presto.

Step 1 On the component page add the following 2 objects from QRY_VIEWER_WRK record.

  • HTML Area . QRY_VIEWER_WRK.HTMLAREA - Used to display Query results,
  • Text Box.  QRY_VIEWER_WRK.HTMLCTLEVENT - Used to drive operations like next/previous in list, download to Excel, etc.  This field should be invisible, modifiable by JavaScript and have a page fieldname of HTMLCTLEVENT
Step 2 Add the following PeopleCode (below) to some event. A button or page activate depending on how you want to control Query execution.  This code fragment is really just a starting point but should run any Public Query the user has permissions to run.  If the Query has prompts then a Prompt Dialogue will be generated when the ExecQuery function is called.

As always, feel free to leave comments, observations, alternative ideas or questions.

Page Definition for Displaying Query Results

Declare Function ExecQuery PeopleCode QRY_VIEWER_WRK.FUNCLIB FieldFormula;
Declare Function FormatResults PeopleCode QRY_VIEWER_WRK.FUNCLIB FieldFormula;

/* Create a new Query object*/
Local ApiObject &qryObject;

&qryObject = %Session.GetQuery();

/* Open and existing Query */
&"XRFWIN", True, True);

/* Run the Query */
Local Record &cPromptRec = Null;
&bResult = ExecQuery(&qryObject, &cPromptRec);

/* Display the HTML results */

This is what the final page looks like

Monday, 7 December 2015

Paste from ClipBoard into Grid - PeopleCode Friday #4

A number of times in my PeopleSoft career I have been asked by users if I can provide a paste from the Windows clipboard into a grid.  Typical use cases include pasting Excel data into a grid or bulk loading text.

I've seen some PeopleCode and Javascript developer friends of mine code some really neat solutions but here I'm not going to attempt anything fancy.  I offer this code fragment for what it is - ruthlessly simple.

PIA Page with paste window and results grid

App Designer Page

Local Rowset &rs = GetRowset(Scroll.GRS_TBL);
Local array of string &aRows;
Local array of string &aFields;

&aString = CreateArray("");
&aFields = CreateArray("");

&aRows = Split(GRS_WRK.HTMLAREA, Char(10));

For &i = 1 To &aRows.Len
   &aFields = Split(&aRows [&i], "|");
   &rs(&i).GRS_TBL.SELNUM.Value = &aFields [1];
   &rs(&i).GRS_TBL.DESCR.Value = &aFields [2];

Some observations:

  • You can obviously change the separator from | (pipe) to whatever works for you. Comma is useful when pasting from Excel.
  • You will want to add some structure checking code.  If you're expecting 2 fields but a user pastes 3 then you'll want to trap that.  
  • You may want to do some datatype validation to avoid generating PeopleCode or component processor errors.
  • You could get really smart and create a button which reads data directly from the clipboard.  Most browsers don't allow you to do this for security reasons but there are ways to configure browsers to trust the clipboard.  
  • I've been using this recently to repeatedly flush and reload data into tables on a new application I've been building.  I went as far as making the table name a parameter and setting GETFIELD(n).Value rather than an explicit field name as I had numerous tables to populate.
Any other ideas or suggestions then, as usual, just post comments below.

Thursday, 26 November 2015

UKOUG APPS 15 Conference

The annual UK Oracle User Group Applications conference is a great place to network with other PeopleSoft users, partners and of course members of the Oracle PeopleSoft team.

There are sessions covering many PeopleSoft topics including
  • Oracle PeopleSoft Applications and Technology strategy - Jeff Robbins, Oracle 
  • PeopleSoft and the "cloud" from various industry experts
  • PeopleSoft Fluid UI and mobile computing
  • PeopleSoft Payroll Update
  • PeopleSoft Talent Management and Taleo
  • PeopleSoft Portal
  • Upgrade stories
  • and more....  Two Day Agenda Here

Come and share your stories, bring your questions and be part of the community.

See you there.

Friday, 30 October 2015

Query Definitions in PeopleCode - PeopleCode Friday #3

Just recently I've been working on a project which required me to dynamically create and manipulate PeopleSoft Query Definitions in PeopleCode.

I've always known the Query API Class existed but i've never really used it.  PeopleBooks, of course, is always my first place to look for documentation on how to use anything so went looking for Query Class methods, collections and properties and also to look for worked examples.  Unfortunately, whilst the reference material was adequate I found the worked examples confusing and with a few errors.  So, next port of call in my search was a general search in Google for "PeopleSoft Query API PeopleCode" looking for some other PeopleSoft enthusiast who had posted some working code. Allas!  Nothing.

So, after a bit of tinkering around I got everything I needed to work and thought it might be useful to write up a simple example that works.

Here goes.

Everything you need to know about Query classes you can find here

Watch out for the listed code examples... some of them don't work.

There are 5 basic steps to creating a simple Query Definition using PeopleCode.  You can create both public and private queries using the Query API. My example here will create a private against one the delivered PeopleTools tables present in all PeopleSoft systems of any version - PSPRCSRQST, and then set 2 sets of criteria.

1) Security.  Make sure the user that is ececuting the PeopleCode has permissions to the source record used in the construction of your Query. Use Query Access Manager for this.

2) In PeopleCode you need to create a Query Object from the %SESSION object

/* Get a Query oject */
&apiQuery = %Session.getquery();

3) Name the query and use the Create method to create a new Query Definition.  NOTE: If the Query Definition already exists then it overwrites it when you save. The second parameter specifies False for a private Query or True for a Public one.

/* Set Query Name.  Cannot contain spaces*/
&qryName = "MY_QUERY";

/* 3. Create a new Query */
&apiQuery.Create(&qryName, False, %Query_Query, "My query description", "My query long description");

TIP: Major sections of much of my code has numbers embedded in the comment headers.  This is just to help me and others that might have to maintain my code see instantly the sequence of flow.  It can be useful in long blocks of code.

4. When you use Query Manager in PIA to create a Query the first thing you do is specify which record the Query is based on. No different here.  Use the AddQuerySelect and AddQueryRecord methods to do this.  Because a Query Definition may have multiple SELECT statements in say a UNION and each SELECT may have one or more RECORDS you need to set these structures up even though your Query only has one SELECT and one RECORD.

/* 4. Create Query Select object and add single record from source drop down 
&apiQuerySelect = &apiQuery.AddQuerySelect();
&apiQueryRec = &apiQuerySelect.AddQueryRecord("PSPRCSRQST");

5. What you do next may depend on your requirements but for this example I'm just going to iterate through the RECORD collection of FIELDS and add each FIELD object to the output list of my Query.  In PIA this is the same as ticking each field in the Fields TAB,  The key Query API method that adds the fields if AddQuerySelectedField. There are 4 parameters to this method - Record Name, Record Alias, Field Name and Field Label).

Setting the ColumnNumber sets the sequence of the field in the output list and I'm Ordering by the Field in ordinal position 1 in a Descending order. (NOTE: OrderByDirection property requires the ASCII code for D (descending).  If you want Ascending don't use CODE("A").  Instead just leave the OrderByDirection blank or CODE("") ).

/* 5. Add all fields from Source Record  to Query Output list 
&recSource = CreateRecord(Record.PSPRCSRQST);
For &i = 1 To &recSource.FieldCount
   &apiQueryField = &apiQuerySelect.AddQuerySelectedField(&, &apiQueryRec.recordalias, &recSource.GetField(&i).Name, &recSource.GetField(&i).Label);
   /*Make the field a display field */
   &apiQueryField.ColumnNumber = &i;
   &apiQueryField.HeadingType = %Query_HdgRftShort;
   /* Set order by value is specified*/
   &apiQueryField.OrderByNumber = 1; /* sort column 1 */
   &apiQueryField.OrderByDirection = Code("D"); /*descending*/

6. If you run the Query now it would work but of course may return a lot of rows.  So let's add some simple criteria by creating a QueryCriteria object and using the AddCriteria method.  The parameter of the AddCriteria method is a string label.  It has no meaning and is simply a useful reference for the developer.

Once you have a handle on a QueryCriteria object it's really straight forward to specify the left (6.a) and right hand (6.c) expressions and the logical operator (6.b).

My code below in section 6 creates the following criteria

             WHERE RUNSTATUS = '9' AND OPRID = 'VP1'

/* 6. Create Query Criteria  
      In this example we'll setup     RUNSTATUS = 9 AND OPRID = VP1

/* 6.a. LEFT expression is a field */
&apiQueryCriteria = &apiQuerySelect.AddCriteria("criteria_1");
&apiQueryCriteria.logical = %Query_CombAnd;
&apiQueryCriteria.Expr1Type = %Query_ExprField;
&apiQueryCriteria.AddExpr1Field("A", "RUNSTATUS");

/* 6.b. Set expression operator */
&apiQueryCriteria.Operator = %Query_CondEqual;

/* 6.c. RIGHT expression is a constant */
&apiQueryCriteria.Expr2Type = %Query_ExprConstant;
&apiQueryCriteria.Expr2Constant1 = "9";

/* Second criteria row 

/* 6.a. LEFT expression is a field */
&apiQueryCriteria = &apiQuerySelect.AddCriteria("criteria_2");
&apiQueryCriteria.logical = %Query_CombAnd;
&apiQueryCriteria.Expr1Type = %Query_ExprField;
&apiQueryCriteria.AddExpr1Field("A", "OPRID");

/* 6.b. Set expression operator */
&apiQueryCriteria.Operator = %Query_CondEqual;

/* 6.c. RIGHT expression is a constant */
&apiQueryCriteria.Expr2Type = %Query_ExprConstant;
&apiQueryCriteria.Expr2Constant1 = "VP1";

7. Saving the Query will perform all sorts of validation and generate a useful collection of error messages.  Just remember "garbage in - garbage out".  The PIA Query Manager prevents the user from creating most illogical combinations when designing a Query so you're going to have to handle all possible error conditions in your code.

/* 7. Save the Query and handle any error messages 
&res = &apiQuery.Save();
If &res <> 0 Then
   &colMessages = %Session.PSMessages;
   For &i = 1 To &colMessages.Count
      &errorObject = &colMessages.Item(&i);
      &messageText = &messageText | &errorObject.Text;
   Error ("An error has occurred saving the query: " | &messageText);

8. At this stage, assuming your Query has saved, you can open the Query in PIA Query Manager/Viewer and execute it.  But my example below includes the generation of a Query URL and a New Window execute by simply viewing the URL.

/* 8. Run PeopleSoft Query to new Window 
&isPublic = False;
&isNewWindow = True;

Local string &url = GenerateQueryContentURL(%Portal, %Node, &qryName, &isPublic, &isNewWindow);

ViewContentURL(&url, &isNewWindow);

Always happy to field questions, comments, observations, improvements or corrections.  Hope you found this a useful starter to creating Query Definitions in PeopleCode .

OpenWorld 2015 Thursday

Every year I find myself saying the same.... "The PeopleTools team keep on delivering".  Oracle is certainly not in maintenance mode with PeopleSoft.  There's a huge amount of investment going into making PeopleSoft better and better each year.  If you're running PeopleSoft then it's a safe place to be. In fact beyond being safe it's an exciting place to be.  The challenge, as always, will be to find the time and money to take advantage of all these new developments so that our organisations reap the benefit.

Today there were some great session for PeopleSoft customers.  Here's just a quick listing of some of my favourites,

1. PeopleSoft Selective Adoption Experiences from the Front Line.  This session was led by Cedar Consultant, Oracle ACE - The PeopleSoft Tipster - Duncan Davies and Mark Thomas (IT Director at Hays).  This was one of 9 other sessions across the week on Selective Adoption - a major theme of this OpenWorld Conference.  Practical insight into how Selective Adoption works and is bringing new efficiency to Hays' PeopleSoft software lifecycle.

2. Fluid UI Component Design and Development.  From Dave Bain (Product Manager, Oracle).  This was the other major theme of this years OpenWorld conference.  Dave is a great presenter and you may have heard him on the Selective Adoption Spotlight Videos.  He gave a run down of the important things to consider when build a new Fluid page or when converting a Classic page to Fluid.

3. Rolling Out PeopleSoft’s Suite of Lifecycle Management Tools.  Michael Krajicek, Vice President - Oracle PeopleSoft Application Architecture Development gave a great talk on what's coming in 8.55 from PUM and PTF.  I think one of the most exciting new features is that you will be able to load up into the PeopleSoft Image a project of your customisations and then when the Change Package is created it will flag up which Updates are going to affect your customisations.
Change Package showing a green flag in the 2nd column indicating a customisation impact for this Update - Nice!

4. PeopleSoft Technology: Executive Panel.  Always a popular and candid session featuring customers vs the PeopleTools senior strategy and product management team.  Here's a few of the questions and my interpretation and paraphrasing of the answers.

Q. What improvements are going to be made to Application Designer?  
A. We want to make the development tools as easy to use as possible. I can't share our plans in detail but you can expect new tools for developers similar to what you've seen at OpenWorld this week. (GS: My take on this is that we saw some very cool drag and drop web based forms builder in Fluid.  I wonder if we might one day see a web based page builder for Fluid? It's all just meta-data underneath.)

Q. When will PeopleTools 8.55 be released?
A. Sometime in the next 12 months.  (GS: but more likely sometime in the next few months).

Q. When will Elastic search be available?
A. Not with the GA of 8.55 but sometime in 2016.

Q. Will we be able to take advantage of Elastic search as a service?
A. Initial release to customers will be on installed on premise or in cloud like we do at the moment with SES but Elastic service offering will be looked at.

Q. What is the PeopleTools team doing to help customers secure PeopleSoft on the public internet.
A. (paraphrasing here) Not a great deal.  In the same as PeopleSoft does not provide you with Anti-Virus for your PC or network switches PeopleSoft does not provide the networking security components to secure client to PeopleSoft web server.

Q (to audience). Who is using Interaction Hub under the PeopleTools limited free license?
A. No one.  (I didn't see any hands go up).  Conclusion?  Consensus from people around me in the session hall was that most customers couldn't justify the cost of the separate PeopleSoft instance required for IH.

I'm sure to blog more over the coming months about specific things talked about at OpenWorld but I'd like to end this week with saying just how wonderful it is to be part of this community called PeopleSoft.  The people involved in developing and supporting PeopleSoft are all first-class technology professionals who are on the forefront of thinking in our rapidly changing and sometimes volatile IT industry.  And then there's the customers and partners who bring a wealth of ideas, questions, challenges and solutions. They all make this global PeopleSoft community such a pleasure to be a part of. Thank you!
Paco Aubrejuan - Senior VP, PeopleSoft Enterprise, Oracle

Oracle Appreciation Party

Jeff Robbins - PeopleTools Strategy, Oracle

Howard Street - normally full of traffic- this week, full of Oracle people

Thursday, 29 October 2015

OpenWorld 2015 Wednesday

Another packed day of great PeopleSoft news, tips and networking.  Just a few of my favourites from today

1.  PeopleSoft Cloud Deployment Architecture.  So, the PeopleSoft strategy guys have said that Oracle are not going to selling PeopleSoft SaaS.  However, the whole installation and deployment paradigm is changing with PeopleTools 8.55 and this will make it much easier to deploy to Oracle Public Cloud or any other public or private cloud or virtualisation platform.  New tools and processes will help customers provision and deploy new PeopleSoft instances automatically.

2.  Automated Configuration Manager (ACM).  Another exciting feature presented by Mark Hoernemann and Biju Narayanan from the Oracle Platforms team which is coming with PeopleTools 8.55 (which is "coming out very soon").
ACM will allow customers to automate the configuration and setup of parts of a PeopleSoft system once a new instance has been deployed.  All the components that administrators used to have to configure manually or with scripts such as Node Definitions, Integration Broker, Gateway Nodes, REN Server, Process Schedulers, URL objects, etc, will all now be orchestrated in meta data registered in your PeopleSoft system. Very powerful. Great time saver and will help customers improve quality and delivery time of new system instances.

3. PeopleSoft Update Manager Customisation Analysis.  Coming in 8.55 is a new feature which will take meta data about your customised objects, load it up into the PeopleSoft Image and then when you create a Change Package it will cross reference it with your customisation.  Now you can see immediatley the effect of the updates on your customisations without having to load the package project up into App Designer and run the compare reports.  Can't wait to see this in action.

So much more from today but after a fantastic musical treat from Sir Elton John at the Oracle Appereciation Party it's too late to type any more.

Wednesday, 28 October 2015

OpenWorld 2015 Tuesday

Today in the PeopleSoft stream of this massive Oracle OpenWorld conference the key messages have been

1. FLUID:  All applications being built going forward will be built using Fluid technology.  It is the primary UI.  It's not just a mobile technology.  It is the PeopleSoft UI now. Classic, of course will still be available and supported.

2. SEARCH:  In response to concerns over the future of Oracle SES the announcement today is that Elastic Search will be available to use sometime in 2016.

No PeopleSoft SaaS

3. CLOUD:  Oracle are NOT investing in a PeopleSoft SaaS offering.  However, tools and features are being added to PeopleSoft in order to make it much easier to manage in a private or public cloud environment.

Cloud "enable" PeopleSoft

4. PEOPLETOOLS 8.55+:  A whole ton of new features and improvements arriving in PeopleTools 8.55 and beyond including
  • Fluid Dashboards
  • Fluid Activity Guides with horizontal and vertical train-stops
  • User will see the Fluid Homepage when they login as default now.
  • Tile Wizard (like Pagelet Wizard)
  • Central Homepage administration with push mechanism to deploy to users
  • Tiles can now be resized by the user
  • Navbar will now remember your context when it's collapsed and works a lot faster 
  • Fluid Master/Detail pages

Fluid WorkCentres 

Fluid Simplified Analytics

Fluid Drag and Drop Forms Builder

Fluid Related Content

Fluid Cloud Attachments (wonder why Oracle Cloud Storage is not there?)

Fluid NavBar Improvements

Fluid User Preferences

Improved Fluid Approvals / Workflow

I ended the day with my Cedar Consulting colleague and friend Duncan Davies (aka The PeopleSoft Tipster) on the Penthouse roof terrace of The Battery for a UK Partner networking event and BBQ.