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