Microsoft Dynamics CRM - 解决方案
解决方案提供了一个框架,用于打包、安装和卸载组件以匹配您的业务功能。解决方案允许定制人员和开发人员编写、打包和维护扩展 CRM 的软件单元。在 CRM 中执行的任何定制、扩展或配置都使用解决方案进行打包、管理和分发。解决方案可以从源组织导出为 zip 文件,然后可以将其导入目标组织。
为了理解这一点,请考虑以下示例场景 −
作为开发人员或定制人员,您已在开发环境中扩展或定制了 CRM。现在您想要打包您的更改并将其移动到下一个环境。为此,您可以创建单独的解决方案并将其发布到更高的环境中。
作为第三方 CRM 提供商,您已创建 CRM 模块,该模块允许使用外部 Web 服务 API 管理 Microsoft Dynamics CRM 实体中的数据。现在,您想将此模块出售给其他客户。使用解决方案,您可以打包此模块并将其分发给其他客户端,这些客户端将能够安装此解决方案并使用模块提供的功能。
解决方案类型
默认系统解决方案
系统解决方案包含 Microsoft Dynamics CRM 中定义的现成解决方案组件,无需任何自定义。系统解决方案中的许多组件都是可自定义的,可用于托管解决方案或非托管自定义。
在本教程中,我们没有创建任何解决方案,而是自定义了默认系统解决方案。如果您还记得,我们转到了"设置"→"自定义"→"自定义系统"。此选项直接自定义默认解决方案。
托管解决方案
托管解决方案是已完成并打算分发和安装的解决方案。托管解决方案可以安装在系统解决方案或其他托管解决方案之上。
要点 −
如果您从一个组织导出托管解决方案并将其导入到另一个组织,则无法在新组织中编辑该解决方案。
托管解决方案不直接引用系统解决方案。
卸载托管解决方案会卸载与该解决方案相关的所有自定义项。
默认情况下,托管解决方案无法在目标组织中进行自定义。但是,使用托管属性的概念,您可以定义解决方案组件是否可以自定义,如果可以,那么一旦解决方案导出为托管解决方案,组件的哪些特定部分将可以自定义。
非托管解决方案
非托管解决方案是仍在开发中且不打算分发的解决方案。非托管解决方案包含 CRM 组件的所有非托管自定义项,包括任何添加、修改、移除或删除的组件。默认情况下,任何新解决方案都是非托管解决方案。但是,您可以将非托管解决方案导出为托管或非托管解决方案。
要点 −
如果您从一个组织导出非托管解决方案并将其导入另一个组织,则可以在新组织中编辑该解决方案。
非托管解决方案直接引用系统解决方案。因此,对一个非托管解决方案所做的更改将应用于引用相同组件的所有非托管解决方案,包括系统解决方案。
如果您从非托管解决方案中删除解决方案组件,则该组件将从系统中永久删除,并且不再可用。如果您只想从特定的非托管解决方案中删除组件,请使用 remove 而不是 delete。
卸载非托管解决方案不会删除相关的自定义项。它只是从系统中删除解决方案,但您所做的更改仍会存在。
解决方案组件
解决方案可用于打包以下组件,这些组件可使用默认、非托管或托管解决方案进行自定义。
组件类型 | 组件 |
---|---|
Schema | Entities |
Attributes | |
Relationships | |
Global Option Sets | |
User Interface | Application Ribbon |
SiteMap | |
Forms | |
Entity Ribbons | |
Web Resources | |
Analytics | Dashboards |
Reports | |
Visualizations | |
Process/Code | Processes |
Dialogs | |
Workflows | |
Plugins | |
Assemblies | |
Processing Steps | |
Templates | Mail-merge |
Contract | |
Article | |
Security | Security Roles |
Field Level Security Profiles |
创建解决方案
步骤 1 − 导航到"设置"->"解决方案"。单击"新建"。
步骤 2 − 在随后的窗口中,输入以下详细信息,然后单击"保存并关闭"。
显示名称 − 示例解决方案(可以是您想要的任何名称)。
名称 − 将根据显示名称自动设置。但是,您可以更改它。
发布者 − 默认发布者。解决方案发布者提供通用自定义前缀和选项值前缀。定义解决方案发布者可控制分发后如何更新托管解决方案。但是,对于此示例以及大多数一般情况,您可以将其设置为默认发布者。
版本 − 使用以下格式指定版本:major.minor.build.revision。例如:1.0.0.0。
默认情况下,每个解决方案都作为非托管解决方案添加。添加解决方案后,您可以通过在此解决方案的上下文中创建解决方案组件或添加来自其他解决方案的现有组件来添加解决方案组件。例如,您可以在此新解决方案的上下文中创建新的实体、表单等。
导出解决方案
完成要打包为托管或非托管解决方案的所有更改后,您可以按如下方式导出解决方案。
步骤 1 − 打开源组织并导航到"设置"和"解决方案"。选择要导出的解决方案,然后单击"导出"按钮。
步骤 2 −在"发布自定义"窗口中,单击"发布所有自定义",然后单击"下一步"。
步骤 3 − 在随后的窗口中,您可以选择任何系统设置(例如自动编号、日历设置等)与解决方案一起导出。现在,您可以避免选择任何选项并单击"下一步"。
步骤 4 − 在"包类型"窗口中,您可以选择是否要将包导出为托管或非托管解决方案。对于此示例,让我们将其导出为非托管。完成后,单击"下一步"。
步骤 5 − 在下一个窗口中,您可以看到您正在使用的 CRM 的源版本,并可以选择目标版本。单击"导出"。
步骤 6 − 单击"导出"后,解决方案将导出为 zip 文件。将此 zip 文件保存在系统上的所需位置。
导入解决方案
现在,我们将上一节中导出的解决方案 zip 文件导入到新的目标组织。
步骤 1 − 打开目标组织并导航到"设置"→"解决方案"。单击"导入"。
步骤 2 − 浏览从导出步骤下载的 zip 文件,然后单击下一步。
步骤 3 − 如果需要,您可以在下一个窗口中查看解决方案包详细信息。单击"导入"将启动解决方案导入过程。
步骤 4 − 导入过程完成后,将显示成功或失败的状态。如果过程成功,请单击"发布所有自定义项"。如果解决方案导入失败,它将为您提供详细的错误日志,说明导入过程的哪个步骤失败了。
步骤 5 − 我们完成了。解决方案将成功导入目标组织。单击"关闭"。
冲突解决
由于您可以让多个开发人员自定义和扩展 CRM,因此您将拥有多个托管和非托管解决方案。导出和导入这些解决方案有时会导致冲突情况。例如,假设"解决方案 A"包含表单上的字段,而"解决方案 B"已删除该字段,"解决方案 C"已重命名该字段。在这种情况下,最终的变化是什么?在这种冲突情况下,CRM 使用两种方法。
合并 − 此方法用于用户界面组件,例如命令栏、功能区和站点地图。根据此方法,解决方案组件从底部重新计算,组织的非托管自定义项是最后应用的。
最佳获胜 − 此方法用于除用户界面组件之外的所有其他冲突情况。根据此方法,最后的更改(无论是托管的还是非托管的)具有优先权并被应用。
结论
在本章中,我们介绍了解决方案的概念以及不同类型的解决方案及其组件。然后,我们学习了如何创建、导出和导入解决方案。最后,我们研究了两种冲突解决策略,当多个托管和非托管解决方案影响相同的解决方案组件时,就会发生这种情况。