Friday, June 8, 2018

Branding Options – Fluid/Classic/Classic Plus


You need to get familiar playing around with a few branding options if you are into fluid. Let’s begin!!

Switch from Fluid to classic

Are you looking to switch back to Classic from the default Fluid mode??

For some reasons, If your business users are not comfortable with fluid, either because of performance issues or there is no significant business transaction that require fluid, then you can still switch back to Classic mode by following the steps mentioned below:
  1. Navigate to Peopletools > Personalization > Personalization Options
  2. Select Option Category Level as ‘PPTL’(Peopletools)
  3. Search for User Option ‘HPPC’ and click on Format tab
  4. Click on ‘Set Option Default Value’ link and choose ‘Option Default Value’ as ‘Classic’ and save the page.
  5. HPPC applies to laptop and desktop computers and HPTABLET applies to mobile devices. This setting is particularly useful when you want to have Fluid for tab/mobile devices and Classic for desktop.



      6. Navigate to Peopletools > Portal > Branding > Branding System Options
      7. Select ‘Default Branding Theme’ as ‘DEFAULT_THEME_TANGERINE’ from          ‘DEFAULT_THEME_FLUID’ and select Theme Style as ‘Tangerine (PT 8.53 default) 



One good thing about Peoplesoft branding is that there is no need to bounce the servers like you do for web profile config changes. You can simply sign out and sign in back to experience the changes. 

Enable Classic Plus

From an end-user’s perspective, let’s imagine If there is a drastic change of browsing experience from seeing a super cool fluid page to approve a leave and back to a displeasing classic page to submit a claim. Won’t it feel odd? 

As we know, not all pages in Peoplesoft are meant to be fluid. To give a consistent modern user experience (harmonizing with fluid), Peoplesoft has come up with “Classic+”, so that end-users can move seamlessly across Peoplesoft pages.

In a nutshell, Classic plus
  • is a new stylesheet (introduced in Peopletools 8.56)
  • allows classic components to look more like Fluid components
  • are NOT RESPONSIVE to devices unlike fluid pages.

Classic plus is turned on by default starting with HCM Image 25. If you are on an older image, you can enable classic plus at a system level from the ‘Branding System Options’ page by selecting “Fluid like theme for Classic”. 

Peopletools > Portal > Branding > Branding System Options

To enable at component level, you should check ‘Apply Fluid like theme for Classic’ at Component Properties. Remember that you need to perform some minor tweaking on the pages, as the new stylesheet tends to distort the page alignment.



Have you implemented some great branding options for fluid/classic+. We would like to hear it from you. Let us know in the comments.

Also, if you haven’t read our previous article on the introduction to fluid, here’s the link.




Tuesday, May 22, 2018

Is it time to go FLUID?


Fluid is the buzzword that is currently doing the rounds in Peoplesoft world. In physics, a fluid is a substance that continually deforms under an applied shear stress. Alright, but what this has to do with Peoplesoft?? This new fluid stuff is going to help us fit our static Peoplesoft pages across various form factors - When I say various form factors, it means the page fits into any device of any size.

So here comes the next question.. Does Fluid only implies going mobile? Answer is a big NOOOO.. This is a general misconception/myth that is commonly widespread among us. So what exactly is this fluid thing?

- Fluid is a new way of using the system
- with a new navigation paradigm
- simplified/modern and intuitive User Interface 
- which has the capability to run on any device.

The beauty of the Fluid User Interface lies in its ability to generate responsive and adaptive UI. If your business users are in a middle of a meeting (We all know how boring those meetings could be 😊) and need to access some recruitment related analytics, they can access it on the fly using their iPad with the new fluid UI. Your boss can approve your leave on his way back home travelling in a train/car. 

As you can see, the fluid UI is more into targeting casual business users, so don’t expect to have all your Peoplesoft classic pages converted to fluid, for instance a job data page has no necessity to be accessed on a mobile. When I say this, you will a question tinkering your mind. If all pages are not meant to be fluid, will I not have an inconsistent UI between pages?? To solve this Peoplesoft has delivered a new branding style called “Classic-Plus” which is fluid-like styling to unify the look and feel within Peoplesoft. 

