Thursday, January 21, 2021

Integration Broker OnError Method

Do you know what happens when an Integration Broker handler App Class throws an Exception? REST, SOAP, or plain XML over HTTP all behave mostly the same. By default, PeopleSoft returns the error message to the client. This is great! It means you and I don't have to write error handlers, right? Actually, I hadn't given it much thought until working with REST. With REST, I want to leverage HTTP status codes. For example, if a REST client requests data that doesn't exist, I want to return a 404 status code. But if you throw an exception from an OnRequest REST handler, the default Integration Broker OnError handler returns a 200 (success) status code and an HTML content type. An exception should not return a 200. Fortunately, we can override the REST HTTP response code through the recently documented OnErrorHttpResponseCode and OnErrorContentType properties of the the Request Handler interface (see MOS document 2026747.1 for more details). You set these properties from a handler's OnError method, which is the method Integration Broker invokes when the handler method throws an exception. So here is a snippet from our Integration Tools Update course:

method OnRequest
   If (%SqlRows = 0) Then
      throw CreateException(0, 0, "Item not found");

method OnError
   /+ &request as Message +/
   /+ Returns String +/
   /+ Extends/implements PS_PT:Integration:IRequestHandler.OnError +/
   REM Create fault response;
   %This.OnErrorHttpResponseCode = 404;
   %This.OnErrorContentType = "application/json";
   Return "<response string goes here>";

Notice the code throws an exception when no rows are found. When OnRequest throws an exception, Integration Broker invokes the OnError method, and the OnError method returns a hard-coded 404. So, let's think about this a little more... as you see, the OnError handler ALWAYS returns 404. What if something else goes wrong? Shouldn't I see another status code? Great question! That's a topic we'll save for another post. But let's address a different issue. What happens if your OnError handler throws an exception? PeopleSoft drops the OnError handler and returns the response it would have returned without an OnError handler, meaning a status code of 200 with HTML content type. It's sort of like PeopleSoft invoked your OnError method, which threw an exception and PeopleSoft said, "Oh, just kidding," and reverted to its default behavior.

Now, let's say you are testing your OnError handler, but it seems like Integration Broker is ignoring you. I mean, no matter what status code you set in your OnError method, PeopleSoft returns a 200. First, if this is happening to you, chances are high, your OnError method is throwing an exception. But how can you troubleshoot this? Here is my debugging strategy: Open a file object and print lines. For each line in the OnError handler, I print a line to my log file. I can then open the log file and see when PeopleSoft stopped printing to my log (I'm basically tracing my own code).

OK. Now, let's say you have all of the bugs worked out of your OnError handler, and you are ready to move to production. How can you ensure PeopleSoft will return a 400-level status code if the OnError handler throws a runtime exception? Wrap your code with a try block to catch errors. You then retain control over the HTTP response code and content type.

Are you interested in learning more about Integration Strategies? We believe Integration is one of the most important PeopleTools technologies for today's distributed enterprise. Visit to see when we are offering our next Integration Course. Have a group of developers to train? Contact us for special group pricing!

Tuesday, January 12, 2021

Is PeopleSoft Fluid Mobile-ready? Grids

Vertical scrolling on mobile is perfectly acceptable. But horizontal scrolling is an absolute no-no! So if Fluid is mobile, why is my Fluid grid so wide? Why doesn't it reflow into a vertical rendering? Great question! A Flex Grid is the Fluid version of the plain-old Classic Grid. The only difference is the Flex Grid stretches to fill its container, whereas a Classic Grid's width is fixed. The Flex Grid is likely the most common Grid type for desktop, but it doesn't fit well on smaller form factors, as you may have experienced. So what can we do? The most common solution is to use PeopleCode to change the grid type. In the post Is PeopleSoft Fluid Mobile-ready? Setting the Browser Viewport, we said that Fluid + PeopleCode = Mobile, which holds true for grids. We can use PeopleCode to transform a Flex Grid into a mobile-friendly type, such as a List Grid, Div Grid, or Data Grid. Here is an example:

If %Request.BrowserDeviceFormFactor = %FormFactor_Small Then
   /* change to LIST grid */
   &grid.Layout = %ListGrid;

PeopleCode alternatives include:

  • Stacked Grid Group Boxes,
  • Stacked Grid Group Boxes with Suppress-on attributes, and
  • Custom CSS with breakpoints

With this in mind, let's extend our Fluid development formula to: Fluid + PeopleCode + Style Classes + Attributes = Mobile.

