次の方法で共有


テーブルおよびデータ エンティティに対する行バージョン変更追跡

Finance and Operations アプリには、行バージョン変更の追跡 と呼ばれる変更追跡機能オプションがあります。 このオプションを使用すると、データの差分同期化に Microsoft Dataverse を使用できます。 変更追跡は、データ アーカイブ、Synapse Analytics 統合、モバイル オフライン、関連検索など、複数の機能に対する前提条件です。 最終目標は、Dataverse 同期サービスに基づいて、既存する財務と運用のデータ同期フレームワークすべてを一つに統合することです。

行バージョン変更追跡機能の場合、タイプの新しい列、行バージョン、変更追跡が必要なデータ エンティティ内のすべてのテーブルに追加する必要があります。 行バージョン 列タイプの詳細については、行バージョン をご参照ください。 テーブルに rowversion 列を追加する方法については、テーブルの行バージョン変更追跡を有効化する を参照してください。

rowversion 列 は、テーブル行のバージョン スタンプを実行します。 SQL Server では、挿入操作または更新操作のごとに増分するデータベース レベルのカウンターが管理されます。 テーブル行への変更を検出するには、rowversion 列の現在の値を前の値と比較します。

機能に対して行バージョンの変更追跡を有効化する

Dynamics 365 Finance バージョン 10.0.34 以降では、ライセンス構成 ページで Sql 行バージョン変更追跡 の構成キーを有効にする必要があります (ライセンス構成のページ: (システム管理>設定>ライセンス>ライセンス構成))。 構成キーは、メンテナンス モードでのみ編集できます。 メンテナンス モードの詳細については メンテナンス モード を参照してください。 Sql 行バージョン変更追跡 の構成キーを有効にした後にメンテナンス モードを終了すると、データベースの同期によって、行バージョン変更追跡が有効になっているテーブル rowversion 列が追加されます。

注記

SQL Server では rowversion 列は読み取り専用です。 したがって、X++ Statementオブジェクトを使用して実行される直接SQLデータ操作言語 (DML) ステートメント (たとえば、次の例)は、この列を挿入または更新しようとすると壊れます。

INSERT INTO table2
SELECT * FROM table1

したがって、運用環境で構成キーを有効にする前に、サンドボックス環境で構成キーを有効にして検証してください。 万が一、直接SQL DMLステートメントが列を挿入または更新しようとした場合は、 SQL行バージョン変更追跡 問題が解決されるまで設定キーを削除しないでください。

この問題を解決するには、次の例のように、X++ コード内の直接SQL DMLステートメントを変更し、ソース テーブルと宛先テーブルの列リストを明示的に指定する必要があります。

INSERT INTO table2 (Column1, Column2)
SELECT ColumnA, ColumnB FROM table1

テーブルに対して行バージョンの変更追跡を有効化する

テーブルの行バージョン変更追跡を有効にするには、テーブルの 行のバージョン変更追跡を許可するプロパティを はい に設定します。 そしてテーブルには、SysRowVersion という名前の rowversion 型の新しいシステム フィールドが作成されます。

注記

バージョン 10.0.34 より前では、行バージョン変更追跡機能がプレビュー段階にありましたが、行バージョン列の名前は SysRowVersionNumber でした。 バージョン 10.0.34 では、SysRowVersionNumber 列が新しい SysRowVersion 列に置き換えられました。 SysRowVersionNumber 列は古い形式になります。 バージョン 10.0.39 では、これはすぐに使用できるテーブルのメタデータから削除されます。 SysRowVersionNumber 列には依存関係を作成しないでください。 コードが古い SysRowVersionNumber 列に依存している場合、実稼働インスタンスを 10.0.39 にアップグレードする前に、その依存関係を削除してテスト 10.0.39 を行う必要があります。

データ エンティティに対して行バージョンの変更追跡を有効化する

データ エンティティの行バージョン変更追跡を有効にするには、データ エンティティの 行のバージョン変更追跡を許可するプロパティを はい に設定します。 すべての既存のデータ エンティティが行バージョン変更追跡をサポートするように構成されているわけではありません。 主な制限要素は、データ エンティティの複雑さです。 データ エンティティで 行バージョン変更追跡を許可 プロパティが はい に設定されている場合、検証ルールがビルド時に評価されます。

