The PeopleSoft Navigator is a component that provides users a way to navigate the folders and pages within Portal Registry menu structure.
The Navigator is undoubtedly painful to use out of the box, however there are some great techniques offered by the community to enhance it:
I think the community-provided enhancements make the Navigator much more useable. One outstanding issue that Oracle or the community hasn’t addressed is the Navigator’s lack of contextual awareness in certain scenarios. See this MOSC idea for details.
As mentioned in the idea, the Navigator does not properly manage the current navigation position. For example, let’s say you deep link to the User Profiles page and then open the Navigator. You will be presented with the Root of the navigation structure instead of the actual folder (PeopleTools > Security > User Profiles) that the User Profiles Page resides in. This is very problematic because the user has no context of where they are if they decide to navigate elsewhere using the Navigator.
To achieve better contextual awareness within the Navigator, we need to enhance the management of
psNavBar_lastFolder object in the session storage of the browser. This object holds the
Portal Registry Folder name of the last visited folder within the Navigator and it is what the Navigator
uses to know the current navigation position.
The problem is that this object only ever gets updated when you drill down and open a Content
Reference (CREF) using the Navigator. Direct navigations using deep links, Recent
Places, Favorites, etc. will not update the
psNavBar_lastFolder object with the name of the parent
folder of the navigated page.
We can fix this by performing an Event Mapping on the NavBar Component Post Build Event.
There are two main pieces of logic that will need to be implemented in the Event Mapped code:
Use the %Request object to obtain the current URL of when the NavBar is clicked and use the Portal Registry API to find the CREF of the current URL
psNavBar_lastFolderobject value to the parent name of the obtained CREF
This will make it so that the Navigator will not have a stale (inaccurate) context when it is opened because the context gets refreshed every time the NavBar is clicked.
Here is the Application Class PeopleCode to be Event Mapped to the NavBar Component to achieve this functionality:
import PT_RCF:ServiceInterface; class ContextualNavigator implements PT_RCF:ServiceInterface method execute(); method GetLastNavFolder(&psCurrentUrl As string) Returns string; end-class; Declare Function PortalOpen PeopleCode FUNCLIB_PORTAL.PORTAL_GEN_FUNC FieldFormula; method execute /+ Extends/implements PT_RCF:ServiceInterface.execute +/ Local string &sCurrentUrl = %Request.GetHeader("Referer"); AddOnLoadScript("PTNavBarNavigator.SetLastNavFolder('" | %This.GetLastNavFolder(&sCurrentUrl) | "');"); end-method; method GetLastNavFolder /+ &psCurrentUrl as String +/ /+ Returns String +/ Local ApiObject &oPortal = PortalOpen(); Local ApiObject &oCref = &oPortal.FindCRefForURL(&psCurrentUrl); If &oCref = Null Then &oPortal.close(); Return ""; End-If; Local string &sLastNavFolder = &oCref.ParentName; &oCref = &oPortal.FindFolderByName(&sLastNavFolder); /* Do not use the Folder if it is hidden from Portal Nav */ While &oCref <> Null If Not (&oCref.IsVisible) Then &oPortal.close(); Return ""; End-If; &oCref = &oPortal.FindFolderByName(&oCref.ParentName); End-While; &oPortal.close(); Return &sLastNavFolder; end-method;
Leave a comment
Your email address will not be published. Required fields are marked *