Showing posts with label Action Menu. Show all posts
Showing posts with label Action Menu. Show all posts

Monday, June 3, 2019

Display 'My Favorite Queries' in NavBar 'Favorites'

The following question was posted on one of my blog posts:
https://pe0ples0ft.blogspot.com/2018/09/decoupling-add-to-functionality.html#c9053788640685351670

Question: Is there any way to add my favorite queries into the MyFav in fluid via code dynamically?

To provide some context, the delivered 'My Favorite Queries' feature within the 'Query Manager' page allows users to favorite/bookmark frequently used queries. We can see a demo of this feature in the video below.

Add To 'My Favorite Queries'


The requirement here is to dynamically display the user queries from 'My Favorite Queries' as links/shortcuts in the NavBar - 'Favorites' tile content.

I am sure there are many ways we can achieve this programmatically. As a proof of concept, I used Event Mapping Framework to execute additional custom logic on PTNUI_MYFAV_COMP component PostBuild event. This approach will be customization free!

Why PTNUI_MYFAV_COMP component? Because it is the PeopleTools delivered component used to render the NavBar - 'Favorites' tile content. We can see the content reference PTNUI_NB_FAV that is associated with the PTNUI_MYFAV_COMP component in the screenshot below.


In the custom Event Mapping App Class - which is configured to execute as as post process to the PTNUI_MYFAV_COMP component PostBuild event, I simply appended the current user's 'Favorite Queries' to the NavBar - 'Favorites' Content Collection. We can see a demonstration of 'My Favorite Queries' displayed in the NavBar - 'Favorites' below.

Demo of solution


Implementation Details

Download App Designer Project from GitHub: https://github.com/SasankVemana/MyFavQueriesAsNavBarFavorites

Notes:
  1. This feature (implemented using Event Mapping Configuration) is a great value addition to users who frequently use PS Query. That said, all users are not alike and some may not prefer to see all the queries they stashed away in their 'My Favorite Queries' displayed under the NavBar - Favorites. For the purpose of a proof of concept, this solution is implemented for all users. But it could very easily be extended to only display the 'My Favorite Queries' if the users 'opt in'. Please consider any user experience impacts prior to implementing this solution or something similar.
  2. This solution was created using HCM 9.2 - PUM Image 29 - PeopleTools 8.57.03.
Event Mapping App Package/Class

The following Event Mapping App Package/Class contains the custom logic to display 'My Favorite Queries' in the NavBar - 'Favorites' tile content.


SV_EVENT_MAPPING_PKG.NUI.AddMyFavQueries.OnExecute

This app class is mapped to the PTNUI_MYFAV_COMP component PostBuild event. The logic in the Execute method is very similar to that of PTNUI_MYFAV_COMP component PostBuild event.

SV_EVENT_MAPPING_PKG.Utils.PSQueryAsFavorites.OnExecute

This app class is used by the Event Mapping app class (refer line 19 and 20) to append the 'My Favorite Queries' to the NavBar - Favorites Content Collection. This app class is cloned from the delivered PTNUI.NavBarContentArea.Content.MyFavorites.OnExecute app class and updated to meet this requirement.

Dummy Content Reference SV_EXEC_PSQUERY_GBL

The following content reference (SV_EXEC_PSQUERY_GBL) was created as a placeholder. This content reference is required to be able to add a link to the NavBar - Favorites Content Collection. I chose to add this CREF under Root > Reporting Tools folder. You can move this to a different Parent Folder per your standards.


This CREF is referenced in SV_EVENT_MAPPING_PKG.Utils.PSQueryAsFavorites.OnExecute (line number 30 and 31) as shown below.


Helper Function - AppendContentArea

This function is called by the custom event mapping app class (line 22) to append a Collection to NavBar Content Area. The logic in this function is cloned/borrowed from the delivered SetContentArea function in PTNUI_DOCK_REC.PTNUI_NB_ACTION.FieldFormula.


Related Content Service Definition


Event Mapping Configuration



Wednesday, April 25, 2018

Adding Custom Links to Action Menu using DoURLWarning JavaScript Function

In the past, I wrote about how we can add custom links to the Branding - Action Menu at the system level.

Refer: Adding Custom Links to Fluid Branding

While testing this feature, I found that these custom links do not work in certain scenarios. For example, clicking those links from within the NUI Activity Guide framework (which is also used in Nav Collections).


I originally used the FieldChange event and the Response Class RedirectURL method to implement the redirection logic in Fluid Branding as shown below.


Since the Response Class RedirectURL method proved to be problematic in certain scenarios, I started investigating other options. In the process, I found this great delivered JavaScript function called DoURLWarning which is part of PT_HISTORY object in 8.55+ (PT_PAGESCRIPT_FMODE object in 8.54).


DoURLWarning function allows us to redirect to a URL using javascript. Additionally, the function will take care of checking for any unsaved data in the current page and if there is any it will display the "Save Warning" message. If not, it will redirect to the URL in the parameter list.

To use the DoURLWarning function, I removed all the redirect logic from the FieldChange Event. And added code in the RowInit event (as shown below) to utilize the DoURLWarning in combination with the Field Class JavaScriptEvents Property.


PeopleCode for reference

Demo

As we can see in the demo video, the custom link on the Action Menu works when invoked from the Activity Guide framework (which is also used in Nav Collections). The same approach described above can be used to implement custom links to internal PeopleSoft pages as well (e.g.: Process Monitor, Report Manager, etc.).


Save Warning Demo


Fluid UI New Window Feature Implementation

I used a similar technique as described above to implement the 'New Window' feature in Fluid UI as a custom link on the Branding - Action Menu.

Refer: Fluid UI - New Window Feature - Workaround

The only difference in the implementation is that instead of using the Response Class RedirectURL method (which would redirect/replace within the current window), I used the ViewContentURL method to open a new window as shown below.


We can see in the demonstration below, that the same problem described for the custom links also exists for this New Window implementation.


To workaround the problem, I took a similar approach and removed the existing logic from the FieldChange event and moved it to the RowInit event. In the RowInit event, I used the Field Class JavaScriptEvents Property in combination with the Window interface's open method as shown below. Additionally, I also updated the logic to include the %Request.QueryString to the URL to make sure that none of the additonal parameters are lost when opening the new window.


PeopleCode for reference

Demo