What does fluid mean to everyone involved:
- For a casual self-service user, you have a new system with look and feel of leading websites.
- For a user with manager level privilege, you can now easily approve any critical business transaction using fluid approvals.
- For a director level user, you have simplified analytics that can help you make strategic management decisions.
- If you are part of delivery team, you couldn’t ask for more with delighted end-users and lower training costs.
- For Developers, you will have an additional responsibility to learn new skills ( HTML5/CSS3/ Javascript) adding value to your profile.

Sample Fluid Page

There are few risks and challenges that needs to be addressed in this implementation 
- System Load Fluid UI Apps expands the user community, and puts additional load on system.
- Performance on mobile devices Mobile devices use data services which are generally not so fast, hence performance on mobile devices can be slower than expected.

The future of Peoplesoft is Fluid, Oracle has dramatically extended its investment in Fluid User experience. Many customers have already moved to fluid. Don’t wait too long, you’ll be left behind in the race. Have a clear implementation plan, explore the new features that are delivered and go for it, I am pretty much sure the end users will be delighted and so do you.

In the next few months, we will have more interesting articles coming up focusing on fluid development/tips and how to work with classic plus. Stay tuned!!!

Feel free to drop your feedback/suggestions.


Tuesday, February 13, 2018

Deleting Employee ID and Employee Record in Peoplesoft


Imagine what it would be like when you are in a scenario which require you to delete an Employee ID or an Instance of employee ID, possibly because you have mistakenly hired an employee or the employee hired didn’t turn up on first day or left the organization on the same day (Wonder what made him leave the same day.. 🙄 poor guy..)

Alright.. What next?? Get rid of the Employee ID in peoplesoft...🤐 Nightmare!!! Isn’t it..?

One thing that immediately strikes all techy geeks is to identify all the records which contains EMPLID field and run delete scripts against that employee. Seriously..??  Want to know a secret? There is much simpler solution than this.. 😉

Deleting EMPLID

Peoplesoft has a delivered process(HR_PER502) which can delete an employee ID. Just enter the employee ID here and leave the rest to be taken care by the process. 

Set Up HCM > System Administration > Database Processes > ID Delete


















Although the above process eases our work, I should point out that Peoplesoft does not recommend deleting an Employee ID that has already been processed through Payroll. 

Let’s say that you still delete an Employee after payroll has been run for that ID, leaving in a state with all pay calculation totals messed up, it will be incredibly difficult to harmonize the numbers leading to Audit/Compliance issues. Hence you should never take the back-door route to fix an error that has occurred, Perhaps, I would recommend adding a Termination row in such cases to keep a clean audit.

Keep in mind that the above process does not delete all audit records (starting with AUDIT_...)

Changing EMPLID

There will be instances where you want to change the EMPLID to a different ID, for example, an Employee who rejoins the company and hired with a new employee ID instead of a Rehire action. 

You know what? You can use the same process to change an EMPLID to a new number.  

Set Up HCM > System Administration > Database Processes > ID Change


















Deleting Employee Record

But wait – there’s more. Another useful delivered process which helps us to delete an Employee Record instance which was created by mistake, it can be accessed from the following navigation. 

Set Up HCM > System Administration > Database Processes > ERN Delete Process > ERN Delete Process














The system prevents the deletion of EMPLID/EMPL_RCD combinations which are used in key processes like payroll, benefits and time reporting. 

To sum up, Instead of performing minor heart surgery on the database by running multiple delete scripts, it is often suggested to go with Peoplesoft delivered processes discussed above. Feel free to drop in your feedback/suggestions. 😊





Sunday, January 28, 2018

Behavior of think-time Functions in PeopleSoft

Some issues are uncommon, weird and hard to understand what exactly went wrong. One such weird issue in peoplesoft is related to Think-time functions. I know many of my colleagues who were stressed to the core and said ‘Its time to leave this planet’ because of this peculiar issue in Peoplesoft. Come!! Let’s sort this one out.

Think-time PeopleCode event (<think-time event>), but a SQL update has occurred in the commit interval.

In this article, let’s see what think-time functions are, and some of the limitations that require our attention when dealing with such functions.


Basically, any function that waits for user input or external process to complete is a think time function. Messagebox, for instance, waits for user to click Ok or Cancel button… Exec() function running in synchronous mode which suspends processing until the triggered process is complete.

