删除依赖项概览

解决方案组件通常依赖于其他解决方案组件。 您无法删除与其他解决方案组件有依赖关系的任何解决方案组件。 依赖关系是解决方案框架自动创建的记录,用于阻止在一个或多个依赖组件仍包含对所需组件的引用时删除这些组件。

依赖关系的示例是,假设表单运行需要一个字段,当您尝试执行导致删除该字段的作时,该表单将停止工作。

另一个示例是当您尝试删除模型驱动应用的站点地图时。 系统指示对应用存在依赖关系。 应用是依赖组件,站点地图是必需组件。 系统会阻止您删除站点地图,直到您删除依赖项。

系统检测应用依赖于站点地图的依赖项。

备注

删除表示 组件已完全删除 Microsoft Dataverse。

在本文中,我们将讨论如何处理这些依赖关系以及可用于删除不再需要的依赖关系的策略。

非托管和托管组件的依赖关系

首先,重要的是要了解依赖关系仅阻止删除所需组件的作。 能够删除组件的操作会有所不同,具体取决于该组件是非托管还是托管的。

在描述依赖关系时,最好熟悉解决方案层和组件层的概念。 如果您不熟悉,我们建议您在继续之前阅读本文: 解决方案层

非托管组件

这些组件由活动解决方案中的一个层表示。 对此类组件执行的任何删除操作都将导致完全移除该组件。

托管组件

删除托管组件取决于多种因素:解决方案层的数量、正在卸载的层的相对位置,以及组件发布者。 例如,在删除组件时,应考虑以下情形以及在卸载各个层时哪些将是预期行为。

示例情形

下面的示例情形说明了在卸载解决方案时解决方案层会发生的情况。

情形 1:卸载单个解决方案层

使用单层卸载。

卸载解决方案 1 会导致组件被删除,因为它是组件的唯一一个层。

情形 2:卸载来自不同发布者的解决方案层

使用两层卸载 - 不同发布者。

  • 卸载解决方案 2 不会导致删除组件。 仅删除该层。
  • 卸载解决方案 1 会导致组件被删除,因为操作发生在基础层中。 事实上,在这种情况下,无法卸载解决方案 1,因为来自不同发布者的解决方案扩展了组件。

情形 3:卸载来自不同发布者的多个解决方案层

使用多层卸载 - 不同发布者。

  • 卸载解决方案 3 不会导致删除组件。 仅删除该层。
  • 卸载解决方案 2 不会导致删除组件。 仅删除该层。
  • 卸载解决方案 1 不会导致组件删除,因为在这种情况下,同一发布者(发布者 A = 发布者 C)有另一个解决方案。 平台会从解决方案 1 中删除层,并将其替换为解决方案 3 中的层。

情形 4:卸载非托管自定义项中的解决方案层

使用两层卸载 - 非托管自定义。

  • 卸载活动(非托管)层不会导致组件删除。 仅删除该层。 请注意,无法卸载活动解决方案,但可以使用“删除活动自定义 ”功能删除 组件。
  • 卸载解决方案 1 将导致删除组件。 操作发生在基础层。 与情形 2 不同,您可以卸载解决方案 1。 活动解决方案不被视为扩展,并且两个层都被删除。

显示依赖关系页面

显示依赖关系命令列出了所选解决方案或解决方案组件的依赖关系。 它可以通过以下方法调用:

  • 在解决方案页面上选择显示依赖关系
  • 选择解决方案组件时,在解决方案中选择高级>显示依赖关系
  • 尝试卸载解决方案,这会导致平台检测到依赖项存在。

在“依赖项 页面中,您可以打开、删除或删除组件。 详细信息:查看组件的依赖项

诊断依赖关系

考虑这个场景。 此处的环境有两个解决方案: 解决方案 - 工作流解决方案 - 自定义实体

包含两个解决方案的解决方案列表。

环境的制作者决定不再需要 解决方案 - 自定义实体。 制造商试图删除它,并显示以下页面:

尝试删除解决方案后的依赖关系详细信息。

卸载解决方案正在尝试删除名为“自定义实体”的 表和三个字段(“自定义实体”、“名称”和 “数字字段”) ,并且所有四个组件都具有依赖项。

备注

卸载解决方案可能会删除更多组件,但由于它们没有依赖关系,因此它们不会显示在列表中。

下一步是检查每个依赖关系的解决方案层链接(最右侧列)。 这有助于您决定如何删除依赖项。

下图显示了表(自定义实体)和流程(测试工作流)之间的依赖关系详细信息。

自定义表依赖项详细信息。

根据显示的数据,可以观察到依赖组件属于名为 SolutionWorkflow 的解决方案。 若要移除此依赖关系,您可以采取下列方法之一:

  • 通过删除对表或其子组件的任何引用来更新 SolutionWorkflow 中工作流的定义。 然后更新升级解决方案。
  • 卸载 SolutionWorkflow 解决方案。
  • 从 SolutionWorkflow 解决方案的新版本中删除工作流,然后执行升级

