Thursday, December 31, 2020

Is PeopleSoft Fluid Mobile-ready? Setting the Browser Viewport

Have you created a Fluid component yet? Have you tested it on mobile? What did you see? Did it work as expected? When I created my first Fluid component, what surprised me was the zoom factor. My mobile device rendered Fluid content as if it were Classic. Sure, it had nice big Fluid buttons, but my mobile browser zoomed out so much that I thought I was looking at Classic, not Fluid. My first question was, "Why? Why is it doing that?" Without contrary instruction, a mobile browser will scale to fit a page. You would think a responsive page would scale accordingly, but it doesn't. It scales at large form factor, which is zoomed out. My next question was, "Isn't Fluid mobile?" Actually, Fluid has the potential to be mobile, but no. Fluid by itself is not mobile. The Fluid framework seems to be missing the meta Viewport tag, the tag that tells a mobile browser how to scale content. So how do we set the Viewport? At its core, we set the Viewport using the AddMetaTag PeopleCode function, and you are welcome to use it, but I don't recommend it. Instead, use PT_PAGE_UTILS:Utils.SetDefaultViewport. This App Class method handles the Viewport meta tag for us, including known operating-system issues. With that said, a basic Fluid component without a Flex grid is fully mobile if we set the Viewport. So is Fluid mobile? The correct answer is Fluid + PeopleCode = Mobile.

With which event should we invoke SetDefaultViewport? I've seen it in a lot of PageActivate code, but let's think about that for a minute... every time you switch between pages within a single component, PeopleSoft invokes PageActivate. Do we need to call SetDefaultViewport with every page change? No, just once per component. Meta tags exist in the head section of the rendered HTML, downloaded on the first component load, and subsequently updated upon request. So which event then? I prefer component PreBuild. Either PreBuild or PostBuild will work just fine. PostBuild triggers after the component buffer loads and usually contains a lot of component buffer manipulation logic. Setting the meta tag has no impact on the component buffer, and I hate to clutter a messy PostBuild with unrelated PeopleCode 😉.

How does Oracle handle this meta-issue? Any new component uses PT_PAGE_UTILS:Utils.SetDefaultViewport almost exclusively in one of those three events: PageActivate, PreBuild, or PostBuild. But if you review original Fluid components (early HCM, for example), you will find a mixture of AddMetaTag and SetViewPort Function library calls.

Setting the Viewport is a fundamental principle we teach in our Fluid Basic (Fluid 1) course. Checkout to see when we are offering it next. Would you prefer to learn at your own pace? We cover this topic in our one-day on-demand training course Fluid Basic Development. Or, purchase the Fluid 1 Bundle and save! Do you have a group of developers to train? Contact us for special group pricing!

Thursday, October 29, 2020

PeopleSoft Configuration Day November 19th, 2020

Announcing PeopleSoft Configuration Day! Join me online Thursday, November 19th for a full day of configuration alternatives to customizations. Space is limited so register now!

Register Now!

Here is a sample of the topics:

  • Page and Field Configurator
  • Fluid Forms and Approval Builder
  • Activity Guide Composer
  • Related Content and Related Actions
  • Drop Zones and Event Mapping
  • Best practices, tips, and tricks!

A primary benefit of SaaS is that SaaS applications are always current. With selective adoption and continuous delivery, your PeopleSoft instance can stay current as well. What holds us back from always current? Is it customizations? Join me, Jim Marion, on November 19th, 2020 as I share configuration alternatives to customizations. Learn tips and techniques to replace customizations with upgrade-friendly configuration alternatives.

Who should attend this webinar?

  • Functional Business Analysts
  • PeopleSoft Developers
  • Project Managers
  • Team Leads

The cost is $250 per person, which is nearly 70% off our standard daily rate! We are recording the event and are offering 60-days access to registered attendees. This is going to be so much fun! Bring your questions. We'll have time for Q&A. The chat bar will be available and monitored all day.

Do you have a group of 10 or more? Contact us at for a quantity discount!

Register Now!

Wednesday, July 15, 2020

Learn How to Write Code for Integration Broker, Event Mapping, Tile Wizard and AWE

What do Integration Broker, Event Mapping, Tile Wizard, and AWE have in common? These are extensible PeopleSoft frameworks that invoke your code at runtime—Dynamic PeopleCode execution! How amazing is that? Imagine... every line of event PeopleCode you've ever written was declared in advance. But somehow, these frameworks are able to invoke PeopleCode at runtime. Did you ever wonder how? Are you trying to learn Object-oriented PeopleCode by reviewing Oracle-delivered examples?

Even though it shares roots with its procedural predecessor, Object-oriented PeopleCode follows its own rules and design patterns. For example, what is an interface? How do you create properties and methods?

With so much emphasis on Application Classes, we've decided to create a two-day Application Class training course. In this two-day class, you will learn:

  • Object-oriented concepts
  • Methods
  • Instance variables
  • Properties
  • Constructors
  • Access control
  • Inheritance
  • Composition
  • Interfaces
  • Abstract classes
  • Dynamic PeopleCode
  • Design patterns and best practices
  • PSUnit and test driven development

Our material includes plenty of Event Mapping examples.

Are you ready to learn more? Register now for our next class!

Wednesday, July 01, 2020

PeopleSoft Developer Day August 20, 2020

Announcing PeopleTools Developer Day! Join me online Thursday, August 20th for a full day PeopleTools experience. I will share a full day of PeopleTools tips and best practices. Space is limited so register now!

Register Now!

Here is a sample of the topics:


  • Layouts,
  • CSS,
  • JavaScript

I'll demonstrate a variety of Oracle-delivered style classes and how to use them to control layout. You will learn how to incorporate your own CSS into PeopleSoft and discuss when or why you might use custom CSS. And reasons you may want to avoid writing your own CSS.


  • Documents
  • JSON Services
  • Content Negotiation
  • PeopleCode JSON Classes

Expose PeopleSoft data as a REST service including all of the supporting structures (Documents, Service Operations, etc.). We might even consume an Oracle HCM Cloud REST Service!


  • Event Mapping
  • Drop Zones

With selective adoption and continuous delivery, staying current could mean continuous retrofitting. Event Mapping and Drop Zones are configurable alternatives to customization, allowing us to move forward with new projects.

The cost is $250 per person, which is nearly 70% off our standard daily rate! We are recording the event and are offering 60-days access to registered attendees. This is going to be so much fun! Bring your questions. We'll have time for Q&A. The chat bar will be available and monitored all day.

Do you want to attend for free? Contact us at to receive your unique referral link.

Register Now!

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