管理ソリューションのマージ方法について

管理ソリューションのインストールの準備をするときは、環境に複数のソリューションが既にインストールされている可能性や、将来、別のソリューションがインストールされる可能性があることを考慮します。 ソリューションをベスト プラクティスに従って構築して、他のソリューションと競合しないようにします。

Microsoft Dataverse のカスタマイズをマージするプロセスは、ソリューションの機能を保持することに重点が置かれています。 表示形式を維持するために最大限の努力が払われていますが、カスタマイズ間の非互換性により、自動的に算出された解決策によって、カスタマイズ機能の維持を優先して表示の一部が変更される場合があります。

フォームのカスタマイズを結合

マージが必要なフォームのカスタマイズは、すでに環境内にあるテーブル フォームに対して実行されるカスタマイズのみです。 つまり、通常は、Dataverse のインストール時に作成されたテーブル用に含まれているフォームをソリューションでカスタマイズする場合にのみ、フォームのカスタマイズをマージする必要があります。 フォームのマージを回避する方法の 1 つとして、どの Dataverse テーブルにも新しいフォームを提供します。 カスタム テーブル用のフォームをマージする必要があるのは、カスタム テーブルとそのフォームを作成した既存の管理ソリューションを更新または変更するソリューションを作成する場合に限られます。

ソリューションをマネージド ソリューションとしてパッケージすると、FormXML に格納されているフォーム定義と元の FormXML とが比較され、相違点のみがそのマネージド ソリューションに取り込まれます。 その管理ソリューションを新しい環境にインストールすると、フォーム カスタマイズの相違点が既存のフォームの FormXML とマージされて、新しいフォーム定義が作成されます。 ユーザーに表示されるフォーム定義は、この新しい方のフォーム定義で、システム カスタマイザーが変更できるのも、この新しいフォーム定義です。 マネージド ソリューションをアンインストールすると、そのマネージド ソリューションに含まれるフォーム要素のみが削除されます。

フォームのマージはセクションごとに行われます。 既存のタブまたはセクションに新しい要素を追加すると、管理要素が更新されたときを含め、変更が要素に影響を及ぼしたり、管理レイヤーから要素を隠したりすることがあります。 この現象は、管理レイヤーが、カスタマイズで導入するアンマネージド レイヤーの下にあるために発生します。 フォーム上の管理要素に影響を与えたり隠したりしたくない場合は、セクションやタブなどの新しいコンテナー要素内に新しい要素を含めることをお勧めします。これにより、要素が分離され、要素が影響を受けたり管理レイヤーから隠されたりする可能性が減ります。 詳細ついては、ソリューションの階層 を参照してください

マネージド ソリューションに含まれるフォームで新しいセキュリティ ロールを使用していると、そのマネージド ソリューションは、それらのセキュリティ ロールに依存します。 そのようなセキュリティ ロールがある場合は、マネージド ソリューションと共に含める必要があります。

テーブル フォームを含むソリューションをインポートすると、カスタマイズを上書き オプションは、選択しても適用されません。 インポートされるフォームは、フォームの既存のソリューション レイヤーとマージされます。

ヒント

管理ソリューション テーブルに複数のフォームが含まれ、環境テーブル フォームにも複数のフォームが含まれている場合、新しいフォームは、使用可能なフォームのリストの最下部に追加されるのではなく、元のテーブル フォームに挿入されます。

フォーム結合の競合を特定して解決する

フォームを含むソリューションをインポートした後、インポートされたフォームに競合タブという名前のタブが表示される場合があります。これは自動生成されたタブであり、特定のフォーム コンポーネントをマージできない場合に作成されます。 データの損失を防ぐには、マージできないフォーム コンポーネントは競合タブに配置されます。マージの競合は通常、ソースとターゲットのカスタマイズが同期していない場合に発生し、フォームのカスタマイズの競合につながります。

インポートしたフォームの[競合]タブ

フォームのマージ競合の原因となる可能性がある次のような状況は避けてください。

  • 同じ順序の値を使用するフォーム タブなどのコンポーネントを追加する 2 つの異なるソリューションをインポートします。
  • ソース環境でセクションなどのフォームのコンポーネントをカスタマイズしますが、ターゲット環境のコンポーネントに対して同じまたは類似のカスタマイズを行います。 次に、カスタマイズをソース環境からエクスポートし、ターゲット環境にインポートします。

インポートしたフォームに競合タブが表示されたら、表示されているコンポーネントをフォームのどこかに移動できます。 すべてのコンポーネントが競合タブから移動されたら、競合タブを削除または非表示にできます。

