管理ソリューションのマージ方法について
管理ソリューションのインストールの準備をするときは、環境に複数のソリューションが既にインストールされている可能性や、将来、別のソリューションがインストールされる可能性があることを考慮します。 ソリューションをベスト プラクティスに従って構築して、他のソリューションと競合しないようにします。
Microsoft Dataverse のカスタマイズをマージするプロセスは、ソリューションの機能を保持することに重点が置かれています。 プレゼンテーションを保持するためにあらゆる処理が行われても、カスタマイズ間に非互換性があると、カスタマイズの機能を保持することが優先されて、プレゼンテーションの細部が変更されることがあります。
フォームのカスタマイズのマージ
マージが必要なフォームのカスタマイズは、すでに環境内にあるエンティティ フォームに対して実行されるカスタマイズのみです。 つまり、通常は、Dataverse のインストール時に作成されたエンティティ用に含まれているフォームをソリューションでカスタマイズする場合にのみ、フォームのカスタマイズをマージする必要があります。 フォームのマージを回避する方法の 1 つとして、どの Dataverse エンティティにも新しいフォームを提供します。 カスタム エンティティ用のフォームをマージする必要があるのは、カスタム エンティティとそのフォームを作成した既存の管理ソリューションを更新または変更するソリューションを作成する場合に限られます。
ソリューションをマネージド ソリューションとしてパッケージすると、FormXML に格納されているフォーム定義と元の FormXML とが比較され、相違点のみがそのマネージド ソリューションに取り込まれます。 その管理ソリューションを新しい環境にインストールすると、フォーム カスタマイズの相違点が既存のフォームの FormXML とマージされて、新しいフォーム定義が作成されます。 ユーザーに表示されるフォーム定義は、この新しい方のフォーム定義で、システム カスタマイザーが変更できるのも、この新しいフォーム定義です。 このマネージド ソリューションをアンインストールすると、その中に取り込まれていた相違するフォーム要素のみが削除されます。
フォームのマージはセクションごとに行われます。 既存のタブまたはセクションに新しい要素を追加すると、管理要素が更新されたときを含め、変更が要素に影響を及ぼしたり、管理レイヤーから要素を隠したりすることがあります。 この現象は、管理レイヤーが、カスタマイズで導入するアンマネージド レイヤーの下にあるために発生します。 フォーム上の管理要素に影響を与えたり隠したりしたくない場合は、セクションやタブなどの新しいコンテナー要素内に新しい要素を含めることをお勧めします。これにより、要素が分離され、要素が影響を受けたり管理レイヤーから隠されたりする可能性が減ります。 詳細ついては、ソリューションの階層 を参照してください
マネージド ソリューションに含まれるフォームで新しいセキュリティ ロールを使用していると、そのマネージド ソリューションは、それらのセキュリティ ロールに依存します。 そのようなセキュリティ ロールがある場合は、マネージド ソリューションと共に含める必要があります。
テーブル フォームを含むソリューションをインポートすると、カスタマイズを上書き オプションは、選択しても適用されません。 インポートされるフォームは、フォームの既存のソリューション レイヤーとマージされます。
Note
管理ソリューション エンティティに複数のフォームがあり、環境エンティティ フォームにも複数のフォームがある場合、新しいフォームは、使用可能なフォーム一覧の最後に追加されるのではなく、元のエンティティ フォームに挿入されます。
フォーム結合の競合を特定して解決する
フォームを含むソリューションをインポートした後、インポートされたフォームに 競合タブ という名前のタブが表示される場合があります。これは自動生成されたタブであり、特定のフォーム コンポーネントをマージできない場合に作成されます。 データの損失を防ぐには、マージできないフォーム コンポーネントは競合タブに配置されます。マージの競合は通常、ソースとターゲットのカスタマイズが同期していない場合に発生し、フォームのカスタマイズの競合につながります。
フォームのマージ競合を引き起こす可能性のある次の状況を回避します。
同じ順序の値を使用するフォーム タブなどのコンポーネントを追加する 2 つの異なるソリューションをインポートします。
ソース環境でセクションなどのフォームのコンポーネントをカスタマイズしますが、ターゲット環境のコンポーネントに対して同じまたは類似のカスタマイズを行います。 次に、カスタマイズをソース環境からエクスポートし、ターゲット環境にインポートします。
インポートしたフォームに競合タブが表示されたら、表示されているコンポーネントをフォームのどこかに移動できます。 すべてのコンポーネントが競合タブから移動されたら、競合タブを削除または非表示にできます。
ナビゲーション (サイト マップ) のカスタマイズのマージ
ソリューションをマネージド ソリューションとしてパッケージすると、そのサイト マップ XML は、元のサイトマップ XML とそのサイトマップに加えられた他のカスタマイズと比較されます。 マネージド ソリューションには相違点のみ取り込まれます。 これらの違いには、変更、移動、追加、または削除されたアイテムなどが含まれます。 管理ソリューションを新しい環境にインストールすると、SiteMap の変更は、管理ソリューションがインストールされている環境で見つかった SiteMap XML とマージされます。 ユーザーに表示されるのは、新しいサイトマップ定義です。
この時点で、カスタマイザーは、サイトマップをアンマネージド ソリューションにエクスポートでき、そのサイトマップの定義には、アクティブなサイトマップのすべての要素が取り込まれます。 カスタマイザーは、SiteMap を変更し、アンマネージド カスタマイズとして再インポートできます。 後で、このマネージド ソリューションをアンインストールすると、このマネージド ソリューションと共にインポートされたサイトマップ XML は、このマネージド ソリューションと共に追加された変更を削除するために参照されます。 新しいアクティブなサイトマップが計算されるのはその後です。
サイトマップに追加される新しい可視要素は、常に、その要素が属するコンテナーの最下部に表示されます。 たとえば、新しい領域がナビゲーション領域の最下部に表示されます。 追加された要素を適切な場所に配置するには、まず、サイトマップをエクスポートして、要素の正確な位置を設定するように編集する必要があります。その後、さらに、そのサイトマップをアンマネージド ソリューションとして再度インポートする必要があります。
Note
公開間に適用できるサイトマップのカスタマイズは 1 つのみです。 未公開のサイトマップのカスタマイズは、新しいサイトマップの定義がインポートされると失われます。
オプション セット オプションのマージ
新しい各オプション セット オプションは、接頭辞付きのオプション値を含む、割り当て済み整数値によって初期化されます。 オプション値の接頭辞は、オプション値の前に追加される 5 桁の数字です。 オプション値の接頭辞は、ソリューション発行者のカスタマイズによる接頭辞に基づいて生成されますが、任意の値に設定することもできます。 オプション値の接頭辞があることで、特定のソリューション発行者のコンテキストで作成された新しいオプション セット オプションを区別しやすく、オプション値が競合する可能性を容易に低減できます。 オプション値の接頭辞の使用は必須ではありませんが、使用することをお勧めします。
管理ソリューションは、通常、環境内の既存のオプション セット (取引先企業のカテゴリまたは業種オプション セットなど) のオプションを更新または追加します。 管理ソリューションでオプション セット内の使用可能なオプションを変更すると、その管理ソリューションに定義されているすべてのオプションが環境内で使用できるようになります。 その管理ソリューションをアンインストールすると、オプション セットのオプションは元の状態に戻ります。
セキュリティ ロール権限のマージ
セキュリティ ロールが管理ソリューションから環境にインポートされると、そのセキュリティ ロールに手動で追加されたすべての権限が削除されます。 ただし、権限レベルが変更された、セキュリティ ロールの変更された権限 (たとえば、基本スコープからグローバル スコープへ、またはその逆) はそのまま残ります。
チップ
同じカスタム ソリューションを使用して、セキュリティ ロールの更新を管理します。 新しいカスタム ソリューションを使用して、以前に別のソリューションで更新されたセキュリティ ロールを更新する場合、一部の権限更新は適用されません。
カスタム ソリューションを使用して 定義済みのセキュリティ ロール を変更しないでください。 これらの更新は、定義済みのロールがシステムによって更新されると削除されます。 定義済みのロールのコピーを作成し、コピーされたロールをカスタム ソリューションで管理します。