We cover grids in great detail in our Fluid 2 course, including Flex, List, Div, and Data grid types, and how to transform grids using PeopleCode and CSS. Checkout to see when we are offering it next. Do you have a group of developers to train? Contact us for special group pricing!

Monday, January 04, 2021

Announcing PeopleSoft Integration Day! February 11, 2021

Announcing PeopleSoft Integration Day! Join me online Thursday, February 11, 2021 for a full day integration experience! Space is limited so register now!

Register Now!

Whether integrating with "The Cloud," Twilio, or Chatbots, odds are high you will use REST and JSON. With that in mind, we are excited to devote an entire day to sharing REST and SOAP integration strategies. Join us February 11, 2021 to learn about:

  • REpresentational State Transfer (REST)
  • JavaScript Object Notation (JSON)
  • The Documents Module
  • Producing and Consuming REST
  • Testing tools, such as SoapUI
  • Security, such as bearer tokens (JWT) and other authorization schemes
  • Producing, consuming, and securing SOAP services

Who should attend this webinar?

  • 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 Q&A panel 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!

Friday, January 01, 2021

Top Five PeopleTools Technologies to Learn in 2021

Today is the first day of 2021! Have you set training goals? To finish 2020, we sorted courses by enrollment. Based on training interest and enrollment, here were the top five requested courses from 2020:

1. Fluid

It is no surprise that Fluid tops the list of training initiatives. Here are some reasons why

  • Strategy: Fluid is PeopleSoft's strategic direction. All new PeopleSoft development happens in Fluid.
  • Modern and mobile: Unlike Classic, Fluid is awesome on a mobile device.
  • Support: Some Classic components have retired, replaced by their Fluid functional equivalent.

2. Integration Technologies such as REST and JSON

What do Chatbots, Texting (Twilio), Elastic Search, Multi-factor authentication, and Cloud have in common? They are all services outside PeopleSoft that require REST integration. So, just like Fluid, seeing integration at the top of the priority list is no surprise.

3. Application Classes

We've had object-oriented PeopleCode for decades, but without much adoption. I believe today's interest in Application Classes is based on PeopleTools frameworks. Here are a few of the PeopleSoft features that require Application Classes:

  • Integration Broker
  • Approval Workflow Engine
  • Event Mapping
  • Campus Solutions COMMGEN

Add to that nearly every new Fluid page using an Application Class as its PeopleCode container, and we can see why Application Classes are in the top five!

4. PeopleSoft Test Framework (PTF)

One of the primary benefits of Cloud is that Cloud solutions are always current. With Selective Adoption, your on-premise PeopleSoft has the same potential, but only if you can stay current. And end-user testing is a clear barrier to staying current. The more we can automate, the faster we can apply maintenance. There seems to be a direct relationship between currency and automation.

But with that said, I have one reason I think everyone should implement automated testing, and that is Configuration. Event Mapping, Page and Field Configurator, and Drop Zones are fantastic ways to transform customizations into configurations. But here's my problem with configurations: no compare reports. Every customization offers a compare report showing changes. Configurations don't. In fact, that is the point of a configuration. Our whole reason for configuring is to move changes into a layer above Oracle's delivered code. But configuration doesn't eliminate review. For example, configurations may reference fields that no longer exist, and will therefore fail at runtime. This is one of the challenges with configurations: no formal review process. This is a gap that I believe PTF can fill. I believe we should pair every configuration with a PTF test (or several tests). After each maintenance cycle, we can run our battery of tests to prove our configurations are still valid. Test failures immediately show us which configurations require review. Here's a short video showing an example:

5. Configuration

With selective adoption, continuous delivery, cloud pressure, support policies, and a steady stream of amazing new features, it is more important than ever that we stay current. And customizations are the enemy of currency. We can therefore, reduce the cost of getting current by replacing customizations with configurations. Page and Field Configurator, Drop Zones, and Event Mapping are some of the most important recent PeopleTools and Enterprise Components additions. Keep an eye on our online learning portal. We'll be releasing several configuration modules as on-demand recorded training.

6. Learn Something Outside PeopleTools

This is supposed to be a top-five list, but I couldn't stop. And I don't want you to stop either. Don't stop with PeopleTools. Learn something outside the traditional PeopleTools stack. If I could recommend one language to learn, it would be JavaScript. JavaScript is not a traditional PeopleTools technology, but it is the primary language of the PeopleSoft user interface. It is also the primary language of every website and the core of many Oracle PaaS frameworks.

At JSMpros, we teach all of these technologies regularly. Check out our website for our latest course offerings. Do you have a group of developers to train? Contact us for discounted group rates!

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.

Our next session starts August 10th. Register now!