解决方案

已完成

解决方案是跟踪和管理 Dataverse 环境中自定义项的容器。 解决方案用于将一个环境中的应用和组件传输到另一个环境,或者将一组自定义项应用于现有应用。

当您拥有多个环境时,每个环境都有其自己的一组解决方案。

显示解决方案概述环境的示意图。

注意

如果您有一个 Microsoft Dynamics365 应用(如 Sales),该应用将使用相同的解决方案框架进行安装。 ISV 也会使用解决方案来运送其产品。

解决方案的特征是:

  • 包含元数据和一些具有配置数据的实体。 解决方案不含业务数据。
  • 包含很多不同的 Microsoft Power Platform 组件,如模型驱动应用、画布应用、站点地图、流、表、表元数据、列、窗体、视图、业务规则、流程定义、自定义连接器、Web 资源、选项、图表以及由开发人员创建的组件(如脚本或编译代码)。
  • 封装到一个装置中,以导出和导入到其他环境,或者将其作为资产的源代码解构并签入到源代码管理中。
  • 用于对现有解决方案应用更改。

解决方案的类型

解决方案分为以下两种类型:

  • 非托管 - 在开发期间使用并传输到其他开发环境。
  • 托管 - 用于分发到非开发环境。

您将在开发环境中使用非托管解决方案,同时对您的应用做出配置更改。 解决方案导出为非托管解决方案,然后签入您的源代码管理系统中。 非托管解决方案应被视为您的来源。

使用托管解决方案部署到任何非开发环境中,包括测试、用户验收测试 (UAT)、系统集成测试 (SIT) 和生产环境。

托管解决方案可独立于其他托管解决方案进行维护(升级、修补和删除)。 作为 ALM 最佳做法,托管解决方案应由构建服务器生成并视为生成工件。

解决方案分层

解决方案层从引入组件的根解决方案到扩展或更改组件行为的每个解决方案,描述了组件的依赖链。 层是通过扩展现有组件(依赖该组件)或创建解决方案的新组件或新版本来创建层。

解决方案分层已在组件级别实现。 托管和非托管解决方案分布在 Microsoft Dataverse 环境中的不同层中。 Dataverse 具有两个不同层:

  • 非托管层 - 这一层分布着所有导入的,非托管解决方案和专用自定义项。 所有非托管解决方案共用一个非托管层。
  • 托管层 - 这一层分布着所有导入的,托管解决方案和系统解决方案。 安装多个托管解决方案时,最后安装的解决方案位于先前安装的托管解决方案的上方。 因此,所安装的第二个解决方案可以自定义在其之前安装的解决方案。 如果两个托管解决方案的定义存在冲突,运行时将遵循“以最后一个为准”或实施合并逻辑的原则。 如果卸载某个托管解决方案,其下方的托管解决方案将会生效。 如果卸载所有托管解决方案,则将适用系统解决方案中定义的默认原则。 在托管层的基层为系统层。 系统层包含平台运行所需的实体和组件。

显示解决方案层的图表。

解决方案架构师需决定其业务解决方案中要使用的解决方案数量。 尽管您可以使用单个解决方案,在发布时也会产生依赖关系,并且大的解决方案可能需要很长时间来导出和导入。 大部分项目会使用多个解决方案。 解决方案架构师应了解在更新解决方案或安装多个会影响同一组件的解决方案时,所遵循的合并原则。

在以下示例中,我们有四个使用 Common Data Model/系统表的解决方案:Common Data Model 医疗保健解决方案、Contoso Common 解决方案和两个包含应用且分层的解决方案。 例如,假设我们在 Common Data Model 医疗保健扩展中自定义“联系人”窗体。 然后,如果我们修改 Contoso Common 解决方案中的相同窗体元素,用户将看到 Contoso Common 解决方案中的更改。

显示示例解决方案层的图表。

解决方案结构

解决方案的创建策略(按从最简单到最复杂的顺序列出)有:

  • 单个解决方案
  • 多个解决方案
  • 带有共享组件的多个解决方案

通过创建单个解决方案,您将建立一组有效的自定义。 通过这种方法,可以更加轻松地查找您已自定义的项。 此外,如果您只想创建单个托管解决方案,建议使用本方法。 如果您感觉自己未来可能需要拆分解决方案,可以考虑使用多个解决方案。

如果您有两个无共用组件的不相关解决方案,最直接的方法是创建两个非托管解决方案。

您可以有多个共用组件的解决方案。 多个解决方案可以有一组共同的功能,并且共同的功能与每个解决方案中的其他专用功能兼容。 有些组件可以包含到多个解决方案中,前提是对其作出的任何更改均与使用它们的所有其他解决方案兼容。 重要的是,所有解决方案共享同一解决方案发布商。 如果解决方案发布商不一样,您就不能安装多个解决方案。

对于解决方案,您应当遵循的规则有:

  • 创建解决方案发布商并将其用于所有解决方案。
  • 不要使用默认发布商、默认解决方案或 Dataverse 默认解决方案。
  • 解决方案的结构要尽可能简单。
  • 不要选中添加所有组件复选框,除非要添加非托管表。
  • 仅在更改表属性时,添加表元数据。
  • 仅在更改子组件时,添加表的子组件(列、窗体、视图等)。

仅添加解决方案所需项目称为解决方案细分

显示表添加内容的屏幕截图。

在决定如何细分到一个或多个解决方案时,应考虑以下事项:

  • 仅出于实际目的使用多种解决方案,因为多种解决方案会增加复杂性。
  • 避免使用共享组件的多个解决方案。
  • 多个解决方案需要有自己的环境,以确保其保持独立。
  • 谨慎管理依赖项。
  • 制作者必须知道要将新组件放入哪个解决方案。
  • 拆分多个解决方案时的常见模式为水平和垂直分区。

解决方案水平拆分

水平拆分是指创建仅包含相同类型组件的解决方案。

水平拆分解决方案的图表。

解决方案垂直分层

垂直分层将组件分组到功能区域。 通常,您会有一个共享的基础/共同的解决方案,并为每个关键业务领域提供单独的解决方案。

显示解决方案垂直分层的图表。

您可以将垂直和水平分区(比如包含所有表和流程的基础)与每个应用的单独解决方案结合到一起。