ナビゲーション(サイトマップ)のカスタマイズをマージする

ソリューションをマネージド ソリューションとしてパッケージすると、そのサイト マップ XML は、元のサイトマップ XML とそのサイトマップに加えられた他のカスタマイズと比較されます。 マネージド ソリューションには相違点のみ取り込まれます。 これらの違いには、変更、移動、追加、または削除されたアイテムなどが含まれます。 管理ソリューションを新しい環境にインストールすると、サイト マップの変更は、管理ソリューションがインストールされている環境で見つかったサイト マップの XML とマージされます。 人々が目にするのは、新しいサイトマップの定義です。

この時点で、カスタマイザーは、サイトマップをアンマネージド ソリューションにエクスポートでき、そのサイトマップの定義には、アクティブなサイトマップのすべての要素が取り込まれます。 その後、カスタマイザーはサイトマップを変更し、非管理カスタマイズとして再インポートできます。 後で、このマネージド ソリューションをアンインストールすると、このマネージド ソリューションと共にインポートされたサイトマップ XML は、このマネージド ソリューションと共に追加された変更を削除するために参照されます。 その後、新しいアクティブサイトマップが計算されます。

サイト マップに追加される新しい可視要素は、常に、その要素が属するコンテナーの最下部に表示されます。 たとえば、新しい領域を追加すると、ナビゲーション領域の最下部に表示されます。 追加された要素を適切な場所に配置するには、まず、サイトマップをエクスポートして、要素の正確な位置を設定するように編集する必要があります。その後、さらに、そのサイトマップをアンマネージド ソリューションとして再度インポートする必要があります。

ヒント

公開間に適用できるサイト マップのカスタマイズは 1 つのみです。 未公開のサイト マップのカスタマイズは、新しいサイト マップの定義がインポートされると失われます。

選択列をマージするオプション

新しい列の選択オプションは、接頭辞付きのオプション値を含む、割り当て済み整数値によって初期化されます。 オプション値の接頭辞は、オプション値の前に追加される 5 桁の数字です。 オプション値の接頭辞は、ソリューション発行者のカスタマイズによる接頭辞に基づいて生成されますが、任意の値に設定することもできます。 オプション値の接頭辞があることで、特定のソリューション発行者のコンテキストで作成された新しいオプション セット オプションを区別しやすく、オプション値が競合する可能性を容易に低減できます。 オプション値の接頭辞の使用は必須ではありませんが、使用することをお勧めします。

管理ソリューションは、通常、環境内の既存の選択列 (取引先企業のカテゴリまたは業種の選択列など) のオプションを更新または追加します。 管理ソリューションで選択列内の使用可能なオプションを変更すると、その管理ソリューションに定義されているすべてのオプションが環境内で使用できるようになります。 その管理ソリューションをアンインストールすると、選択列のオプションは元の状態に戻ります。

セキュリティ ロールの権限の更新

マネージド ソリューションをインポートするときにセキュリティ ロールの特権を更新する方法は、ロールが定義済みの (すぐに使用できる) セキュリティ ロールかカスタム セキュリティ ロールかによって異なります。

定義済みのセキュリティ ロールのマージ動作

定義済みのセキュリティ ロールをマネージド ソリューションから環境にインポートすると、インポート プロセスによって、手動で追加されたすべての特権がそのセキュリティ ロールから削除されます。 ただし、インポート プロセスでは、特権レベルを変更したセキュリティ ロールの変更された特権 (基本スコープからグローバル スコープへの変更、その逆など) が保持されます。

ヒント

カスタム ソリューションを使用して 定義済みのセキュリティ ロール を変更しないでください。 これらの更新は、定義済みのロールをシステムが更新すると削除されます。 定義済みのロールのコピーを作成し、コピーされたロールをカスタム ソリューションで管理します。

カスタム セキュリティ ロールの動作を置き換える

カスタム セキュリティ ロールの更新は、マージではなく、常に置換操作と見なされます。 この動作は設計によるものです。

マネージド ソリューションから環境にカスタム セキュリティ ロールをインポートすると、インポート プロセスによって、既存のロールの特権が、インポートされたソリューションによって定義された特権に置き換えられます。 インポート プロセスでは、そのソリューションの外部で以前に追加または変更した特権は保持されません。

ヒント

同じカスタム ソリューションを使用して、カスタム セキュリティ ロールの更新を管理します。 新しいカスタム ソリューションを使用して、以前に別のソリューションで更新されたカスタム セキュリティ ロールを更新する場合、特権の更新の一部は適用されません。

参照

カスタマイズするためのソリューションを使用する