Issue Clearing the Picklist Cache in Infor CRM 8.3.09 Web Client

I recently discovered an issue with a client who was on the 8.3.09 version of the Infor CRM web client. They were unable to see new picklist items that had been added to various picklists.

The way that picklists operate in the web client is that initially a query is made to the database to retrieve the items in the list. However, to prevent round trip database activity each time a picklist is opened, subsequent loading of the same picklist is handled via local in-memory browser storage. CRM uses a single storage item with a key called “PickListData” to store all of the cached picklist items.

You can see the local storage used for picklist data in the Chrome developer tools, under the Application/Local Storage area in the key “PickListData”.

To handle being able to have a user force a refresh of the stored picklist items in case of changes, there is a button accessed via the drop down menu Tools/Options. On the General tab there is a button called “Refresh Pick List Data”.

This button is defined on a custom smart part located in the VFS under Portal Manager/slxclient/supportfiles/smartparts/options/GeneralSearchOptionsPage.ascx The button is called “btnClearPicklistData” and has a client click event of:

var x = new Sage.UI.Controls.PickList({});
x.clear(x._storageNameSpace);
return false;

The idea behind this button is that the user can click it, have it clear all cached picklists and then the next time they access a list it will pull the latest items from the database. However if you actually try to click the button you get a client side error:
Uncaught TypeError: x.clear is not a function

This is because the Sage.UI.Controls.PickList object no longer has a clear method. This method was removed in some previous version of Infor CRM, however this button is still attempting to call it.

Because this button is simply supposed to be clearing the browser’s local session storage of the cached picklist we can just use a standard call to clear the key by name using the function:

localStorage.removeItem(key);

So we will replace the standard button markup from this:

<asp:Button runat="server" ID="btnClearPicklistData" OnClientClick="var x = new Sage.UI.Controls.PickList({});x.clear(x._storageNameSpace);return false;" Text="<%$ resources: clearSavedListData %>" CssClass="slxbutton"/>

To this:

<asp:Button runat="server" ID="btnClearPicklistData" OnClientClick="localStorage.removeItem('PickListData');return false;" Text="<%$ resources: clearSavedListData %>" CssClass="slxbutton"/>


In the screenshot here you can see the new code. I have left the standard control markup in place but commented it out.

Starting in Infor CRM 8.4, this client side action has been replaced by a new built in function

(removePickListCache())()
ABOUT THE AUTHOR

Kris Halsrud

Kris Halsrud is a Senior Analyst / Developer for Customer FX Corporation.

Submit a Comment

Your email address will not be published.

Subscribe To Our Newsletter

Join our mailing list to receive the latest Infor CRM (Saleslogix) and Creatio (bpm'online) news and product updates!

You have Successfully Subscribed!