ソリューション コンポーネントは、多くの場合、他のソリューション コンポーネントに依存しています。 他のソリューション コンポーネントへの依存関係があるソリューション コンポーネントは削除できません。 依存関係は、必要なコンポーネントが削除されないようにするためにソリューション フレームワークによって自動的に作成されるレコードで、1 つ以上の依存コンポーネントにはそれらへの参照が含まれています。
依存関係においては、フォームが機能するためにフィールドが必要な場合、そのフィールドを削除するようなアクションを実行しようとすると、フォームは機能しなくなります。
別の例は、モデル駆動型アプリのサイトマップを削除しようとした場合です。 システムは、アプリへの依存関係があることを示します。 アプリは依存コンポーネントであり、サイト マップは必須コンポーネントです。 依存関係を削除するまで、サイト マップを削除できません。
注意
削除は、そのコンポーネントが Microsoft Dataverse から完全に削除されることを意味します。
この記事では、これらの依存関係を処理する方法と、不要になった依存関係を削除するために使用できる戦略について説明します。
アンマネージド コンポーネントとマネージド コンポーネントの依存関係
まず、依存関係によって必須コンポーネントを削除する操作のみが防止されることを理解することが重要です。 コンポーネントを削除できるアクションは、アンマネージドかマネージドかによって異なります。
依存関係を説明する際には、ソリューション レイヤーとコンポーネント レイヤーの概念に慣れておくと良いでしょう。 慣れていない場合は、先に進む前に ソリューションレイヤー の記事を読むことをお勧めします
アンマネージド コンポーネント
これらのコンポーネントは、アクティブ ソリューションでの単一のレイヤーで表されます。 このようなコンポーネントでの 削除 操作により、コンポーネントが完全に削除されます。
マネージド コンポーネント
マネージ コンポーネントの削除は、ソリューションのレイヤー数、アンインストールされるレイヤーの相対的な位置、コンポーネントの公開元など、複数の要因に依存します。 たとえば、コンポーネントが削除された場合、次のシナリオと、さまざまなレイヤーをアンインストールしたときに予想される動作について考えます。
シナリオの例
次のシナリオ例は、ソリューションがアンインストールされたときにソリューション レイヤーがどうなるかを示しています。
シナリオ 1: 単一のソリューション レイヤーをアンインストールする
ソリューション 1 をアンインストールすると、コンポーネントの唯一のレイヤーであるため、コンポーネントが削除されます。
シナリオ 2: 異なる発行元からのソリューション レイヤーをアンインストールする
- Solution 2 をアンインストールしても、コンポーネントは削除されません。 そのレイヤーのみが削除されます。
- ソリューション 1 をアンインストールすると、アクションが基本レイヤーで発生するため、コンポーネントが削除されます。 実際、このシナリオでは、別の発行元のソリューションがコンポーネントを拡張しているため、ソリューション 1 をアンインストールすることはできません。
シナリオ 3: 異なる発行元からの複数のソリューション レイヤーをアンインストールする
- Solution 3 をアンインストールしても、コンポーネントは削除されません。 そのレイヤーのみが削除されます。
- Solution 2 をアンインストールしても、コンポーネントは削除されません。 そのレイヤーのみが削除されます。
- この場合、同じ発行元 (発行元 A = 発行元 C) からの別のソリューションが存在するため、ソリューション 1 をアンインストールしても、コンポーネントは削除されません。 プラットフォームはソリューション 1 からレイヤーを削除し、ソリューション 3 からのレイヤーに置き換えます。
シナリオ 4: アンマネージド カスタマイズでソリューション レイヤーをアンインストールする
- アクティブな (アンマネージド) レイヤーをアンインストールしても、コンポーネントは削除されません。 そのレイヤーのみが削除されます。 アクティブなソリューションをアンインストールすることはできませんが、アクティブなカスタマイズの削除機能を使用してコンポーネントを削除することはできます。
- ソリューション 1 をアンインストールすると、コンポーネントは削除されます。 アクションは基本レイヤーで発生します。 シナリオ 2 とは異なり、ソリューション 1 をアンインストールできます。 アクティブなソリューションは拡張機能とは見なされず、両方のレイヤーが削除されます。
依存関係ページを表示する
依存関係を表示する コマンドは、選択したソリューションまたはソリューション コンポーネントの依存関係を一覧表示します。 次の方法で呼び出すことができます:
- ソリューション ページで 依存関係を表示 を選択します。
- ソリューション コンポーネントが選択されている場合に、ソリューション内で詳細>依存関係を表示するを選択する。
- ソリューションをアンインストールしようとすると、プラットフォームは存在する依存関係を検出します。
依存関係ページから、コンポーネントを開いたり、削除したりできます。 詳細: コンポーネントの依存関係を表示する
依存関係の診断
次のようなシナリオが考えられます。 この環境には、ソリューション - ワークフロー と ソリューション - ユーザー定義エンティティの 2 つのソリューションがあります。
環境の作成者が、ソリューション - カスタム エンティティ は必要ないと判断した場合。 作成者が削除しようとすると、次のページが表示されました。
ソリューションのアンインストールでは、ユーザー定義エンティティ という名前のテーブルと、ユーザー定義エンティティ、名前、数値フィールド という 3 つのフィールドを削除しようとしており、4 つのコンポーネントすべてに依存関係があります。
Note
ソリューションをアンインストールすると、多くのコンポーネントを削除する可能性がありますが、依存関係がないため、リストに表示されません。
次のステップは、各依存関係の ソリューション レイヤー リンク (右端の列) を確認することです。 これは、依存関係を削除するのに何をすべきかを決定する際に役立ちます。
次の図は、テーブル (ユーザー定義エンティティ) とプロセス (テストワークフロー) 間の依存関係の詳細を示しています。
表示されたデータに基づいて、依存コンポーネントが SolutionWorkflow という名前のソリューションに属していることがわかります。 この依存関係を削除するには、次のいずれかを実行できます:
- テーブルまたはそのサブコンポーネントへの参照を削除して、SolutionWorkflow のワークフローの定義を更新します。 その後ソリューションを更新またはアップグレードします。
- SolutionWorkflow ソリューションをアンインストールします。
- SolutionWorkflow ソリューションの新しいバージョンからワークフローを削除し、アップグレード を実行します。
1 つの依存コンポーネントがソリューションの削除を妨げる可能性があるため、すべての依存関係を確認し、必要なすべての変更を 1 回の操作で行うことをお勧めします。
次の図は、テーブル (ユーザー定義エンティティ) とモデル駆動型アプリ (MyApp) 間の依存関係の詳細を示しています。
表示されたデータに基づいて、依存コンポーネントがアクティブという名前のソリューションに属していることがわかります。 これは、アンマネージド ソリューションをインポートすることによって、または最新の UI あるいは API を通じて実行されたアンマネージド カスタマイズによって、依存関係が作成されたことを示しています。
この依存関係を削除するには、次のいずれかを実行できます:
- モデル駆動型アプリの定義を編集して、エンティティまたはそのサブコンポーネントへの参照を削除します。 モデル駆動型アプリは公開をサポートしているため、変更を公開する必要があります。
- モデル駆動型アプリを削除します。
Note
アンマネージド ソリューションはコンポーネントをグループ化する手段に過ぎないため、アンマネージド ソリューションをアンインストールしても、この依存関係を削除することはできません。
管理された依存関係を削除するアクション
管理された依存関係は、依存コンポーネントがマネージド ソリューションに関連付けられている依存関係です。 この種類の依存関係を解決するには、コンポーネントが追加されたソリューションを操作する必要があります。 そのアクションは、実行しようとしている操作によって異なります。
ソリューションをアンインストールしようとしている場合
次のステップを実行します。
- ターゲットの環境で、ソリューション レイヤー リンクを調べて、依存コンポーネントのリストで最上位のソリューションを見つけます。
- ソース環境で、ソリューションに依存コンポーネントが含まれていない場合、または必須コンポーネントへの参照が含まれていない依存コンポーネントの更新バージョンがある場合は、そのソリューションの新しいバージョンを準備します。 目標は、ソリューションの新しいバージョンで必須コンポーネントへの任意の参照を削除することです。
- ソリューションの新しいバージョンをエクスポートします。
- ターゲット環境で、そのソリューションをアップグレードします。
- アンインストールを再試行します。
ソリューションをアップグレードしようとしている場合
この場合、必須コンポーネントを削除することを確認する必要があります (依存関係は削除されるコンポーネントにのみ適用されることに注意してください)。
コンポーネントを削除したくない場合は、次の手順でコンポーネントを追加し直すことで、新しいバージョンのソリューションを修正できます。
- ターゲット環境で、ステージングされるソリューション (_Upgrade で終わるソリューション) をアンインストールします。
- ソース環境で、必須コンポーネントをソリューションに追加します。
- 新しいバージョンをエクスポートします。
- アップグレードを再試行します。
意図的に削除する場合は、依存関係を削除する必要があります。 前のセクション ソリューションをアンインストールしようとしている場合 で説明した手順を試してください。
レイヤーと依存関係
依存コンポーネントは階層化できるため、依存関係を完全に削除するには、複数のソリューションの変更が必要になる場合があります。 依存関係のフレームワークは、必須コンポーネントと依存コンポーネントの最上位レイヤー間の依存関係のみを計算します。 つまり、依存コンポーネントのソリューションの最上位から最下位に向かって作業する必要があります。
次のシナリオを確認してください。
ソリューション - ユーザー定義エンティティ をアンインストールしようとすると、依存関係によって操作がブロックされます。
new_numberfield 属性で ソリューション レイヤー を選択して、依存関係の診断を開始します。 次の画面を確認してください:
依存関係は各コンポーネントの最上位のレイヤー間でのみ作成されるため、最初のステップは、SolutionCustomEntity の new_numberfield 属性と SolutionWorkflow3 の テスト ワークフロー ワークフロー間の依存関係を処理することです。
依存関係を削除するために、SolutionWorkflow3 をアンインストールすることにします。 しかし、ソリューションをもう一度アンインストールしようとすると、依存関係の同じページが表示されます:
ただし、new_numberfield 列は、より多くのレイヤーに存在していても、一覧表示されなくなりました。
管理されていない依存関係を削除するアクション
管理されていない依存関係を削除するには、コンポーネントが属するソリューションではなく、コンポーネントでの直接の操作が必要です。 たとえば、列とフォームの依存関係を削除したい場合、フォーム デザイナーで編集し、フォームから列を削除する必要があります。 保存と公開の選択後に、依存関係が削除されます。
注意
- 依存関係の表示 コマンドを使用すると、依存関係の表示、削除、コンポーネントの編集、またはコンポーネントの削除などのアクションを実行できます。 詳細: コンポーネントの依存関係を表示する
- 依存関係を表示ボタンは、依存関係を持つコンポーネントを削除しようとすると表示されます。 この画面では依存関係を表示できますが、アクションを実行することはできません。
- 依存コンポーネントを削除すると、アクションはコンポーネントとともにすべての依存関係を削除します。
コンポーネントの依存関係を表示するには、ソリューション 領域から目的のソリューションを開き、コンポーネントの横にある垂直の省略記号を選択し、詳細>依存関係を表示します。
依存関係のページは 2 つの部分があります:
- 依存コンポーネント: 選択した列に依存するコンポーネントの一覧。 言い換えれば、これらのコンポーネントはこの列を必須コンポーネントとして持っています。
- 必須コンポーネント: この列が機能するために必要なコンポーネントの一覧。 つまり、これらのコンポーネントは、依存コンポーネントとしてこの列を持つことになります。