この記事では、ライブ テーブルにユーザー設定フィールドを追加し、履歴テーブルと財務および運用データ エンティティとの適切な同期を確保することで、一般会計、販売注文、在庫仕訳帳などの既存の Microsoft アーカイブ シナリオを拡張する方法について説明します。
概要
このシナリオは、アーカイブ シナリオに既に含まれている標準の Microsoft テーブルにカスタム フィールドを追加する必要がある場合に使用します。 たとえば、ユーザー設定の状態フィールドを SalesTable に追加したり、ユーザー設定の参照フィールドを GeneralJournalAccountEntryに追加したりできます。
このシナリオには以下のコンポーネントが含まれます:
- ライブ テーブルのテーブル拡張機能
- 履歴テーブルのテーブル拡張機能
- 財務および運用データ エンティティのエンティティ拡張機能
- Dataverse 仮想エンティティの更新
コードを変更する必要はありません。 ジョブ コントラクト作成者クラスを変更する必要はありません。 フレームワークは、アーカイブ操作にユーザー設定フィールドを自動的に含めます。
前提条件
- Dynamics 365 財務および運用開発ツールを使用した Visual Studio へのアクセス
- アーカイブ フレームワークがデプロイされた開発環境
- X++ 拡張機能パターンの理解
- Dynamics 365 の財務および運用におけるシステム管理者の役割
ユーザー設定フィールドをライブ テーブルに追加する
テーブル拡張機能を使用して、ソース テーブルにユーザー設定フィールドを追加します。
テーブル拡張機能を作成する
テーブル拡張機能を作成するには、次の手順に従います。
- Visual Studio で、プロジェクトを右クリックします。 [ 追加>新しいアイテム] を選択します。
- Dynamics 365 items>Data model>Table 拡張機能を選択します。
- 次のパターンを使用して拡張機能に名前を付けます。
[TableName]_[YourCompany]_Extension- 例:
SalesTable_Contoso_Extension - 例:
GeneralJournalAccountEntry_Fabrikam_Extension
- 例:
ユーザー設定フィールドを追加する
ユーザー設定フィールドを追加するには、次の手順に従います。
- テーブル拡張機能を右クリックし、[新規>Field] を選択します。
- 適切なフィールドの種類を選択します。 たとえば、String、Integer、Date、Enum などです。
- フィールドのプロパティを構成します。
- [ ラベル ] フィールドにわかりやすい名前を入力します。
- [ヘルプ テキスト] フィールドで、ユーザー設定フィールドの目的について説明します。
- 拡張データ型または基本型を構成します。
- アクセス修飾子をパブリックに設定し、アーカイブフレームワークでフィールドにアクセスできるようにします。
- 必要に応じて、 Mandatory プロパティを 設定します。
フィールドの例:
-
CustomStatus(列挙型) - カスタム状態の追跡。 -
CustomDate(日付) - 別の日付フィールド。 -
CustomReference(文字列) - 外部システム参照。 -
CustomAmount(実数) - 別の計算金額。
テーブル プロパティを構成する
Important
ソース (ライブ) テーブルで、プロパティ ChangeTrackingEnabled を Yes に設定します。 このプロパティは、データ変更を追跡するためのアーカイブ操作に必要です。
Microsoft マネージド テーブルでこのプロパティがまだ有効になっていない場合は、所有チームで確認するか、既に構成されているかどうかを確認する必要があります。
ビルドと同期
# Build your model
# Synchronize database to create the field in SQL Server
詳細については、「 拡張機能を使用してテーブルにフィールドを追加する」を参照してください。
履歴テーブルにユーザー設定フィールドを追加する
アーカイブされたデータにフィールドが含まれるように、対応する履歴テーブルのユーザー設定フィールドをミラー化します。
履歴テーブル拡張機能を作成する
履歴テーブル拡張機能を作成するには、次の手順に従います。
- Visual Studio で、新しい項目を追加し、[ テーブル拡張機能] を選択します。
- 名前を入力します:
[TableName]History_[YourCompany]_Extension。- 例:
SalesTableHistory_Contoso_Extension。 - 例:
GeneralJournalAccountEntryHistory_Fabrikam_Extension。
- 例:
一致するフィールドを追加する
一致するフィールドを追加するには、次の手順に従います。
- 同じプロパティを持つまったく同じフィールドを追加します。
- [フィールド名]、[型]、および [メタデータ] フィールドがライブ テーブルフィールドと一致していることを確認します。
- 履歴テーブル拡張機能にインデックスを追加しないでください。
- 一意の制約を追加しないでください。
Important
フィールドの一致は重要です。フィールド名、データ型、拡張データ型、および長さは、ライブ テーブルと履歴テーブルの間で同じである必要があります。 一致しない場合、アーカイブ ジョブはスキーマ検証エラーで失敗します。
ビルドと同期
# Build your model
# Synchronize database
アーカイブ操作中、フレームワークは同じフィールド マッピングを使用してライブ テーブルから履歴テーブルにデータをコピーします。 フィールドが一致しない場合、データ コピー操作は失敗します。
財務および運用データ エンティティにカスタム フィールドを追加する
Dynamics 365 の財務および運用データ エンティティにユーザー設定フィールドが含まれていることを確認して、Dataverse 仮想エンティティと長期的なリテンション期間に使用できるようにします。
エンティティ拡張機能を作成する
エンティティ拡張機能を作成するには、次の手順に従います。
- Visual Studio で、新しい項目を追加し、[ データ エンティティ拡張機能] を選択します。
-
[EntityName]_[YourCompany]_Extensionの形式で名前を入力します。- 例:
SalesTableBiEntity_Contoso_Extension。 - 例:
GeneraljournalaccountentryBiEntity_Fabrikam_Extension。
- 例:
データ ソース フィールドの追加
データ ソース フィールドを追加するには、次の手順に従います。
- エンティティ拡張機能デザイナーで、[ データ ソース] を展開します。
- ライブ テーブルに一致するデータ ソース テーブルを見つけます。
- データ ソースを右クリックし、新規>Field を選択します。
- ソース テーブルからユーザー設定フィールドにフィールドをマップします。
- ユーザー設定フィールド名と一致するようにデータ フィールドを設定します。
- 計算フィールドを使用している場合は、 データ メソッド を設定します。
- フィールドの可視性を構成します。
- フィールドがエンティティに表示されるようにするには、表示を = はいに設定します。
Note
Microsoft管理エンティティは、Allow Retention、Auto Create、Auto Refreshなどの必要なアーカイブプロパティがすでに設定されています。 エンティティ拡張にカスタムフィールドを追加するだけで十分です。 フレームワークはアーカイブ操作にフィールドを自動的に含みます。
ビルドとテスト
# Build your model
# Test entity in Data Management workspace
Dataverse で仮想エンティティを更新する
Dataverse 仮想エンティティメタデータを更新して、ユーザー設定フィールドを含めます。
自動リフレッシュ(推奨)
基本エンティティに Auto Create = Yes と Auto Refresh = Yes が設定されている場合:
- 仮想エンティティ メタデータは自動的に同期されます。
- 変更が反映されるまでに 24 ~ 48 時間かかる場合があります。
- 特に何か操作をする必要はありません。
手動更新
自動同期が発生しない場合、または即時更新が必要な場合は、次のいずれかの方法を使用します。
高度な検索を使用して手動で更新するには、次の手順に従います。
- Dataverse 環境で [高度な検索 ] に移動します。
- [利用可能な財務] エンティティと [操作] エンティティを選択します。
- エンティティ名 (たとえば、) を含むように
generaljournalaccountentrybientityフィールドをフィルタリングします。 - 結果からレコードを開きます。
- [最新の情報に更新] を選択します。
- レコードを保存します。
- 更新が完了するまで待ちます。
Power Apps Maker ポータルを使用して更新するには、次の手順に従います。
- Power Apps Maker ポータルに移動します。
- 環境を選択します。
- [テーブル] に移動し、[利用可能な財務] エンティティと [運用] エンティティでフィルター処理します。
- あなたのエンティティを検索します(たとえば、
mserp_salestablebiEntity)。 - エンティティを開き、更新をトリガーします。
更新が機能しない場合は、「 仮想エンティティの更新のトラブルシューティング」のガイダンスに従ってください。
エンティティにフィールドが表示されていることを確認する
エンティティにフィールドが表示されていることを確認するには、次の手順に従います。
- Power Apps で、仮想エンティティを開きます。
- [ 列 ] タブに移動します。
- ユーザー設定フィールドを検索します。
- フィールドの種類が Dynamics 365 の財務および運用フィールドと一致するかどうかを確認します。
アーカイブと復元をテストする
アーカイブ ジョブに、アーカイブ ライフサイクル全体にわたってユーザー設定フィールド データが含まれているかどうかを確認します。 テスト アーカイブ ジョブを作成します。
テスト アーカイブ ジョブを作成するには、次の手順に従います。
- Dynamics 365 の財務および運用アーカイブ ワークスペースに移動します。
- 関連するアーカイブの種類を選択します。 たとえば、 販売注文アーカイブ や 一般会計アーカイブなどです。
- ユーザー設定フィールドを含むレコードを含む条件を含むテスト アーカイブ ジョブを作成します。
- テスト データにユーザー設定フィールドの値があることを確認します。
- アーカイブ ジョブを実行します。
データ移動を確認する
履歴テーブルを確認します。
-- Verify custom field moved to history
SELECT CustomField, * FROM SalesTableHistory WHERE RecId = [TestRecId]
SELECT CustomField, * FROM GeneralJournalAccountEntryHistory WHERE RecId = [TestRecId]
復元操作をテストするには、次の手順に従います。
- アーカイブされたデータの取り消し (復元) ジョブを作成します。
- 復元操作を実行します。
- ユーザー設定フィールド のデータがライブ テーブルに戻っていることを確認します。
- フィールド値が元のデータと一致することを検証します。
-- Compare before and after restore
SELECT CustomField, * FROM SalesTable WHERE RecId = [TestRecId]
検証とトラブルシューティング
フィールドの同期を検証します。
- ライブ テーブルにはユーザー設定フィールドがあります。
- 履歴テーブルには、同じプロパティを持つ一致するフィールドがあります。
- Finance and Operations データ エンティティ拡張機能には、フィールドが含まれています。
- Dataverse の仮想エンティティにフィールドが表示されます。