MS CRM 2011中,解决方案分为两类,托管与非托管。二者的区别体现在再次部署,导入后的行为上面。另外,解决方案的托管与否,与其中的具体组件的托管属性设置有着密切的关系。下面以实验进行说明。
实验的样例是,在组织“Demo”中创建两个解决方案,托管解决方案ManagedSolution以及非托管解决方案UnManagedSolution,而后,将这两个解决方案导出到组织Product中,并查看两个解决方案的不同行为样式。两个解决方案中包含的样例实体设定如下:
ManagedSolution(我的托管解决方案) | New_test11 | 完全托管实体 |
New_test12 | 部分托管实体 | |
New_test13 | 非托管实体 | |
UnManagedSolution(我的非托管解决方案) | New_test21 | 完全托管实体 |
New_test22 | 部分托管实体 | |
New_test23 | 非托管实体 |
所谓的实体的托管属性,就是在实体编辑器中,点击工具条的“托管属性”按钮,在实体托管属性对话框中设置实体在被导入到其他组织后,是否可以再次被自定义。如下图所示
完全托管实体,就是设定上图中的“可以自定义”选项设置为“否”。如下图所示。
而表格中的部分自定义,那么就是设置实体中部分内容在导入到其他组织时不可以被再次自定义。本文中的设定的部分托管实体,是不允许修改实体的显示名称。如下图所示。
最终的实体列表如下图所示:
从上图可见,部分托管的实体的“可自定义”列的值,还是“是”,只有“实体托管属性”对话框中,“可以自定义”值设置为“否”的实体的“可自定义”列的值才是“否”。
实体创建完成,创建两个解决方案。创建完成后的结果如下图所示:
我的托管解决方案
我的非托管解决方案
下面,将连个解决方案分别导出。其中“我的托管解决方案”的“包类型”为“托管”,“我的非托管解决方案”的包类型为“非托管”。如下图所示。
“我的托管解决方案”的“包类型”为“托管”
“我的非托管解决方案”的包类型为“非托管”
接下来,我们开始向组织“Product”导入两个解决方案。
最终的导入结果如下图所示。
从上图中,可以看到实体列表的“状态”列和“可自定义”列出现的组合方式有四种。分别是“托管/不可自定义”、“托管/可自定义”、“非托管/不可自定义”以及“非托管/可自定义”等。下面来逐个查看六个实体的可自定义性。
首先是New_test11实体,该实体是托管解决方案中,实体托管属性“可自定义”为“否”的实体。通过查看,可以发现,该实体是无法进行编辑、更新的。
第二个,是New_test12实体,由于之前已经设定该实体的“显示名称”不可以被修改,所以,在被导入组织中,可以看到,该实体的显示名称不可以被更改,而其他信息是可以被修改的。如下图所示,红色区域是被禁用掉的,无法进行修改。而其他的各类信息都是可以被修改的。
第三个,是New_test13实体,这个实体的“托管属性”没有进行设置。所有信息都是可以被自定义的,所以,所有的信息都是可以修改的。
第四个实体,New_test21实体,虽然其托管属性也是设置为不可以自定义,但是,由于其所属解决方案是“非托管”类型的,所以,表单的托管属性设定不起作用。故此,该实体的各类信息都是可以修改的。如下图所示。
对于New_test22以及new_test23实体,实体内的各类信息也都是可以被编辑的。
从上面的实验可以看出,只有托管解决方案中的,托管属性有设置信息的组件,在被导入到其他组织时,才会对组件中可编辑信息有所约束。
上面验证了解决方案的包类型与方案中组件的托管属性之间的相互作用,从而对自定义迁移方面造成的影响。
下面来看,不同类型的解决方案在被再次导出时的行为。
首先,导出“我的托管解决方案”,此时,系统提示“不允许导出托管解决方案”。如下图所示。
而这个限制,对于“我的非托管解决方案”是没有的。
由上可见,托管解决方案只能够被导入,而不能够被导出。而非托管解决方案对于导入导出,没有做任何限制。
下面,来看被删除时,不同类型解决方案的行为。
首先,删除“我的托管解决方案”。在删除时,系统会弹出“删除确认对话框”,并在其中提示,如果删除托管解决方案,那么该方案中的组件以及组件中的数据都将被删除。如下图所示。
删除完成后,在默认解决方案的实体列表中,“我的托管解决方案”中包含的三个实体都已经不见了。如下图所示。
接下来,删除“我的非托管解决方案”。此时,系统也会弹出“删除确认”对话框,不过其提示内容是此解决方案会被删除,但是解决方案中包含的组件不会删除,如下图所示。
删除完成后,在实体列表中可以发现,“我的非托管解决方案”中包含的三个实体还是存在的,并没有被删除掉。
由上可见,删除托管解决方案时,该方案中所包含的组件也将被删除。删除非托管解决方案,并不会删除方案中的组件。
下面,来看再次被导入时不同类型解决方案的行为。
首先,导入“我的托管解决方案”,在导入向导中,会有“导入选项”,提示用户,是否对已有的解决方案中的组件进行更新还是保留现有的组件。如下图所示。
而对于“我的非托管解决方案”,在导入时,是没有这个提示的。
由上可见,在导入“托管解决方案”时,提供会做判断,并给出提示,由操作人员确定具体的操作方式。而导入“非托管解决方案”是没有这些的。
以上,是解决方案中包类型,托管与非托管的介绍。