删除依赖项概览

解决方案组件通常依赖于其他解决方案组件。 您无法删除与其他解决方案组件有依赖关系的任何解决方案组件。 依赖关系是解决方案框架自动创建的记录,用于阻止在一个或多个依赖组件仍包含对所需组件的引用时删除这些组件。 依赖关系的一个示例如下:假设某个字段对于某个窗体的运行是必需的,如果您曾尝试执行的操作会导致删除该字段,窗体将停止工作。

备注

在本文中,删除意味着组件从系统中完全移除。

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

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

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

非托管组件

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

托管组件

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

示例情形

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

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

使用单层卸载。

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

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

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

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

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

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

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

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

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

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

显示依赖关系页面

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

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

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

诊断依赖关系

我们来考虑以下情形。 下面的组织有两个解决方案:解决方案 - 工作流解决方案 - 自定义实体

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

组织的负责人决定不再需要解决方案 - 自定义实体,尝试删除它,显示了以下页面:

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

不再详细叙述,可以得出结论,解决方案的卸载正在尝试删除名为自定义实体的实体和三个字段—自定义实体名称编号字段,所有四个组件都具有依赖关系。

备注

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

下一步是检查每个依赖关系的解决方案层链接(最右侧列)。 这将帮助您决定执行哪些操作来移除依赖关系。

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

自定义实体依赖关系详细信息。

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

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

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

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

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

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

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

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

备注

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

移除托管依赖关系的操作

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

如果您尝试卸载解决方案

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

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

如果您尝试升级解决方案

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

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

  1. 在目标组织中,卸载分段解决方案(以 _Upgrade 结尾的解决方案)。
  2. 在源组织中,将必需组件添加回解决方案。
  3. 导出新版本。
  4. 重试升级。

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

层和依赖关系

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

考虑以下情况:

选择要卸载的解决方案。

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

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

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

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

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

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

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

但是,new_numberfield 属性不再列出,即使它存在于多个层中。

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

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

备注

  • 显示依赖关系命令可让您采取措施查看、删除依赖关系、编辑组件或删除组件。 详细信息:查看组件的依赖项
  • 您也可以删除依赖组件。 该操作将连同组件一起删除所有依赖关系。

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

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

  • 依赖组件:依赖于所选字段的组件的列表。 换言之,这些组件将此字段作为其必需组件。
  • 必需组件:此字段工作所需的组件的列表。 换言之,这些组件将此字段作为其依赖组件。

组件依赖关系。

另请参见