Infor CRM Web Client v9.0- List View KPIs

In the new Infor CRM version 9.0 web client, a new feature has been added to allow displaying KPI metrics for groups. At various entities users can now configure which KPIs that they want to see. Once the KPI is turned on for an entity, it will show up on each group that the user visits. For instance, if the user wants to see the “Average Sales Potential” KPI for opportunities, they can enable that. Then, when they switch between groups, they will see what the average Sales Potential is for all of the opportunities in that current group.

To define which KPIs you want to see there is now a cog icon in the upper right of the list view:

Once the user defines which ones they want visible, the result looks like this:

Each KPI is a client side Dojo widget that is added to the page at run-time. The call to retrieve the data in the KPI is also handled separately client side using the built in sdata handler of the SLXClient portal. An example client side call to the handler looks like this:
http://localhost:3333/SlxClient/slxdata.ashx/slx/system/-/groups(‘p6UJ9A000250’)/$queries/executeMetric?_compact=true&_metricName=SumSalesPotential

That call sends what group and what metric for that group you want. The server then process that request and sends back a json payload which the widget then renders into the KPI widget. An example response payload looks like this:

{
"$totalResults":1,
"$startIndex":1,
"$itemsPerPage":100,
"$resources":[{"$httpStatus":200,"$etag":"I8Gfi/////8=","$descriptor":"Sum Sales Potential","name":"SumSalesPotential","value":150832132.0}]
}

The calls via the handler, and subsequent response back can take some time. Depending on the size of the group and the calculation type it can take a second or two (or more) to load each KPI. For instance in the screenshots above, running against the demo database’s All Opportunities group (about 500 records), each KPI took about 1 second to process. It is not that bad from a user perspective as they load asynchronously and the calls for the KPI data are made concurrently, not sequentially. I am not sure what the impact would be on a group containing millions of records but it should not be terrible, since ultimately it is executing a SQL query against the database with the same condition as found in the group. Please note that if you use the quick filters on the side, the KPIs are recalculated, but in this case the calculation is not made on the server, instead the results of the group are filtered client side and calculated.

The standard KPIs that are available are defined in the file MetricWidgetDefinitions.js within the Sage/UI folder. There are currently KPIs available for Accounts, Opportunities, Quotes, Sales Orders, Invoices, Contracts, Returns, and Tickets. Modifying the file MetricWidgetDefinitions.js directly is not possible since that is minified in the deployed web portal. However, it is possible to extend the KPI capability to include either new KPIs for existing entities, or adding new KPIs at custom entities.

We will be blogging in the future about how to do each of those.

At a high level a KPI widget requires you to define an Analytics Definitions to use for the calculation (under the Filters for an entity), you can also do some option filtering within the widget definition (i.e. summing a property only for the current month).

When a user selects which KPIs to use, that is not written to the database. Instead they are stored locally in the browser cache in a Key called something like “list-metrics-config-OPPORTUNITY”, where OPPORTUNITY represents the entity level.

The actual value of that key stores all of the KPI metric names for that entity level and a true/false value (true if visible, false if not visible) like so:

{
   "DaysInPiplineDaysFromOpenToClose":false,
   "DaysFromOpenToCloseRange":false,
   "DaysInPipelineRange":false,
   "NewThisWeek":false,
   "NewThisMonth":false,
   "NewThisQuarter":false,
   "SumActualAmount":false,
   "AverageActualAmount":true,
   "RevenueRange":true,
   "SumActualAmountYoY":false,
   "SumActualAmountYTD":false,
   "SumActualAmountQoQ":false,
   "Total Revenue on this Day QoQ":false,
   "SumActualAmountMoM":false,
   "SumActualAmountMTD":false,
   "SumSalesPotential":false,
   "AverageSalesPotential":true,
   "SumWeightedPotential":false,
   "ClosedOpenWinRate":false,
   "AverageCloseProbability":false,
   "CloseProbabilityRange":false
}

Browser side storage like this means that if a user uses different computers their KPIs will not travel with them. Also if they clear their browser cache they will need to define their desired filters. Also, the client side key is not user specific so if more than one user shares a computer they would all see the same KPIs.

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. Required fields are marked *

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!