Wednesday, July 10, 2019

Adding a Fluid WorkCenter to a Navigation Collection

Oracle has done an outstanding job converting Classic Self-service to Fluid to promote the modern, mobile user experience. But what about back-office functionality? We certainly can't predict the future, but it seems that back-office transactions will remain Classic for a very long time. Rather than change the appearance of the back-office user experience, I believe our best strategy is to build back-office, business process-based navigation. Our users don't seem excited about the NavBar and Navigator and we can nearly eliminate its use through properly constructed business process based navigation. Here are a couple of business process based navigation tools:

  • Navigation Collections
  • Master Detail
  • Dashboards
  • Activity Guides
  • WorkCenters

Because of its simplicity and ease of maintenance, we often recommend customers start with Tile Wizard-based Navigation Collections. Oracle, on the other hand, is providing business process based navigation by converting Classic WorkCenters to Fluid WorkCenters.

In a recent attempt to provide a segue from one business process to another, I added a Fluid WorkCenter to a Navigation Collection. Both a Tile Wizard-based Navigation Collection and a Fluid WorkCenter contain a left-hand sidebar. Embedding one in another creates a Left-panel Collision. To avoid this collision, I marked the Navigation Collection item Replace Window property. Unfortunately, trying to launch the Fluid WorkCenter from a Navigation Collection generated an SQL error. This prompted me to try launching the Fluid WorkCenter outside the Navigation Collection. To my surprise, this also generated an SQL error. The WorkCenter worked before adding it to a WorkCenter, so this was clearly unexpected. After reviewing the app server log, I discovered a single-row subquery within the Fluid WorkCenter framework was returning more than one row. It didn't do this before adding the Fluid WorkCenter to a Navigation Collection, so what changed? One thing: I added a Fluid WorkCenter to a Navigation Collection. The SQL that caused the problem looks for any CREF that uses the WorkCenter's target component and is marked as a Fluid Workcenter (contains &FLWC=Y in the CREF additional parameters). By adding a Fluid WorkCenter CREF to a Navigation Collection, I created a CREF Link to the original CREF. The end result was a second matching row in the portal registry table (PSPRSMDEF).

Lesson learned: Don't add a Fluid WorkCenter to a Navigation Collection or any other structure that will result in a second CREF with the same (or similar) target. This makes sense because Fluid WorkCenters are business process-based navigation. Adding business process-based navigation to business process-based navigation may not make sense.

Is there a workaround? Absolutely! Instead of adding the Fluid WorkCenter directly to a Navigation Collection, create a redirect iScript. The PeopleCode in the iScript will send the user to the existing Fluid WorkCenter content reference rather than duplicating the existing content reference in the Navigation Collection.

Is the workaround worth the effort? That is an entirely different question. First, the effort is minimal and will require just a few lines of PeopleCode and a Permission List update. But what is the savings and user experience impact? Fluid WorkCenters are designed to be launched as homepage tiles. To launch a homepage tile, you must be on a homepage. The user savings, therefore, is the user won't have to return to a homepage to launch the next business process but can transfer directly from one to the next. Returning to the prior business process is as simple as clicking the Fluid header back button.

Configuring productive Business Process navigation is critical to successful Fluid implementation. Are you ready to learn more? Register now for our Fluid 1 course online. Do you have a whole team to train? Contact us for group pricing and delivery options.

Monday, July 01, 2019

PeopleSoft ReConnect 2019

It is about two weeks until PeopleSoft ReConnect, and definitely time to build your schedule. I'm looking forward to a great conference with partners such as Appsian, psadmin.io, SpearMC, Presence of IT, Gideon Taylor, PS Web Solutions, New Resources Consulting, Oracle, and colleagues such as Sasank Vemana. There are so many great sessions available. I personally have several overlapping sessions on my agenda. In fact, I am delivering sessions during timeslots that list sessions I would like to attend.

If you still have room in your schedule, here are the sessions I will be presenting at ReConnect 2019. I hope you aren't leaving early because both of my sessions are on Thursday, the final day of the conference.

See you there!

Friday, June 14, 2019

HIUG Interact 2019 Conference Schedule

Tomorrow I fly to Orlando for the 2019 HIUG Interact conference. I'm almost packed. I wanted to share my schedule with anyone attending. As usual, we start the conference off right with a session Sunday afternoon.

I am on site for the whole conference and don't leave until Thursday morning. I plan to be in sessions all day every day. I look forward to seeing you there!

Are you presenting? If so, add your session to the comments below

Wednesday, May 08, 2019

Launching into the middle of a Fluid Navigation Collection

One of the greatest challenges to a successful Fluid deployment is Classic navigation and one of the most common solutions to this challenge is the Tile Wizard-based Navigation Collection. Tile Wizard-based navigation collections allow us to build business process-based navigation for our back-office users (back-office pages are primarily Classic). Let's say you have built some amazing Navigation Collections for your back-office users and now you want to drill from one collection or page to a specific target page in another Navigation Collection. You know you can easily craft a URL to a Tile Wizard Navigation Collection, but can you load a specific target component from that Navigation Collection? This is a great question that my PeopleTools Fluid course students ask me often. The answer is Yes!

