Wednesday, April 15, 2020

Fluid Navigation Collection Tile Parameters

The Fluid navigation paradigm starts with role-based homepages and usually finishes with business process-based tiles. And, the most common way to build a business process-based tile is with a Navigation Collection published through Tile Wizard. Now I'm going to ask a question with an obvious answer. OK, so here goes, Do you build them in Dev, Test, or Production? And, I'm sure you answered, "Development, of course." Nicely done! What about migration? Here's the really cool thing: Navigation Collections are just portal registry structures, so we can migrate them just like any content reference: add them to a project. I've seen several comments and posts discussing this.

Now, perform a quick search for PTPPB_GROUPLET. Did you find anything interesting? Here, let me summarize: PTPPB_GROUPLET is an ADS used to migrate Tile Wizard metadata. Next question: Do you need to migrate Navigation Collection Tile Wizard metadata? There is a bit of debate around this one, but the real answer is: It depends. Many Tile Wizard data types depend on Tile Wizard metadata at runtime, but Navigation Collections do not. Tile Wizard is just a tool we use to create the Navigation Collection's content reference. A Navigation Collection Tile Wizard tile is actually processed through a special Activity Guide template, not through a Tile Wizard runtime. So to answer the question, no, you don't need to migrate Navigation Collection Tile Wizard metadata for a Navigation Collection Tile to work properly.

I'm going to ask you another question: Do you think you might want to use Tile Wizard to maintain your Navigation Collection tile? If yes, then you may want to think about migrating Navigation Collection Tiles through PTPPB_GROUPLET. Why? Most of us periodically copy Production over Dev. If we want our Dev resources to persist, we must migrate them to production. Otherwise, we'll lose the ability to maintain Tile Wizard metadata post copy. So no, you don't need to copy Navigation Collection Tile Wizard metadata for Navigation Collection tiles to work. But Yes, you should copy Tile Wizard metadata if you want to be able to maintain your Navigation Collections going forward.

OK, so maybe it is too late, and you now find yourself with Navigation Collection Tiles with no Tile Wizard metadata. Can you still maintain them? While reviewing CS PUM 16, I found myself in this exact situation. It appears that CS includes several Navigation Collection tiles in a "demo" category, but no Tile Wizard metadata. Fortunately, all Navigation Collection Tile metadata is stored with the content reference. All we have to do is manually update the content reference. Here is a list of the parameters, values, and descriptions of each. First, let's start with a sample content reference Portal URL:


This URL starts pretty normal, listing the Fluid Activity guide component as the starting point. Next, like any Activity Guide, we see the Activity Guide template ID. Everything after that is the domain of the Tile Wizard. Here is a list of URL attributes we can change to alter the behavior of our Navigation Collection tile:

PTPPNAVCOL for "optimized" and PTPPNONOPT for "non-optimized"
Navigation Collection ID (the real "name", a folder CREF ID)
Y: Include the collapsible button beside the left panel.

The rest of the URL doesn't seem to matter.

Each week, you can find Jim Marion teaching a PeopleTools class somewhere on planet earth. Register for one of his upcoming classes at

Tuesday, April 07, 2020

Announcing: Integration Tools Update Course

PeopleSoft Integration Tools is normally taught as a five-day introductory course designed to answer questions such as:

  • What is Integration Broker?
  • How do you configure it?
  • What are Service Operations?
  • How should I integrate with PeopleSoft?

But a lot of us already know the basics of Integration Broker. So last fall, we decided to add another course to our library: PeopleTools Integration Tools Update. This is a three-day class showing what's new with Integration Broker and covers topics such as:

  • Producing and Consuming REST,
  • Constructing Documents and understanding the role of Documents in integration,
  • Creating structured and unstructured JSON responses,
  • Understanding and implementing content negotiation,
  • Responding to REST verbs,
  • Using pre-built services such as Query Access Service,
  • Securing integration points.

As we integrate Chatbots and Cloud solutions with PeopleSoft, it is critical that we understand PeopleSoft's modern integration capabilities.

Our next class begins April 14, 2020. Register now to reserve your seat!

Monday, January 13, 2020

A Refresh-able URL