次の表では、データ エンティティ検証ルールについて説明します。

ルール コメント バージョンに適用する エラー メッセージ
カスタム変更追跡クエリを持つデータ エンティティはサポートされていません。 財務と運用のエンティティ「{0}」がカスタム クエリを使用しているため、変更追跡を有効にできません。
範囲フィルターを使用するデータ エンティティはサポートされていません。 データ エンティティの範囲のスクリーン ショット。 <10.0.39 財務と運用のエンティティ「{0}」に Ranges が含まれているため、変更追跡を有効にできません。
不変でないフィールドに範囲フィルターを持つデータ エンティティはサポートされていません。

不変でないフィールドの範囲フィルターは、ビューからレコードをフィルターすることができます。 この場合、変更は削除として追跡されません。

データ エンティティの範囲のスクリーン ショット。
>=10.0.39 財務と運用エンティティ '{0}' が不変でないフィールド '{2}' の範囲 '{1}' を含んでいるため、変更追跡を有効にできません。
データ ソースに条件別のグループが設定されているデータ エンティティはサポートされていません。 データ エンティティ Group By のスクリーン ショット。 財務と運用のエンティティ「{0}」に Group By 条件が含まれているため、変更追跡を有効にできません。
データ ソースに範囲フィルターが設定されているデータ エンティティはサポートされていません。 データ ソース範囲のスクリーン ショット。 <10.0.39 財務と運用エンティティ {1} のデータ ソース に {0} が含まれているため、変更追跡を有効にできません。
データ ソースが不変でないフィールドに範囲フィルターを持つデータ エンティティはサポートされていません。

不変でないフィールドの範囲フィルターは、ビューからレコードをフィルターすることができます。 この場合、変更は削除として追跡されません。

データ ソース範囲のスクリーン ショット。
>=10.0.39 財務と運用エンティティ '{1}' のデータソース '{0}' に不変でないフィールド '{2}' の範囲が含まれているため、変更追跡を有効にできません。
テーブル以外のデータ ソースを持つデータ エンティティはサポートされていません。 データ ソースとしてビューを含む入れ子になったデータ エンティティまたはデータ エンティティはサポートされていません。 財務と運用のエンティティ「{1}」のデータ ソース「{0}」がテーブルではないため、変更追跡を有効にできません。
データ エンティティのすべてのテーブルは、行バージョン変更追跡を許可する必要があります。 行バージョンの変更追跡を許可するのスクリーン ショット。 財務と運用のエンティティ「{1}」のテーブル「{0}」で、行バージョン変更追跡の許可プロパティが はい に設定されていないため、変更追跡を有効にできません。
データ エンティティ内のデータ ソースが外部結合を使用して結合される場合、関連するデータ ソースからの結合列は不変でなければなりません。

このルールにより、関連するデータ ソースからのフィールド値に対する変更 (結合プログラムを使用した場合) に、データ エンティティ ビューの変更が追跡されます。

データ ソース結合モードのスクリーン ショット。
関連テーブル {0} の結合列は不変ではないため、変更追跡を有効にできません。
データ エンティティのデータ ソース間の結合はサポートされていません。 <10.0.39 財務と運用のエンティティ「{1}」のデータ ソース「{0}」で定義された結合モードが外部結合ではないため、変更追跡を有効にできません。
データ エンティティ内のデータ ソースが内部結合を使用して結合される場合:
  • 結合列は、不結合である必要があります。
  • データ ソース関係の削除プロパティは、[Cascade]、または [Restricted]、または [CascadeRested] に設定する必要があります。
結合型結合は、結合データ ソースの関係でサポートされていません。

このルールに違反した結合を結合すると、ビュー内でレコードがフィルター処理される場合があります。 この場合、変更は削除として追跡されません。

