This is my first blog post where I would like to talk about the much discussed component of Microsoft Dynamics CRM 2011 – Solutions and its behavior.
Without much ado, let me straightaway begin with the following scenario
- Under the phone call entity, deleted the default optionset values (Made & Received) for the attribute statuscode
- Created two custom values (Completed & Left Message) under the same statuscode attribute of the phone call entity
- Published the customizations.
- Created a solution with the phone call entity and exported it.
- Imported the solution in a different organization (vanilla).
- After the import, you will observe that we have four values in the option set, two default ones and two custom values (Made & Received, Completed & Left Message).
- Once again imported the same solution in org2 and this time we have only two custom values (Completed & Left Message).
Scenario1: Unmanaged solution scenario
When we imported the solution with two custom values and published in org2, it did not remove the default values but added two more custom values. This is because unmanaged solutions are additive in nature. However, the question remains, why has it deleted two default values in the second attempt, while it should have just ignored this entity as there was no update on this?
The statuscode attribute of the PhoneCall entity is a Managed component in the base solution. By adding the phone call entity to an unmanaged solution, the flag for the option set values is set to Merge. Since the flag is set to Merge, all four values of the option set will exist in the target system during the initial import of the solution. The reason for this flag is to give the system customizer a chance to get rid of any updates that were made by the unmanaged solution. A subsequent import of the solution will clear the flag and simply use the changes contained in the solution to overwrite the components in the system.
Scenario2: Same behavior with Managed solution
Managed solution merges the values resulting in updating/merging the option set values, which means that when you import the solution it will overwrite the values.