ソリューション

完了

ソリューションは、Dataverse 環境でカスタマイズを追跡、管理するコンテナーです。 ソリューションは、アプリやコンポーネントをある環境から別の環境に転送したり、一連のカスタマイズを既存のアプリに適用するために使用します。

複数の環境がある場合は、それぞれに独自のソリューションのセットがあります。

ソリューションの概要環境を示す図。

メモ

Sales などの Microsoft Dynamics 365 アプリがある場合、アプリは同じソリューション フレームワークを使用してインストールされます。 ISV も、ソリューションを使用して製品を出荷します。

ソリューションには次の特徴があります。

  • 構成データにメタデータと特定のエンティティを含む。 ビジネス データはソリューションに含まれない。
  • モデル駆動型アプリ、キャンバス アプリ、サイト マップ、フロー、テーブル、テーブル メタデータ、列、フォーム、ビュー、ビジネス ルール、プロセス定義、カスタム コネクタ、Web リソース、選択、グラフ、コンポーネントなどのコンポーネントや、開発者が作成したスクリプトやコンパイルされたコードなどのさまざまな Microsoft Power Platform コンポーネントを含む。
  • 他の環境にエクスポートまたはインポートする際はユニットとしてパッケージ化される。または、分解されアセットのソース コードとしてソース管理にチェックインされる。
  • 既存のソリューションに変更を適用するために使用される。

ソリューションのタイプ

ソリューションには、次の 2 つのタイプがあります。

  • アンマネージド - 開発中に使用され、他の開発環境への転送に使用されます。
  • マネージド - 非開発環境への配布に使用されます。

アンマネージド ソリューションは、開発環境でアプリケーションに変更を加えるときに使用します。 その後、アンマネージドとしてエクスポートされたソリューションを、ソース管理システムにチェックインします。 アンマネージド ソリューションは、ソースとして考える必要があります。

管理ソリューションは、テスト、ユーザー受け入れテスト (UAT)、システム統合テスト (SIT)、運用環境など、開発環境ではないすべての環境に配置するために使用します。

管理ソリューションは、任意の環境にある他の管理ソリューションとは別にサービス提供 (更新、パッチ、削除) できます。 ALM のベスト プラクティスとして、管理ソリューションはビルド サーバーで生成し、ビルド アーティファクトとして考慮します。

ソリューションの階層化

ソリューション階層は、コンポーネントの動作を拡張または変更する各ソリューションを通じて、コンポーネントを提供するルート ソリューションからの依存関係チェーンを表します。 階層は、既存のコンポーネントの拡張 (依存関係に基づく)、またはソリューションの新しいコンポーネントや新しいバージョンの作成によって作成されます。

ソリューションの階層化は、コンポーネント レベルで実装されます。 マネージドおよびアンマネージド ソリューションは、Microsoft Dataverse 環境内の異なる階層に存在します。 Dataverse には 2 つの異なる階層があります。

  • アンマネージド階層 - インポートされたすべてのアンマネージド ソリューション、および特別なカスタマイズは、この階層に存在します。 すべてのアンマネージド ソリューションは、1 つのアンマネージド階層を共有します。
  • マネージド階層 - インポートされたすべての管理ソリューション、およびシステム ソリューションは、このレベルに存在します。 複数の管理ソリューションがインストールされている場合、最後にインストールされたソリューションは、前にインストールされた管理ソリューションの上にインストールされます。 したがって、インストールされる 2 番目のソリューションは、前にインストールされたソリューションをカスタマイズすることができます。 2 つの管理ソリューションに競合する定義がある場合、実行時には、最後にインストールされたものが適用されるか、結合ロジックが実装されます。 管理ソリューションをアンインストールすると、その下の管理ソリューションが有効になります。 すべての管理ソリューションをアンインストールすると、システム ソリューション内で定義されている既定の動作が適用されます。 マネージド階層レベルの最下層にはシステム階層があります。 システム階層には、プラットフォームの動作に必要なエンティティとコンポーネントが含まれています。

ソリューション階層を示す図。