Listed below are the think-time function in PS

  • DoCancel
  • DoModal
  • DoModalComponent
  • Exec(Only when it runs in Synchronous Mode)
  • AddAttachment, MAddAttachment, ViewAttachment, DetachAttachment
  • InsertImage, CropImage
  • CreateObject, ObjectDoMethod, ObjectSetProperty, ObjectGetProperty(When object Required User- action)
  • Prompt
  • RemoteCall
  • RevalidatePassword
  • WinExec(Only in Synchronous mode)
  • Winmessage and Messagebox(Depending on Style Parameter)
  • Calls to an External DLL

Think-time functions in Application Engine

Are you using Exec() or RemoteCall() in AE to run a batch file or a remote process? You should consider the following then:

Exec(&unixCmd, %Exec_Asynchronous + %FilePath_Absolute); /*Running in Asynchronous mode*/
&ExitCode = Exec(&unixCmd, %Exec_Synchronous + %FilePath_Absolute); /*Running in Synchronous mode*/

Running Exec() in Asynchronous mode is not a think-time function, as the AE process does not wait for the invoked command to complete. With Synchronous mode it is different, because the AE process needs to wait for the invoked command to complete. OH!! That’s Pathetic.. Don’t expect it to wait for you if you haven’t committed pending transactions, you will end up in think-time event error. 

The simple solution here is to issue a Commit before Exec() is invoked. If AE was written to be Restartable, then make sure that the previous step is committed before the step executing Exec. For AE with ‘Disable Restart’ checked, a CommitWork() has to be issued before Exec(). Easy right?

Think-time functions in Component Interface

Think-time functions are usually suppressed and ignored in CI. So, in such cases better to write a separate logic for CI.

If %CompIntfc then
/*Logic for CI*/
Else
/*Get user Input*/
End-if;

Think-time Functions in Peoplecode

Winmessage() and MessageBox() behaves as a think-time function only when the style parameter specifies more than one button. When you make the style parameter to show only Ok Button(0), then it behaves like a normal function. If style is neglected, Winmessage() displays both Ok and Cancel Button which acts as a think-time function. Hence you must always specify with style parameter like Winmessage(“Test Message”, 0) to show only Ok button.

Sometimes you would have noticed that your MessageBox or Winmessage does not work before call to a Transfer or TransferExact function. If you want to display your message, then change the style to show OK and Cancel Button.

It’s not so hard to debug when you receive error in peoplecode related to think-time functions. PeopleBooks suggests us not to use think-time functions in SavePreChange, Workflow, RowSelect, SavePostChange, and any peoplecode event that executes as a result of ScrollSelect, ScrollSelectNew, RowScrollSelect, or RowScrollSelectNew function call, and any peoplecode event that executes as a result of Rowset class Select or SelectNew method. If you are using think-time functions in one of the above events, just get red of it.



Monday, January 22, 2018

PeopleSoft - Data Conflict Issues

“Come on!!! This is such a simple and straightforward component.. It’s not fair… Why am I running into this issue…”. Ever felt disheartened like this when you see these kind of error messages? 


