Wednesday, March 30, 2016

Roll-back solution to a previous customization state in CRM

It is possible only when you are importing solution in managed mode( not in unmanaged mode).

Managed solutions is  able to create layers of customizations. In the unmanaged model, all customizations are at the same layer, so making any customization will overwrite what is currently in the system.

However, managed solutions have the capability to keep track of which customizations belong to which solution. To the end user, only the top layer (latest solution installed) is visible, but under that layer there can be multiple layers of customizations so you can build a solution on top of another solution without mixing up all the changes. You can think of this capability as using reference assemblies in .net. You can develop a solution by referencing an existing managed solution.

The end result is that you will have two solutions (one depends on another) but there can be a clear distinction of which customizations belong to which solution. Solution layering also means that you can revert-back to a previous system state. If you uninstall a solution, all its components will be removed but the customizations from other solutions in a lower layer will surface back.

Example:
Scenario 1:
Import a single managed solution in PROD environment and delete that solution How CRM will work

Step:1 In DEV environment, create a unmanaged solution as KTI_A and  create a new entity as "TestSoln" and export that solution as Managed solution and import to PROD environment as KTI_A.

Step:2 After importing managed solution in PROD environment, new entity "TestSoln" is created.


Step:3 When you delete the KTI_B solution in PROD environment.

Result
Now you will see "TestSoln" created entity is deleted in PROD environment.

Scenario2:
Import a two managed solution in PROD environment and delete the latest solution let see How CRM will work

Step:1 In DEV environment, create a unmanaged solution as KTI_A and  we have an entity as "TestSoln" and export as Managed solution and import to PROD environment as KTI_A.

Step:2 In PROD environment, new entity "TestSoln" is created.


Step:3 In DEV environment, create a another unmanaged solution as KTI_B  and Add new field as "new_karyatestfield001"  in "TestSoln" entity and export as Managed solution and import to PROD environment as KTI_B.

Step:4 In PROD environment, now you can see that entity with that field created. Internally KTI_B solution is sit on top of the KTI_A managed solution.



Step:5 When you delete the KTI_B  solution in PROD environment.


Result
Now you can see only new created field "new_karyatestfield001" is deleted. Entity "TestSoln" is still maintained in the PROD environment.

Because KTI_B  is sit on top of the KTI_A managed solution. 

  • KTI_A solution has new entity created.
  • KTI_B solution has new field created "new_karyatestfield001".


When delete KTI_B solution, KTI_A solution changes is persist and KTI_B solution changes is removed.

When you compare scenario1 and scenario2, usually when you delete the managed solution corresponding entity also hard deleted. But when entity is refered as more than one managed solution. If you delete the one managed solution, old or latest one solution change persist.


1 comment:

Note: Only a member of this blog may post a comment.