データソース内部結合モードのスクリーンショット。
>=10.0.39
  • テーブル '{1}' からの結合列 '{0}' は不変ではないので、変更追跡を有効にすることはできません。
  • 変更追跡を有効化できません。内部結合関係 '{0}' に有効な OnDelete プロパティが存在しないか、埋め込みテーブル '{1}' またはその親テーブルに有効な DeleteAction が見つかりません。
  • SourceRelations は JoinDataSourceRelations ではサポートされていません。 埋め込みデータソース {0} の代わりに JoinRelationName(s) を使用します。
データ エンティティ内のデータ ソース間の Exists および NoExists 結合はサポートされていません。

Exists と NoExists の結合は、ビューからレコードをフィルターすることができます。 この場合、変更は削除として追跡されません。

Data Sources Exists Join Mode のスクリーンショット。
財務と運用エンティティ「{2}」のデータ ソース「{1}」で定義された結合モード「{0}」がサポートされていないため、変更追跡を有効にできません。
データ ソース間の関係は、多対 1 である必要があります。 1 対多の関係はサポートされていません。 1 対多の関係により、重複する仮想テーブル entityid 値が生成されます。 財務と運用エンティティ「{1}」で定義されたデータ ソース間の関係「{0}」が一対多であるため、変更追跡を有効にすることはできません。
データ ソース間の関係における固定制約および関連する固定制約はサポートされていません。 データ ソース関係制約のスクリーン ショット。 <10.0.30 財務と運用エンティティ「{1}」のデータ ソース間の関係「{0}」が「Normal」に設定されていないため、変更追跡を有効にできません。
データ ソース間のリレーションシップの非可変フィールドに対する固定制約、および関連する固定制約はサポートされていません。 データ ソース関係制約のスクリーン ショット。 >=10.0.39 財務と運用エンティティ「{1}」のデータ ソース間の関係「{0}」が「Normal」に設定されていないため、変更追跡を有効にできません。
時間の状態に対応するテーブルを持つデータ エンティティを検証します。 適用日 フィルターがサポートされていないルート テーブルは、レコードが消失する可能性があるためにサポートされていません。 時間状態テーブルは、レコードの消失や一対多の関係の原因になる可能性があるため、関連するデータ ソースに対してサポートされていません。 財務と運用のデータ エンティティ「{1}'」のデータ ソース テーブル「{0}」が時間状態を有効にしているため、変更追跡を有効にできません。
財務と運用のエンティティ「{1}」のルート データ ソース「{0}」に有効日フィルターが含まれているため、変更追跡を有効にできません。
データ・エンティティ内の最大データ ソース数。 推奨はカウントを 10 以下にすることです。 この制限は、パフォーマンスの向上に役立ちます。

独立系ソフトウェア ベンダー (ISV) やパートナーは、行のバージョン変更追跡を有効にする場合、常に新しいデータ エンティティを作成することをお勧めします。 このアプローチは、既存のカスタム拡張機能が検証ルールに違反するリスクを軽減するのに役立ちます。 カスタム拡張機能からの検証ルールの失敗は、下位互換性の破壊を防ぐために、エラーではなくビルド警告として表示されます。

データ エンティティで 行のバージョン変更追跡を許可する プロパティを はい に設定すると、基礎となるデータ ソースからの SysRowVersion 列がデータ エンティティ ビューに追加されます。

削除とクリーンアップの追跡

データ エンティティの行の削除は、AifChangeTrackingDeletedObject テーブルを使用して追跡されます。

削除追跡履歴のクリーンアップ という名前のシステム バッチ ジョブは、保管期間を超過した AifChangeTrackingDeletedObject テーブル内のレコードをクリーンアップします。 レコードは、タイムアウト基準に到達するまでバッチで削除されます。 既定では、毎日午前 1:00 にジョブが実行されます。 ただし、システム管理 > バッチ ジョブでジョブの繰り返しとジョブの頻度を構成できます。 現在、保管期間は 10 日です。

エンティティの変更を取得する

この変更追跡機能は Dataverse 変更追跡と完全に互換性があります。 ただし、一部の違いがあります。 たとえば、Dataverse テーブルに対して使用される 90 日の値ではなく最後のトークンが既定値 10 日以内にある場合、財務およびオペレーション アプリに対する変更が返されます。 詳細については、変更追跡を使用した外部システムとのデータの同期 を参照してください。