由于任何一个依赖组件都可以阻止删除解决方案,所以建议您检查所有依赖关系,并在单个操作中进行所有必需的更改。

下图显示了表(自定义实体)和模型驱动应用(MyApp)之间的依赖项详细信息。

表(自定义实体)和应用(我的应用)之间的依赖关系。

根据显示的数据,您可以观察到依赖组件属于名为“活动”的解决方案。 这指示依赖关系是通过导入非托管解决方案,或通过利用现代 UI 或 API 执行的非托管自定义项创建的。

若要移除此依赖关系,您可以采取下列方法之一:

  • 编辑模型驱动应用的定义来删除对实体或其子组件的任何引用。 由于模型驱动应用支持发布,因此您必须发布所作的更改。
  • 删除模型驱动应用。

备注

卸载非托管解决方案不是删除此依赖性的一个选择,因为非托管解决方案只是一个组分组方法。

移除托管依赖关系的操作

托管依赖关系是依赖组件与托管解决方案相关联的依赖关系。 若要解决此类依赖关系,您必须对添加了组件的解决方案执行操作。 该操作可能因您尝试执行的操作而异。

如果您尝试卸载解决方案

请按照以下步骤进行操作:

  1. 在目标环境中,检查 “解决方案层 ”链接,以查找依赖组件列表中最顶层的解决方案。
  2. 在源环境中,准备该解决方案的新版本,其中解决方案不包含依赖组件,或者具有不包含对所需组件的引用的依赖组件的更新版本。 您的目标是在解决方案的新版本中删除对必需组件的任何引用。
  3. 导出解决方案的新版本。
  4. 在目标环境中, 升级 该解决方案。
  5. 重试卸载。

如果尝试升级解决方案

在此情况下,您必须确认要删除必需组件(请记住,仅在要删除的组件上依赖关系是强制使用)。

如果您不希望删除组件,可以通过执行以下操作,通过重新添加组件来修复解决方案的新版本:

  1. 在目标环境中,卸载暂存解决方案(结尾为 _Upgrade 解决方案)。
  2. 在源环境中,将所需的组件添加回解决方案。
  3. 导出新版本。
  4. 重试升级。

如果是有意删除,还必须移除依赖关系。 尝试上一节中概述的步骤, 如果尝试卸载解决方案

层和依赖关系

依赖组件可能已经分层,因此您可能需要更改多个解决方案来完全移除依赖关系。 依赖关系框架仅计算必需组件和依赖组件的最高层之间的依赖关系。 这意味着您需要从依赖组件的解决方案的最高层开始向最低层进行处理。

考虑以下情况:

选择要卸载的解决方案。

您尝试卸载解决方案 - 自定义实体,此操作被依赖关系阻止。

阻止卸载解决方案的依赖关系。

您通过选择 new_numberfield 属性上的解决方案层来开始诊断依赖关系。 您会看到以下屏幕:

new_numberfield 属性与“测试工作流”工作流之间的依赖关系。

由于仅在每个组件的最顶层之间创建依赖关系,因此第一步是处理 SolutionCustomEntity 中的 new_numberfield 属性与 SolutionWorkflow3 中的测试工作流工作流之间的依赖关系。

为移除此依赖关系,您决定卸载 SolutionWorkflow3。 执行此操作后,当您多次尝试卸载解决方案时,您将看到相同的依赖关系页:

阻止卸载“解决方案 - 自定义实体”的依赖关系。

但是, 不再列出 new_numberfield 列,即使它存在于更多图层中也是如此。

移除非托管依赖关系的操作

若要移除非托管依赖关系,您需要直接对组件执行操作,而不是它们所属的解决方案。 例如,如果要删除列和窗体之间的依赖关系,则必须在窗体设计器中对其进行编辑,并从窗体中删除该列。 选择 “保存并 发布 后,将删除依赖项。

备注

  • 显示依赖关系命令可让您采取措施查看、删除依赖关系、编辑组件或删除组件。 详细信息:查看组件的依赖项
  • 当您尝试删除具有依赖关系的组件时,将显示“查看依赖项 ”按钮。 Although 此屏幕允许您查看依赖项,但它不允许您执行作。
  • 删除依赖组件时,该作将 删除所有依赖项以及组件。

要查看组件的依赖关系,请从解决方案区域打开所需的解决方案,选择组件旁边的垂直省略号,然后选择高级>显示依赖关系

依赖关系页有两个不同部分:

  • 依赖组件:依赖于所选列的组件列表。 换句话说,这些组件将此列作为其必需组件。
  • 所需组件:此列工作所需的组件列表。 换句话说,这些组件将此列作为其依赖组件。

组件依赖关系。

后续步骤