ソリューション アーキテクトは、ビジネス ソリューションで使用するソリューションの数を決定する必要があります。 1 つのソリューションを使用することもできますが、リリースへの依存が生じ、大規模なソリューションのエクスポートとインポートには時間がかかる場合があります。 ほとんどのプロジェクトでは複数のソリューションを使用します。 ソリューション アーキテクトは、ソリューションを更新する際や複数のソリューションがインストールされている際のマージ動作やコンポーネントへの影響を理解する必要があります。

次の例では、Common Data Model 医療向けアクセラレータ、Contoso Common ソリューション、およびアプリを含む階層化された 2 つのソリューションを含む、4 つのソリューションが使用されています。 たとえば、Common Data Model 医療向け拡張機能では、連絡先フォームがカスタマイズされています。 同じフォーム要素が、Contoso Common ソリューションでは変更されています。 ユーザーには、Contoso Common ソリューションからの変更が表示されます。

ソリューション階層の例を示す図。

ソリューションの構造

以下に、ソリューション作成のための戦略を、最も簡単なものから最も複雑なものまで一覧表示したものを示します。

  • 単一のソリューション
  • 複数のソリューション
  • 共有コンポーネントを含む複数のソリューション

単一のソリューションを作成することで、使用できるカスタマイズ セットを確立することができます。 このアプローチを使用することで、カスタマイズした項目を簡単に見つけることができます。 さらに、管理ソリューションを 1 つだけ作成する場合もこの方法をお勧めします。 将来、ソリューションを分割する必要がある可能性がある場合は、複数のソリューションの使用を検討してください。

コンポーネントを共有しない 2 つの関連しないソリューションがある場合、最も直接的なアプローチは、2 つのアンマネージド ソリューションを作成することです。

複数のソリューションでコンポーネントが共有されている場合もあります。 複数のソリューション内に特定の共通機能があり、その共通の機能が各ソリューションに固有のその他の機能と互換性を持つ場合もあります。 ソリューションに対するすべての変更が、使用される他のすべてのソリューションと互換性がある場合、一部のコンポーネントを複数のソリューションに含めることができます。 すべてのソリューションで同じソリューション発行者を共有することが重要です。 ソリューション発行者が同じでない場合、複数のソリューションをインストールすることはできません。

ソリューションでは、次のルールに従います。

  • ソリューション発行者を作成して、それをすべてのソリューションで使用します。
  • 既定の発行元、既定のソリューション、または Dataverse の既定のソリューションは使用しないでください。
  • ソリューション構造は、できるだけ単純なものにします。
  • アンマネージド テーブルを追加する場合を除いて、すべてのコンポーネントを含めるのチェック ボックスをオンにしないでください。
  • テーブル メタデータは、テーブルのプロパティを変更している場合のみ含めます。
  • テーブルのサブコンポーネント (列、フォーム、ビューなど) は、それらを変更している場合のみ追加します。

ソリューションに必要な項目のみを追加することは、ソリューションの区分化と呼ばれます。

テーブルの追加を示すスクリーンショット。

1 つまたは複数のソリューションで区分を使用するかどうかを決定する際は、次の点を考慮する必要があります。

  • 複数のソリューションを使用すると複雑さが増すため、明確な目的がある場合のみ複数のソリューションを使用します。
  • コンポーネントを共有する複数のソリューションを使用することは避けます。
  • 複数のソリューションでは、独立した状態を維持するために各ソリューションに独自の環境が必要です。
  • 依存関係を管理する際は注意が必要です。
  • 作成者は、どのソリューションに新しいコンポーネントを取り込むかを理解している必要があります。
  • 複数のソリューションの分割の一般的なパターンは、水平および垂直分割です。

水平ソリューション分割

上下分割とは、同じタイプのコンポーネントのみを含むソリューションの作成を指します。

水平ソリューション分割の図。

ソリューションの垂直階層化

垂直レイヤー化とは、コンポーネントを機能領域にグループ化するものです。 多くの場合、主要なビジネス領域ごとの個別のソリューションによって使用される、基盤/共通ソリューションがあります。

ソリューションの垂直階層化を示す図。

たとえば、各アプリの個別のソリューションで使用されるすべてのテーブルとプロセスを含む基盤に対して、垂直および水平分割を組み合わせることができます。