Data being added conflicts with existing data(18,2 

or 

Changes conflict with another data item. (18,5)


Chill out!! You are not alone.. Let’s set this right..
The prime cause of this issue is because of writing into a PS Record with duplicate key values. Basically, there exists a row with some key values and you are trying to add another row with same key combination, so look out for how did you end up with such duplicate rows. 
I have itemized a few steps which needs validation when you encounter this error

Get the Basics Right – Record Level Structure

Remember your first lesson in creating multiple levels in PS? Yes.. Level 1 record must contain key fields from Level 0 Record and an additional key. Check out if your key structure is right, otherwise fix it now.

Stop Clashing with Component Processor – No Auto Select & No Auto Update Property

Either you do the selection of rows from tables or allow the component processor to do it for you. When you populate a grid or scroll area through peoplecode, you must check the ‘No Auto Select’ property. Likewise, when you have decided to take care of updating the backend records, better select the ‘No Auto Update’ option. When you ignore this, you end up updating the same row twice leading to this issue. 
Thoroughly check all the grid and scroll area properties from your main and secondary pages and make sure you don’t clash with the component processor.


I would recommend allowing the component processor to do its job unless you have some business requirement that requires selection or updation through peoplecode. Atleast try avoiding SQLEXEC statements to insert or update records which are readily available in your component buffer. Why reinvent the wheel??

Weird Field Assignments

Let’s say you have a field named ‘COMPANY’ which is a key field in one of your records and a peoplecode in ‘PreBuild’ or ‘Rowinit’ event sets a default value to this field. If this field is editable and user enters some value and saves it, the next time when user opens the page again, the default value is displayed again and if you try to modify this key field and save again, you will encounter Data Inconsistency issue.
So always look for such weird field assignments/modifications, 
Check out for Saveprechange or Savepostchange events, if some code is modifying your key values.
Did you overlook your record peoplecode? There are chances that the same record is being used in multiple components and the code written for some other purpose gets triggered for our business transaction resulting in data conflict issues.

Out of sync Sequence Numbers

When you use sequence numbers in your page that needs to be incremented and updated every time, better not to go with SQLEXEC Update statements, Instead use the delivered getNextNumberwithGapsCommit() function. This can help avoid data inconsistency issues. 

Clear App Server Cache

For no reason, if most of the users receive data conflict issues, I would suggest to clear the app server cache. Believe me, it helps sometimes.

Tuesday, January 9, 2018

You are not authorized to access this component. (40,20)

I once had a very dreadful day at office breaking my head trying to solve what looked like a very simple security issue. ‘You are not authorized to access this Component (40,20)’. If you are having one such distressing day today, then don’t worry, you have landed at the right place and we are going to fix this right away.

This is one of the most prevalent security issue in Peoplesoft faced by every Peoplesoft developer atleast once in their lifetime. We have prepared a simple checklist indicating all the possible scenarios where this issue could happen with quick solutions for the same.

    Security Access:

   First and foremost, check whether you have access to the component/page you are trying to access. Use the following query to verify if you have access.

SELECT R.rolename ,

  RC.classid

FROM psroleuser R ,

  psroleclass RC

WHERE RC.Rolename = R.Rolename

AND R.roleuser    = '<OPRID>'

AND RC.classid   IN

  (SELECT CLASSID

  FROM psauthitem AUTH

  WHERE AUTH.baritemname='<COMPONENT_NAME>'

      AND AUTH.pnlitemname  ='<PAGE_NAME>'

  )

Non-existing permission list assigned to the role:

There will be instances where a permission list exists in a role but not in the database. This usually happens when project is migrated from one database to another but does not include the permission list. Use the below query to identify if you have any such permission list missing.

Select R.rolename

, RC.classid

From psroleuser R

, psroleclass RC

Where RC.Rolename = R.Rolename

And not exists

(Select 'X' from psclassdefn C

Where C.classid = RC.classid)

-- And R.roleuser = '<OPRID>'


Still not able to access? Why not try running the Portal Security Sync process from the following Navigation.

  PeopleTools - Portal - Portal Security Sync

Issue with Transfer function:

There are scenarios where the system should change the flow of transaction from one component to another using Transfer function. In such cases, verify if the below points are taken care.
   i) Have you specified the correct action mode while using Transfer function?
    Transfer( False, MenuName.DEFINE_PAYROLL_PROCESS, BarName.SETUP,             ItemName.ACCOUNT_CODE_TABLE, Page.ACCT_CD_TABLE, "L", &Parmrec); 


As you see in the above example, the component is registered in ‘Update/Display’ and ‘Correction mode’, whereas Transfer function is trying to access this component in ‘Update/Display All’ mode, which is not correct. Accessing this component in ‘Add’ or ‘Update/Display All’ mode using Transfer function will result in this Security issue.

ii) Have you specified the correct ItemName in Transfer Function? People often tend to misinterpret ItemName with Component name, which is incorrect.

Transfer( False, MenuName.DEFINE_PAYROLL_PROCESS, BarName.SETUP, ItemName.ACCT_CD_TABLE_NEW, Page.ACCT_CD_TABLE, "U", &Parmrec);



As you see in the above example, Item Name is ‘ACCOUNT_CODE_TABLE’ and component name is ‘ACCT_CD_TABLE_NEW’.
The correct way of writing this Transfer function function is:
Transfer( False, MenuName.DEFINE_PAYROLL_PROCESS, BarName.SETUP, ItemName.ACCOUNT_CODE_TABLE, Page.ACCT_CD_TABLE, "U", &Parmrec);

    Mostly by now, you should have been able to fix this issue. If you are still reading this point, then I would suggest you to clear the application server cache and reboot the server and try again.