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