本文档适用于 Dynamics 365 Customer Engagement (on-premises)。 对于此主题的 Power Apps 版本,请参阅: 解决方案组件的依赖关系跟踪。
解决方案由解决方案组件所组成。 您将使用 Dynamics 365 Customer Engagement (on-premises) 中的解决方案区域创建或添加解决方案组件。 可以使用 AddSolutionComponentRequest 消息或用于创建或更新包括 SolutionUniqueName 参数的解决方案组件的任何消息,以编程方式执行这些操作。
解决方案组件通常依赖于其他解决方案组件。 您无法删除对其他解决方案组件具有依赖关系的任何解决方案组件。 例如,自定义功能区通常需要图像或脚本 Web 资源才能显示图标并使用脚本执行操作。 只要自定义功能区位于解决方案中,就需要其所使用的特定 Web 资源。 您必须先在自定义功能区中删除对 Web 资源的引用,才能删除这些资源。 通过单击显示依赖项,可以在应用程序中查看这些解决方案组件依赖项。
本主题介绍可以包括在解决方案中的解决方案组件的类型以及它们相互之间的依赖关系。
所有的解决方案组件
可用解决方案组件类型的完整列表位于系统的componenttype 全局选项集中。 可以使用 https://[ORGANIZATION_NAME].api.crm.dynamics.com/api/data/v9.0/GlobalOptionSetDefinitions(Name='componenttype')REST 终结点查询此数据,并使用代码查看所有组件。 通过在项目中包括文件 SampleCode\CS\HelperCode\OptionSets.cs 或 SampleCode\VB\HelperCode\OptionSets.vb 提供此属性支持的值范围。 但是,其中列出的许多解决方案组件类型仅供内部使用,并且列表不会提供解决方案组件之间的关系的相关信息。
解决方案组件依赖项
解决方案组件依赖项可帮助确保您在使用解决方案方面获得可靠的体验。 它们可防止通常执行的操作无意损坏解决方案中定义的自定义项。 利用这些依赖项,只需导入或删除托管解决方案,便可安装和卸载该解决方案。
解决方案框架会自动跟踪解决方案组件的依赖项。 对解决方案组件执行的每项操作都会自动计算系统中其他组件的任何依赖项。 依赖项信息用于维护系统的完整性并阻止可能导致状态不一致的操作。
通过依赖项跟踪可强制执行以下行为:
如果系统中的其他组件依赖于某个组件,则会防止删除该组件。
导出解决方案时会警告用户是否缺失某个组件,该组件的缺失可能在将该解决方案导入到其他系统时导致失败。
如果解决方案开发人员只想将解决方案安装在预期存在依赖组件的组织中,则可以忽略导出期间发出的警告。 例如,在创建旨在通过预先安装的“基本”解决方案进行安装的解决方案时。
如果必需组件不包含在解决方案中,并且这些组件也不存在于目标系统中,则解决方案的导入将会失败。
- 此外,在导入托管解决方案时,所有必需组件都必须与该解决方案的包类型相匹配。 托管解决方案中的组件只能依赖于其他托管组件。
解决方案组件依赖项包含三种类型:
内部解决方案
内部依赖关系由 Dynamics 365 Customer Engagement (on-premises) 管理。 当特定解决方案组件在没有其他解决方案组件的情况下无法存在时,会存在这些依赖现象。已发布
当两个解决方案组件彼此相关并且已发布时,即会创建已发布的依赖项。 若要删除此类型的依赖项,必须删除关联并且重新发布实体。未发布
未发布的依赖项应用于所更新的可发布解决方案组件的未发布版本。 该解决方案组件在发布之后,即会成为已发布的依赖项。解决方案内部依赖项是指对解决方案组件进行操作就需要对其他解决方案组件进行操作时的依赖项。 例如,如果您删除某个实体,您预期会删除该实体的所有实体属性。 同时还会删除与其他实体的任何实体关系。
但是,内部依赖项可能会成为已发布的依赖项,并且仍需要手动干预。 例如,如果您已在实体窗体中包括某个查找字段,然后删除关系中的主要实体,那么您将无法完成该删除操作,除非从相关实体窗体中删除该查找字段并发布该窗体。
当使用解决方案以编程方式执行操作时,您可以使用与
Dependency实体相关的消息。 若要了解可用于标识在删除某个组件或卸载某个解决方案之前可能存在的依赖项的消息,请参阅依赖项实体。
检查解决方案组件相关性
当您编辑解决方案时,您可能会发现无法删除某个解决方案组件,因为该组件与其他解决方案组件之间具有已发布的依赖关系。 或者,您可能无法卸载某个托管解决方案,因为该托管解决方案中的其中一个组件已用于其他托管解决方案中的自定义项。
下表列出可用于检索解决方案组件依赖项相关数据的消息。
| Message | Description |
|---|---|
| RetrieveDependentComponentsRequest | 返回直接依赖于某个解决方案组件的解决方案组件依赖项列表。 例如,在将此消息用于某个全局选项集解决方案组件时,会返回表示引用该全局选项集解决方案组件的任何选项集属性的解决方案组件依赖项记录。 当您将此消息用于客户实体的解决方案组件记录时,会返回表示用于该实体的属性、视图和窗体的所有解决方案组件依赖项记录。 |
| RetrieveRequiredComponentsRequest | 返回其他解决方案组件直接依赖的解决方案组件的依赖项列表。 此消息提供的信息与 RetrieveDependentComponentsRequest 消息相反。 |
| RetrieveDependenciesForDeleteRequest | 返回可以防止删除某个解决方案组件的解决方案组件所有依赖项列表。 |
| RetrieveDependenciesForUninstallRequest | 返回可以防止卸载某个托管解决方案的解决方案组件的所有依赖项列表。 |
常用解决方案组件
其中包括显示在应用程序中的解决方案组件,以及在使用解决方案页面添加或删除解决方案组件时将直接使用的组件。 每一个其他类型的解决方案组件都将依赖于其中一个或多个解决方案组件才能存在。
- 应用程序功能区 (RibbonCustomization)
- 实体 (Entity)
- 报告 (Report)
- 文章模板 (KBArticleTemplate)
- 字段安全配置文件 (FieldSecurityProfile)
- SDK 消息处理步骤 (SDKMessageProcessingStep)
- 连接角色 (ConnectionRole)
- 邮件合并模板 (MailMergeTemplate)
- 安全角色 (Role)
- 合同模板 (ContractTemplate)
- 选项集 (OptionSet)
- 服务终结点 (ServiceEndpoint)
- 仪表板或实体窗体 (SystemForm)
- 插件程序集 (PluginAssembly)
- 站点地图 (SiteMap)
- 电子邮件模板 (EmailTemplate)
- 流程 (Workflow)
- Web 资源 (WebResource)
应用程序功能区(RibbonCustomization)
应用程序功能区的功能区自定义项和实体功能区模板。 应用程序功能区不包括实体或窗体级别的功能区定义。
自定义应用程序功能区通常具有在 Web 资源发布的依赖项。 Web 资源用于定义功能区按钮图标和 JavaScript 函数,以控制功能区元素的显示时间或使用特定功能区控制时要执行的操作。 依赖项只会在功能区定义使用 $webresource: 指令将 Web 资源关联到功能区时创建。 详细信息:$webresource 指令
文章模板(KBArticleTemplate)
包含文章标准属性的模板。 文章模板与 KbArticle 实体之间始终存在内部依赖项。
连接角色(ConnectionRole)
描述两条记录之间关系的角色。 每个连接角色都会定义可以使用连接角色链接的实体记录类型。 这样可在连接角色与实体之间创建已发布的依赖项。
联系人模板 (ContractTemplate)
包含合同标准属性的模板。 合同模板与合同实体之间始终存在内部依赖项。
仪表板或实体窗体(SystemForm)
系统窗体实体记录可用于定义仪表板和实体窗体。 当 SystemForm 用作实体窗体时,会对实体存在内部依赖项。 当 SystemForm 用作仪表板时,没有内部依赖项。 实体窗体和仪表板通常具有与其内容相关的已发布依赖项。 实体窗体可能具有依赖于实体关系的查找字段。 仪表板和实体窗体可能包含将会在视图上创建已发布依赖项的图表或子网格,从而对实体具有内部依赖项。 由于仪表板或窗体中显示了内容或窗体中包含 JavaScript 库时,可以在 Web 资源上创建已发布的依赖项。 实体窗体针对窗体中显示为字段的任何属性都具有已发布的依赖项。
电子邮件模板(EmailTemplate)
包含电子邮件消息标准属性的模板。 电子邮件模板通常包括从指定的实体属性插入数据的字段。 电子邮件模板可以在创建时链接到特定的实体,因此可能存在对该实体的内部依赖项。 全局电子邮件模板不与特定的实体相关联,但是它可能对用于提供数据的实体属性具有已发布的依赖关系。 流程 (workflow) 通常配置为使用电子邮件模板发送电子邮件,从而使用该工作流创建已发布的依赖项。
实体 (Entity)
用于在 Dynamics 365 Customer Engagement (on-premises) 中建模和管理数据的主要结构。 当删除某个实体时,由于与该实体相关联的图表、窗体、实体关系、视图和属性和该实体之间存在内部依赖项,因此将会自动删除这些内容。 实体通常具有流程、仪表板和电子邮件模板的已发布依赖项。
字段安全资料(FieldSecurityProfile)
定义安全属性的访问级别的配置文件。
邮件合并模板(MailMergeTemplate)
包含邮件合并文档的标准属性的模板。 邮件合并模板对与其相关联的实体具有已发布的依赖关系。
选项集(OptionSet)
选项集用于定义一组选项。 选择列表属性使用选项集定义所提供的选项。 有多个选择列表属性可能会使用全局选项集,以便它们所提供的选项始终相同并且可以在一个位置进行维护。 当选择列表属性引用全局选项集时,即会存在已发布的依赖项。 您无法删除选择列表属性所使用的全局选项集。
常见程序集 (PluginAssembly)
包含一个或多个插件类型的程序集。 插件会注册到通常与某个实体相关联的事件。 这样即可创建已发布的依赖项。
流程 (Workflow)
一组逻辑规则,用来定义实现特定业务流程、任务或者所要执行的一组操作的自动化所需的步骤。 流程提供的各种操作可针对流程所引用的任何其他解决方案组件创建已发布的依赖项。 每个流程对与其相关联的实体也具有已发布的依赖关系。
报表 (Report)
采用易读布局的数据摘要。 报表对其中所包括的任何实体或属性数据具有已发布的依赖项。 此外,每个报表都必须与报表类别相关联,以针对称为报表相关类别 (ReportCategory) 的解决方案组件创建内部依赖项。 可以将报表配置为子报表,并与上级报表之间创建已发布的依赖项。
SDK消息处理步骤(SDKMessageProcessingStep)
执行管道中要由插件执行的阶段。
安全角色(角色)
对安全权限进行分组。 向用户分配角色,授权他们访问 Dynamics 365 Customer Engagement (on-premises) 系统。 实体窗体可以与特定安全角色相关联,以控制可以查看该窗体的人员。 这样可在安全角色与窗体之间创建已发布的依赖项。
注释
只有来自组织业务部门的安全角色可以添加到解决方案中。 只有对这些安全角色拥有读取访问权限的用户可以将其添加到解决方案中。
服务端点(ServiceEndpoint)
可以联系的服务端点。
站点地图(SiteMap)
用于控制应用程序导航窗格的 XML 数据。 可以链接站点地图以显示 HTML Web 资源,或者站点地图中的图标可以使用图像 Web 资源。 当使用 $webresource: 指令建立这些关联时,即会创建已发布的依赖项。 详细信息:$webresource 指令
Web资源(WebResource)
Web 开发中使用的与文件等效的数据。 Web 资源提供用于提供自定义用户界面元素的客户端组件。 Web 资源可能与实体窗体、功能区和站点地图之间具有已发布的依赖项。 当使用 $webresource: 指令在功能区或站点地图中建立关联时,即会创建已发布的依赖项。 有关详细信息,请参阅 $webresource 指令。
注释
Web 资源可能依赖于基于相关链接的其他 Web 资源。 例如,HTML Web 资源可能使用 CSS 或脚本 Web 资源。 在实体窗体或图表外显示的 Silverlight Web 资源必须有一个承载它的 HTML Web 资源。 这些依赖关系不会被作为解决方案依赖关系进行追踪。
另请参阅
使用 Dynamics 365 Customer Engagement (on-premises) 解决方案打包和分发扩展
解决方案简介
规划解决方案开发
创建、导出或导入非托管解决方案
创建、安装和更新托管解决方案
创建、安装和更新托管解决方案
卸载或删除解决方案
解决方案实体