When using the Tile Wizard to publish a Navigation Collection, PeopleTools uses a special Activity Guide template to display the Navigation Collection. This means that every Tile Wizard-based Navigation Collection is viewed as an Activity Guide. Each link is considered a step in the Activity Guide. Fluid Activity Guide steps have an id attribute called ptgpid. Once we find the ptgpid of a step, we can use that ID in a URL. When the Activity Guide is a Navigation Collection, the step ID is the Navigation Collection CREF Link ID. Note: this is not the base CREF ID, but the CREF link that was created by the Navigation Collection utility. If we inspect the HTML for a Navigation Collection, we can find the ptgpid in the HTML. Alternatively, we can find it in the portal registry under Portal Objects > Navigation Collections. Here is an example from the HTML:

To launch the highlighted item, copy the ptgpid and add the following to the end of the URL:

&ptgpid=<the id goes here>

For example, in the Portal Navigation Collection that is part of the PeopleSoft Developer homepage, appending the following to the URL will navigate directly to the Find Object Navigation item:

&ptgpid=HC_S201604180146095689166800

At jsmpros we believe that navigation is a critical component of a successful Fluid implementation, which is why we devote the first day of our Fluid 1 course to Fluid navigation. To learn more or to schedule a course, visit us online at jsmpros.com.

Tuesday, March 26, 2019

Documented JSON Classes

Looking through the PeopleTools 8.57 Feature Overview document, you may have noticed that 8.57 now includes support for several JSON classes as well as PeopleBooks documentation. As Chris Malek showed us a couple of years ago, the classes listed in the Feature Overview document are not new. What is new is the keyword Support and PeopleBooks documentation. Using the documentation, I was able to generate a sample on PeopleTools 8.57:

Local JsonBuilder &jbldr = CreateJsonBuilder();
Local string &json;

If &jbldr.StartArrayReturnsTrue("Employees") Then
   REM Empl 1;
   If &jbldr.StartObjectReturnsTrue("Employee") Then
      If &jbldr.StartObjectReturnsTrue("Name") Then
         &jbldr.AddProperty("First", "Jim");
         &jbldr.AddProperty("Last", "Marion");
         &jbldr.AddProperty("Middle", "J");
         &jbldr.EndObject("Name");
      End-If;
      &jbldr.AddProperty("ID", 123456);
      &jbldr.EndObject("Employee");
   End-If;
   
   REM Empl 2;
   If &jbldr.StartObjectReturnsTrue("Employee") Then
      If &jbldr.StartObjectReturnsTrue("Name") Then
         &jbldr.AddProperty("First", "Lucy");
         &jbldr.AddProperty("Last", "McGillicuddy");
         &jbldr.AddProperty("Middle", "");
         &jbldr.EndObject("Name");
      End-If;
      &jbldr.AddProperty("ID", 789123);
      &jbldr.EndObject("Employee");
   End-If;
   &jbldr.EndArray("Employees");
End-If;

&json = &jbldr.ToString();

MessageBox(0, "", 0, 0, &json);

Alternatively, we can build JSON structures using JsonObject and JsonArray directly, but I like the way the JsonBuilder structures code so that child items appear indented, etc. Notice the code above begins the JSON structure with an array? Here is the output. Notice the root node is an object, not an Array:


Even though my very first call to JsonBuilder was to start an Array, it started an Object. What if you just want an array as the outer node? We can extract the array from the JsonBuilder RootNode using the following:

&jbldr.GetRootNode().GetJsonObject().GetJsonArray("Employees");
What if we want to format the code? First, I don't recommend formatting code you will transmit to external systems as white-space compressed JSON is preferred for data transmission. But formatting for debugging purposes is perfect. We can format JsonBuilder output using the JsonGenerator class. Here is a fragment that will format the JsonBuilder result:
Local JsonGenerator &jgen = CreateJsonGenerator();
&jgen.SetRootNode(&jbldr.GetRootNode());
&json = &jgen.ToString();

One thing to note is that JsonBuilder will let you generate invalid JSON. The parameter to StartXxxReturnsTrue is the name of the node to create. If we start the first node with a zero-length string: &jbldr.StartArrayReturnsTrue(""), then the generated JSON will include curly brace object notation, but no property name before the Array start.

As I look through the documentation for 8.57, I see every Json class method and property documented, but what about the CreateJsonXxx functions? Anyone find documentation for these functions? Did I miss something?

As Chris pointed out, these JSON Classes have been in PeopleTools since 8.55.11. Assuming that just the documentation is new and not the classes, I ran all of this code on 8.56 and it works without modification.

At jsmpros, we teach JSON strategies through our Integration Broker and PeopleTools Delta courses. Are you interested in learning more? Contact us to schedule your next PeopleTools training session.

Wednesday, March 13, 2019

Do I have to use the Navigator?

