Wednesday, September 15, 2021

Configuring Fluid Job Data Drop Zones

The new Fluid Job Data component is incredibly configurable. I love the four new Drop Zones right in the middle of the page. But there is just one problem: they are labeled Drop Zone 1, Drop Zone 2, Drop Zone 3, and Drop Zone 4. And they are collapsed, so a user would have to expand each one to find out what is inside. Wouldn't it be great if we could use Page and Field Configurator to change the labels or hide unused regions? The Drop Zone labels come from Group Boxes, and today, Page and Field Configurator doesn't support Group Boxes. Since the code is trivial, we believe this is a simple oversite the development team could remedy. If you agree, please up-vote our idea Page and Field Configurator: Add Group Boxes fields list.

The good news is Event Mapping supports any record and field combination. If we can locate the record and field associated with any group box, we can use Event Mapping to hide it or change its label. This brings us to another challenge. At this time, none of the Drop Zone group boxes are associated with fields. We put in an idea for this: Make Drop zone 1-4 on Fluid Job Data Configurable through PFC and/or Event Mapping. If you think this is a good idea, please up-vote it as well.

While we wait for a proper Oracle-delivered configurable solutions, I want to share with you how we used Event Mapping, JavaScript, and CSS to solve this problem:

Thursday, September 09, 2021

The "Unable to get image extents" Error for SVGs

At JSMpros, we love Scalable Vector Graphics! Fluid loves them because they resize (scale) well. We love them because they are just XML documents describing an image. And since they are XML, we can recolor them with browser developer tools or even a simple text editor. In fact, We have videos showing how trivial it is to clone and alter the colors of Oracle-delivered Fluid icons through browser inspector tools (watch online Manipulating SVG Images).

Since we usually just change colors, we prefer to edit Oracle-delivered SVG images through Chrome's inspector and then copy the entire document to a new SVG file. We can then upload the new file through App Designer and use it anywhere. But we discovered an interesting issue. It appears PeopleSoft's internal code doesn't like our new images. When using the Navigation Collections image inspector or uploading a modified SVG through the online branding module, PeopleSoft throws an "Unable to get image extents" error message. What we didn't realize is that copying XML out of Chrome's inspector doesn't copy the XML prolog. All XML documents begin with an XML prolog

<?xml version="1.0" encoding="utf-8"?>

Since SVG is XML, it is required to have a prolog. Browsers are forgiving and will ignore the missing prolog, but PeopleSoft's internal code doesn't.

So what's the solution? We still edit SVG using Chrome's inspector tool, but now we manually insert the XML prolog as the first line. It appears we aren't the only ones to hit this issue. Check out MOS document 2426154.1 for more details.

Are you interested in learning more about PeopleSoft Fluid and Fluid development? Check out our latest live virtual and on-demand offerings.

Tuesday, August 24, 2021

PeopleSoft Fluid Accordion: Default to Open State

The Fluid Accordion is fantastic for organizing information. My favorite place to use it is in the left sidebar (Side Page 1, Master/Detail, and PSL_TWOPANEL). But it has one interesting quirk: it defaults to closed. Wouldn't it be nice to have PeopleSoft default one of the accordion headings to expanded? We haven't found a property or delivered approach, but we do have a workaround. Check out the 10-minute video below for details. Here is our solution in a nutshell:

  1. Add a custom style class to the accordion heading group box you want to be expanded (we named ours jsm_expanded). This CSS style class acts as an identifier or selector.
  2. Add JavaScript to locate the selector and invoke the click action of the chosen heading.

Here is what that JavaScript would look like:

document.querySelector('.jsm_expanded .ps-link').click();

You can use this JavaScript as-is with the AddOnloadScript PeopleCode function but as the video demonstrates, Master/Detail requires a slightly different approach.

I love the flexibility of Fluid. It is so much easier to inject JavaScript and CSS into Fluid. Are you interested in learning more? We cover the Accordion and related challenges and workarounds in our Fluid 2 course. Be sure to check out the details and register for our next offering.

Did enjoy this PeopleTools Sound Byte? There is more where that came from! Check us out on YouTube and be sure to subscribe for more content!

Thursday, July 15, 2021

Announcing Developer Day 2021!

Announcing PeopleSoft Developer Day! Join me online Thursday, August 19th for a full day PeopleTools experience filled with tips and best practices. Space is limited so register now!

Register Now!

Here are some of the topics we will cover and questions we will answer:

Configuration versus Customization

If you use Event Mapping, is that a customization or configuration? If you replace an AWE event handler, is that configuration or customization? Does it matter? Are there lifecycle consequences? How do you confirm a solution still works after applying maintenance?

PeopleSoft Test Framework

Another way to think of a configuration alternative to customization is as a runtime customization with no compare reports or lifecycle management tools. We will show you how to use PTF to regression test configurations.

PeopleCode Application Classes