I find development to be an iterative process. I often create a shell of a program (module, component, page, etc.), just enough to test, and then run my first test. I then iteratively enhance the program (module, component, page, etc.), verifying and validating each change. For online PeopleSoft pages and components, this often means pressing the browser refresh button a LOT! But here is the problem: each time I refresh a PeopleSoft component, PeopleSoft reverts to the search page. After selecting a search value, I'm then directed to the first page in the component. What if I'm testing a different page? Is it possible to craft a URL to bypass component search and open a different page within the component? Yes! We can bypass component search by placing level 0 search key field names and values in the URL. Likewise, we can specify the starting page by placing the Page=... parameter in our URL. But if you don't know the component's search keys and the target page's name, do you have to find them in Application Designer? Fortunately, no. Every PeopleSoft page contains a JavaScript variable named strCurrUrl. This variable contains the current full URL, including search keys and Page parameter. Here is an example of a URL we might use to open the Job Earnings Distribution page of the JOB_DATA component for an employee with the ID KU0001:

For the last several years, we have been showing customers a simple JavaScript console trick to move the strCurrUrl JavaScript variable into the browser's address bar, allowing us to bypass search and navigation when testing PeopleSoft pages. The real trick to this, though, is that Fluid and Classic behave a little differently, requiring different JavaScript. So today, I want to share a simple JavaScript fragment that you may use across Classic and Fluid. This small snippet is "smart" enough to apply the correct rule on Fluid or Classic. It also has a little logic to detect Classic content in Fluid Activity Guides and Fluid WorkCenters. Please note that using this script with a Fluid Activity Guide/WorkCenter will open Classic content outside of the WorkCenter/Activity Guide frame, but then for testing purposes, that is often desirable.

OK... so... wait, it gets better. Why copy and paste that script into the JavaScript console every time you want to invoke it? Why not just create a browser bookmark or favorite to accomplish this task (also known as a bookmarklet)? Here is the same script in bookmark form. Simply drag this hyperlink into your browser's bookmarks bar and you have a bookmark you may use on almost any PeopleSoft component to get a refresh-able URL.

PS Refresh-able

Are you interested in more tips like this? Jim Marion shares tons of them in his training classes. Register today for one of our upcoming classes!

Sunday, January 05, 2020

Announcing PeopleTools Sound Bytes!

Here at JSMpros, we are super excited to share our new YouTube channel with you: PeopleTools Sound Bytes! Each week we will release a new "Sound Byte" describing a PeopleTools feature, tip, or technique. Some of our sound bytes come from our prerecorded on-demand training. Others are exclusively recorded for our Sound Bytes YouTube channel. For example, we are currently producing a channel-specific series titled, "PeopleTools 8.58 features you can implement today," highlighting new features that are part of 8.58 that you can implement as early as PeopleTools 8.54. Subscribe now so you don't miss an episode!

Do you have a topic you would like us discuss? If so, share your idea with us at

Monday, September 09, 2019

OpenWorld 2019: I'm Speaking!

Are you ready for OpenWorld 2019? Have you built your schedule? If not, I suggest you get right on it! The best sessions are standing room only. If you don't build your schedule, then you have to wait outside each session until the last few minutes, whereas preregistered attendees walk right in, taking the best seats.

As you plan your PeopleSoft-focused trip to OpenWorld, I recommend starting with Rebekah Jackson's OpenWorld Preview video:

Next, visit for a complete list of PeopleSoft sessions at OpenWorld. You definitely want to make sure the Roadmap sessions are on your agenda.

Before leaving home, be sure to register for the Quest PeopleSoft reception being held Monday night at the Epic Steakhouse. Details are available on the Quest Community Site

And finally, where will you find me? In pretty much all of the PeopleTools sessions listed in the PeopleTools Program Guide. More specifically, Sarah and I will be leading the session Getting the Most Out of PeopleSoft PeopleTools: Tips and Techniques on Wednesday, Sep 18, 11:15 a.m. - 12:00 p.m. in Moscone West - Room 2002.

We look forward to seeing you in San Francisco!

Tuesday, September 03, 2019

Changing the Search Page Operator Version 2

In 2011, just after PeopleTools 8.50 released, I wrote the post Changing the Search Page Operator. In that post, I demonstrated how to Monkey Patch PeopleSoft to do something you can't do with core PeopleTools: change the default advanced search page operator from Begins With to Between. A lot has changed since I wrote that initial post:

  • PeopleSoft switched from net.ContentLoader to net2.ContentLoader,
  • PeopleSoft released Branding System Options, which supports global JavaScript injection,
  • We began using RequireJS to manage JavaScript dependencies, and
  • The default user experience switched from Classic to Fluid.

Let's create a new version. Before writing any code, let's discuss that last bullet point. This post will focus on Classic. Why? Two reasons:

  1. Fluid doesn't use traditional search pages built from search record metadata and
  2. Roughly 95% of the components in PeopleSoft are still Classic.