Navigator exposed from the NavBar
I have seen several very clever Navbar customizations including:
  • Auto-expand the Navigator when expanding the Navbar and
  • Showing the breadcrumb path in the Navigator.
These customizations seem quite valuable to anyone that uses the Navigator. And who doesn't use the Navigator? It is the primary delivered navigation method for Classic content. But are we really supposed to depend on the Navigator? If so, should these customizations be incorporated into the product? Or are we missing the point of Fluid navigation? Does Fluid provide an alternative?

Let's start with a review of Self-Service. With a complete Self-Service Fluid rollout, do you need to use the Navigator to launch any Self-Service functionality? No. Every Self-Service transaction is available from a tile. Consider Personal Details. When an HCM Self-Service user launches Personal Details from a tile, PeopleSoft opens a WorkCenter-like experience, allowing the user to navigate through the Personal Details components using a left-hand sidebar. Again, did we need the Navigator for any of this functionality? No. But that was Fluid. What about Classic? In PeopleSoft HCM PUM 29 there are 400+ Fluid components and nearly 7,000 Classic components. How would you navigate to those 7,000 Classic components without the Navigator? Classic components predate Fluid and therefore aren't represented by tiles. Imagine if they were? How many homepages would you need to house 7,000 tiles? How many tiles would you have per homepage? Too many! So we use the navigator... but wait!

Let's review the list of Fluid navigation options:

  • Homepages
  • Tiles
  • Navigation Collections (published as tiles)
  • Related Actions
  • Activity Guides (Fluid, optimized as well as HCM ESS Activity Guides with categories)
  • WorkCenters (Enterprise Components Fluid WorkCenters or Classic WorkCenters)
  • Master/Detail
  • Side page 1
  • Two-panel layout

Many of these options are configurable and do not require Application Designer (Developer not required).

Fluid WorkCenter (Master/Detail) with Classic+ Components

Here is how I believe Fluid navigation should work. Keep in mind that Fluid navigation spans both Classic and Fluid components. Fluid navigation is not just for Fluid Components.


      Role-based homepage with business process-based tiles
    1. Homepages should be role based. My homepage collection should depend on the hats I wear in my organization.
    2. Within each homepage, I should have business process-based tiles. These tiles should launch WorkCenter-like Navigation Collections, Activity Guides, and so on. For example, if I am a PeopleSoft developer, then I should see a tile for managing security. When launched, that security tile will display a left-hand panel for navigating within the Security business process. If I manage payroll, then I might expect to find a tile labeled "Payroll WorkCenter USA" that includes navigation for all of the components associated with the Payroll business process. Remember, the items in the left-hand sidebar of a Navigation Collection or WorkCenter may be a combination of Classic, Classic +, and Fluid.
    3. From certain transaction pages, I should see Related Actions that allow me to drill from one transaction to a related transaction.
    Related Actions that drill from one component to another
    Done right, 95+% of my work will launch from tiles. The Navigator becomes my safety net. I reach for the Navigator once a year or every few years to complete some obscure configuration task reserved for implementation.


    What about the Navbar? We often think of the Navbar as an intermediate step used to launch the Navigator, but the Navbar is a homepage of tiles. Instead of a container for the Navigator, the Navbar is an always-present homepage with tiles I can launch from anywhere in PeopleSoft. Let's say you work in Procurement and often answer questions about Purchase Orders. You have your regular buyer and procurement duties, but you must be ready at a moment's notice to answer a question or solve a problem. To prepare for the inevitable interruption, you add your most common inquiry business process tiles to the Navbar. You are now two-clicks from the answer to any question.

    Now I ask you, "if you never use the Navigator, do you still desire a customization to automatically expand the Navigator when opening the Navbar?" I think not.

    How did we get here? I believe we are in an intermediate navigational state. Classic used breadcrumbs. Fluid uses business processes. I believe the problem is that our Classic content was moved into the Fluid navigation paradigm (PeopleTools 8.55) without usable business process maps (Navigation Collections, WorkCenters, and so on). We, therefore, must build our own business process maps using Fluid navigation tools to align Classic content with Fluid navigation.

    Building navigation is a critical phase of any Fluid implementation. Get it wrong and you may find yourself rolling back Fluid in favor of Classic (no joke, I have seen this before). When implementing Fluid we often focus on Self-Service, and rightly so. Self-Service comprises the majority of our headcount. But often Self-Service users are a minority of our actual time spent using PeopleSoft. Oracle has done a great job of building Fluid navigation for Self-Service users. What's missing? Fluid navigation for Classic. Today that is our job. As developers and business analysts, we must build that missing business process based navigation for our back office users.

    We believe that navigation is a critical component to a successful Fluid implementation and that is why we devote the first day of our Fluid 1 course to Fluid navigation. To learn more or to schedule a course, visit us online at jsmpros.com.


    Tuesday, March 12, 2019

    Collaborate 2019

    Collaborate 2019 is just around the corner. San Antonio is one of my favorite conference locations, with the riverwalk right outside the conference center. I will be presenting the following sessions next month at Collaborate:


    I look forward to seeing you there!