データエンティティのSQL変更追跡を有効にする

この記事では、データ管理ワークスペースから設定するSQL Serverの変更追跡メカニズムについて説明します。 SQLの変更追跡を使えば、財務やオペレーションアプリからデータを段階的にエクスポートできます。 増分エクスポートでは、変更されたレコードのみをエクスポートします。 エンティティでSQLの変更追跡を有効にしていなければ、毎回完全なエクスポートしか有効にできません。

データ管理では、独自データベース (BYOD) エクスポートと非 BYOD エクスポートの両方で、SQL の変更追跡を有効にすることができます。

別行バージョンのメカニズムについては、 テーブルおよびデータエンティティの行バージョン変更追跡を参照してください。 各メカニズムに適用されるテーブル除外については、「 変更トラッキングのテーブル適格性」を参照してください。

Note

データ管理のエクスポートでは、レコード削除はBYODのみ、かつエンティティ内のルートデータソースのみで追跡されます。 非 BYOD のエクスポートには、追跡レコードの削除は含まれません。 行バージョン削除の追跡については、「 トラック削除とクリーンアップ」をご覧ください。

SQL変更追跡の要件

SQL変更追跡を有効にする前に、 SQLテーブルの適格性制限とエクスポートパフォーマンスガイダンスを確認してください。

財務および運用データベースでもSQL Server変更追跡を有効にする必要があります。 財務および運用サービスがこの構成を管理します。 アプリケーションデータベースに対してSQL文を実行する代わりに、以下のアプリケーション手順を使用してください。

BYOD の変更追跡を有効する

データ ストア (BYOD) に 1 つまたは複数のエンティティを発行するとき、変更追跡を有効にすることができます。

  1. データ管理ワークスペースで、データベースへのエンティティのエクスポートのコンフィギュレーションを選択します。

  2. データのエクスポート先のデータベースを選択し、発行 を選択します。

    1 つまたは複数のエンティティをデータベースに公開することができます。 [ 発行済みのみを表示 ] を選択すると、以前に発行したエンティティの一覧が表示されます。

  3. 発行したエンティティを選択し、[ 変更の追跡] を選択します。

  4. 環境内の変更追跡の適切なオプションを選択します。

    エンティティは複数のテーブルを使用できます。 これらのオプションでは、エンティティの変更を追跡できる粒度を指定します。

    Option 変更の追跡方法
    プライマリ テーブルの有効化 プライマリ テーブル内のすべてのフィールドを変更すると、エンティティの変更がトリガーされます。 セカンダリ テーブルのフィールドを変更しても、エンティティの変更はトリガーされません。
    エンティティ全体の有効化 エンティティ内の追跡可能なテーブルのフィールドに変更を加えると、エンティティに変更が発生します。 テーブルの適格性の制限は引き続き適用されます。
    カスタム クエリの有効化 変更を追跡する必要があるテーブルを識別するカスタム クエリを使用します。 カスタム クエリはエンティティで定義されます。

    Note

    変更によって変更の追跡がトリガーされた場合、変更はフィールド レベルではなくレコード全体で追跡されます。 エンティティ レコード全体がエクスポート先にエクスポートされます。 選択したオプションに関係なく、エンティティのフィールドの数はターゲットにエクスポートされた数になります。

非 BYOD シナリオでの変更追跡の有効化

Data Managementで、非BYOD宛先へのインクリメンタルエクスポートのためにSQLの変更追跡を有効にすることができます。

Note

Dataverse仮想テーブルの行バージョン変更追跡設定については、「 Dataverseの財務および運用仮想テーブルの変更追跡」をご覧ください。

非 BYOD シナリオで変更追跡を有効化する方法 :

  1. データ管理ワークスペースから、データ エンティティ リスト ページを選択します。
  2. 変更追跡を有効にするエンティティを選択します。
  3. アクションリボンの 「変更追跡 アクション」を選択し、エンティティの変更の追跡方法のオプションを選択します。 利用可能なオプションの詳細については、「 BYODの変更追跡を有効にする 」セクションの表をご覧ください。

変更追跡用のカスタム クエリ

次の例は、エンティティに静的メソッドを追加する方法を示しています。 メソッドがクエリを返し、ルートノードがエンティティと同じであることを確認しましょう。 例えば、カスタマーエンティティの場合、ルートノードは CustTableされており、変更追跡クエリもルートとして CustTable を使用します。

  • クエリの一部であるテーブルで変更の追跡を有効にします。
  • エンティティと変更追跡クエリ (ルート テーブル) の間に結合を作成して、エンティティ内で変更されたレコードを特定します。
public static Query defaultCTQuery()
{
 Query q = new Query();    
    
 QueryBuildDataSource custDs = q.addDataSource(tableNum(CustTable));

 QueryBuildDataSource partyDs = custDs.addDataSource(tableNum(DirPartyTable));
 partyDs.relations(true);

 QueryBuildDataSource locationDs = partyDs.addDataSource(tableNum(DirPartyLocation));
 locationDs.addRange(fieldNum(DirPartyLocation, IsPrimary)).value(queryValue(NoYes::Yes));        
 locationDs.addLink(fieldNum(DirPartyTable, RecId), fieldNum(DirPartyLocation, Party));

 QueryBuildDataSource addressDs = locationDs.addDataSource(tableStr(LogisticsPostalAddress));        
 addressDs.addLink(fieldNum(DirPartyLocation, Location), fieldNum(LogisticsPostalAddress, Location));

 return q;
}