This new version of the code will take advantage of Branding System Options and JavaScript dependency management. Our scenario will use the Job Data component (Workforce Administration > Job Information > Job Data. We will cause the Name search operator to default to between:

Let's start by creating JavaScript definitions for each library. Download the following libraries directly from their sources:

In your PeopleSoft system online, navigate to PeopleTools > Portal > Branding > Branding Objects. Switch to the JavaScript tab and create a JavaScript definition for each item. So that your names match our RequireJS configuration, use the names JSM_JQUERY_JS and JSM_REQUIRE_JS. For compatibility reasons, we should also protect our version of jQuery from any other versions of jQuery that may be loaded by PeopleTools. To do this, we create a library named JSM_PRIVATE_JQ_JS that contains the following code:

Next we need a RequireJS configuration that tells RequireJS how to locate each library we intend to use. I named mine JSM_REQUIREJS_CONFIG_JS, but this name is less important because we will select it from a prompt when configuring Branding System Options. Here is our RequireJS configuration:

Note: I snuck an extra library into the RequireJS configuration. Can you figure out what it is? I will be demonstrating this extra library at my session for OpenWorld 2019. Don't worry about removing it, however. As long as we don't reference it, RequireJS will never attempt to load it.

We must create one more JavaScript library to "listen" to page changes, waiting for PeopleSoft to load an advanced search page. Create a library containing the following code. As with the previous, name isn't as important because we will select the name from a list of values during configuration. But in case you are struggling with a creative name, I named mine JSM_SEARCHOP_JS.

Your list of JavaScript files should now look something like:

After uploading our libraries, we can turn our attention to configuration. Navigate to PeopleTools > Portal > Branding > Branding System Options. In the Addtional JavaScript Objects (this should really be named libraries) section, insert the following three libraries in order. Order matters. We first want RequireJS. We then configure RequireJS. Finally, we use RequireJS.


About the code that makes all of this happen (JSM_SETSEARCHOP_JS)... It is incredibly similar to the first version. One important difference is that this version is loaded globally whereas the prior iteration was locally scoped to the component. We therefore include a component-specific test. The %FormName Meta-HTML in our JavaScript helps us derive the HTML element that contains the component name. The fieldMap variable contains the mapping between component names and fields that should be changed.

Will this work in Fluid? Unfortunately, no. Fluid does not use search record metadata to generate search pages. It can (with a little work), but not in the same fashion. Fluid also doesn't support branding system options Additional JavaScript Objects. JavaScript automation is still possible, but requires a different approach (Event Mapping to inject, different variables, etc).

Are you interested in learning more about PeopleTools, JavaScript, and HTML? Attend one of our courses online or schedule a live in-person training session.

Monday, August 05, 2019

Announcing Fluid 3!

At jsmpros, we teach Fluid training courses several times a month. PeopleTools Fluid is by far our most popular course. Through our Fluid 1 and 2 courses, we teach an incredible amount of material including:

  • Fluid navigation,
  • Fluid page development strategies,
  • Oracle-delivered style classes and layout
  • External CSS libraries,
  • Fluid grid layouts
  • Fluid Group Boxes
  • Dynamic Tiles
  • Responsive and adaptive mobile design concepts, etc.

The feedback from our Fluid 1 and 2 series is overwhelmingly positive. What we are announcing today is our next level Fluid course: Fluid 3. Through this course you will learn how to:

  • Use Master/Detail to build business process based solutions,
  • Build effective secondary headers similar to PeopleSoft's self-service headers (including Related Actions),
  • Use Scroll Areas and Fluid alternatives,
  • Extend Fluid with JavaScript libraries such as d3 and Oracle JET,
  • Leverage the DataGrid to create compelling solutions,
  • Add Fluid Related Content,
  • Convert Classic components to Fluid,
  • Extend Fluid Pages with 8.57+ Drop Zones,
  • Construct robust, business-centric dynamic tiles and Fluid navigation, and
  • Learn additional PeopleSoft CSS classes not covered in the Fluid 1 and 2 courses.

To register for our upcoming August Fluid 3 session or any of our live virtual training courses, please visit our Live Virtual Training online catalog.

Has it been a while since your last Fluid training course? Are your Fluid skills a little rusty? Use our Fluid 3 course as a refresher to get you back into shape.

Note: If you have taken Fluid from other trainers, feel free to start with our Fluid 2 course. Even though we do not monitor prerequisites, we do encourage attendees with Fluid experience to attend our Fluid 2 training before continuing to Fluid 3.