OptionSet vs Lookup reconsideration
When starting a discussion whether to use optionset or lookup I always recommend this blog post from Gonzalo Ruiz. It covers already very well the differences. As D365 has evolved in the last years let me add some considerations in addition to the comparison of Gonzalo.
How often does this list change and who maintains it?
Here should also consider how many list items you need. When you use an optionset and have several hundred items you will be facing issues when using Advanced Find with "OR" operators and the filter options for a view will most likely not work. As far as I know, there is no official statement how many items are supported for an optionset but we experienced already these issues. Therefore when the number of items is huge use a custom entity.
Do you need to support multiple languages?
I often see customer environments where lookups are used for e.g. list of countries or other rather static lists which change very seldom. At the same time, the customer is using D365 in multi UI languages. When I ask why a lookup was used they often say their former D365 did it and they do not know why. As result, the multilanguage approach is partly failed.
In the past, an optionset was usually recommended when the customer wanted to use D365 in more than one UI language. Today we have one more option: "Use the product entity". The standard entity product is the only entity where the attribute "name" can be translated. In the screenshots above you can see the lookup is translated according to the current UI language. As this approach uses out of the box functionality you do not need a plugin to manipulate the names when they are retrieved.
Furthermore, lets have a look what is happening when we use the quicksearch where I enabled the lookup attribute as find column (click on the picture to see what is happening)
You can see different behaviors:
1. In base language English you are only able to use the English label for the quickfind.
2. In UI language German you are able to use either the base language label or the German label for quickfind.
When you try the same search using the Relevance Search you will experience a different behavior: You will find the records only when you use the lookup label in base language.
According to these behaviors, there is a way to use lookups in multilanguage scenarios with some limitations.
Do you need to capture additional fields?
As Gonzalo already stated when there is a need for capturing additional information a lookup is rather the better approach. But also when you only need to provide the user additional information a lookup attribute in conjunction with a quickview form is quite useful.
All in all before selecting optionset or lookup always consider the list documented by Gonzalo but also consider the new features explained above to make the proper decision.
*This post is locked for comments