This suggestion revolves around the automatic lookup "name" field resolution. I'm posting it under "customer service", but it's really about the broader Dynamics 365 CRM system logic.


How the platform works:


Every time an entity is opened (i.e. 'Retrieve' operation) or when multiple records are searched (view, advanced find, etc. i.e., 'RetrieveMultiple' operation) all the lookup names are resolved again. Even though in the CRM DB there are columns for both the lookup record id and name, the platform will always resolve those lookup names again.

This is understandable as the name may have changed in the interim, so it would be appropriate to show the latest information to the user rather than show them the old value that was populated when the parent record was saved. This is really useful as I've used this behavior multiple times when I wanted to translate lookup names for multilingual environments where each user wanted to see the values in their own language by creating the necessary retrieve and retrievemultiple plugins.


Issue Description:


Quite often the primary name of some configuration entities will really never change or very rarely change. Having an extra retrieve operation for those entities is an overkill that simply takes extra processing time and makes the user experience much slower. The worst part though, is when those lookups point to virtual entities. Each time they are resolved this is a call to another system to fetch their latest name. I have retail customers that have 5-10 lookups on the case and phone call entities in order to link the case to the ERP records the case is for. Each time the case is reasssigned or during resolution or even when an irrelevant field is updated, those lookups are again getting resolved resulting in extremely slow system response times for the end user. The names of those entities are really the order number, order line number, loan number, coupon number, etc. Names that are really impossible to change, yet they have to get resolved again on every operation on the parent entity. If all of them are populated that's 10 calls to an external system to get the data. Not to mention that if you add them in a view then that's 25-250 records that need to get resolved so that's another call to the external system.


Suggested Improvement:


The ideal way to address this would be to have the automatic lookup name resolution on the entity level as a configuration. Just another checkbox to configure the desired behavior per entity. For entities were the implementer knows this is fixed data that never changes they can elect to turn this off and speed up the system. This doesn't need to be done only for virtual entities, it can be done for all entities in CRM. This would be the best way to address it. That way the issue for never changing lookup resolution can be addressed, especially for customers that heavily use virtual entities.

I would take it one step further for rarely updated ones as well and if the automatic resolution is disabled for one entity, then at the level of the parent record form show an icon next to the lookup to update the latest name. Similar to the behavior of roll-up or calculated fields.

The system performance improvement for virtual entity lookups will be massive if this is done.