Application Classes are the foundation for every modern framework including AWE, Integration Broker, and Event Mapping. We will cover the basics of Application Classes, and then use them to override Approval Framework behavior and to implement Event Mapping.

Event Mapping and Drop Zones

We will warm up with some simple Event Mapping and Drop Zone examples to describe them, and then show you some "what's possible" ideas in Fluid Job Data

Fluid

We'll cover Fluid layout techniques, specifically focussed on Drop Zones, and we'll also show how to create Dynamic Tiles, which also require Application Classes.

JavaScript

The PeopleSoft User experience is HTML, JavaScript, and CSS. We will show you some simple ways to combine JavaScript with Event Mapping to improve the user experience.

Integration

REST is the primary modern integration strategy, so we will cover a couple of simple REST examples, and then show how we can use REST with AWE to send text messages to requesters on final AWE approval.

Approval Workflow Engine (AWE)

We want to send notifications as text messages. To do so, we will have to extend AWE. How would you do this and is it a customization? Find out at Developer Day 2021!

Do you have a group of 10 or more? Contact us at info@jsmpros.com for a quantity discount!

Register Now!

Friday, June 18, 2021

PeopleSoft Week Conference

 

PeopleSoft Week Starts Monday, June 21. Have you registered yet? If not, go here now and register for this FREE conference and join us for one week of outstanding PeopleSoft-focused presentations! Here are some details:

When: June 21 - 25
Cost: FREE for Quest members, $49 otherwise
Who: Anyone involved with PeopleSoft
Where: Live online!

The entire schedule is available on Quest's website, but here are a few highlights. Monday, strategy day, kicks off the conference with product strategy sessions led by Paco (PeopleSoft VP), Amira (Financials), Robbin (HCM), and Dave (PeopleTools). This is a fantastic opportunity to hear from product strategy. Tuesday is packed with fantastic community presenters from ERPA, Appsian, Smart ERP, and JSMpros. I close Tuesday with my signature PeopleTools Tips and Techniques session from 3:30 to 4:30 ET. Wednesday and Thursday bring us many more presentations including customer voices such as Jack Henry, AdventHealth, and FSU. The agenda also includes Q&A and panel discussion sessions.


Be sure to register now because PeopleSoft Week starts Monday!

Monday, June 07, 2021

EIS 2021

Join us Thursday, June 10th for a full day of free fantastic live virtual PeopleSoft education sessions led by PeopleSoft community experts from around the world! Check out the agenda. Times are listed in Central Europe, Eastern, and Pacific.

Wednesday, June 02, 2021

App Classes or Function Libraries: Which is Better?

As programmers, we look for patterns. And when we find them, we refactor them into reusable code. Keep it DRY: Don't Repeat Yourself. PeopleCode offers two reusable code containers:

  • Function Libraries
  • Application Classes

And this brings us to the great debate. Which is better? Object-oriented App Classes or procedure-based Function Libraries? I often ask my students this question. And if they prefer one over the other, why? Let's review the benefits of each:

Function Library:

  • Stateless
  • Simple
  • Must be declared

Application Class:

  • Stateful
  • Dynamic execution

There are other differences, but they are irrelevant for this comparison. For example, Application Classes have inheritance (some would say inheritance is NOT a benefit). The value of inheritance is reuse, but then a function can call a function, which is also reuse.

When asking students about their preference, here are a few of my favorite answers:

  • Choose App Classes because they are new.
  • Choose App Classes because they are object-oriented.
  • Choose App Classes because we are supposed to.
  • Choose App Classes because everyone is doing it.
  • Choose Function Libraries because they work!

One of the most valuable features of App Classes is dynamic PeopleCode. Unlike Function Libraries, App Classes do not have to be imported/declared before use. This is how every PeopleTools framework works. As a developer, we create an App Class and register it with the framework. At runtime, the framework reads the metadata and invokes the App Class. A framework such as AWE, for example, knows nothing about my custom App Class. But it invokes my code nevertheless through functions such as CreateObject, ObjectDoMethod, ObjectGetProperty, and ObjectSetProperty.

Which one do I choose? Here are my decision criteria:

  • If I need dynamic PeopleCode, meaning no declaration, then the only solution is an App Class. Another way to think about it is if I'm writing code that invokes another code block and I don't know that code block at design time, but will fetch the name from the database, then I have to use an App Class.
  • If I'm writing code to plug into another framework, such as Event Mapping or Integration Broker, I will use an App Class.
  • If I want testable code to test through PSUnit, I will create an App Class (because PSUnit is a framework that will invoke dynamic code).
  • If I need to maintain state between method invocations, I'll choose an App Class.
  • Otherwise, I choose a Function Library.

Which do you prefer and why? What are other benefits of one over the other? Leave a comment to let us know what you think!

At JSMpros, we recognize the value of Application Classes and offer a two-day course dedicated to teaching object-oriented best practices. In fact, our next session starts on August 9, 2021. Register now!