データ エクスポート サービス

注意

2021 年 11 月より、データ エクスポート サービスは廃止されました。 データ エクスポート サービスは引き続き機能し、2022 年 11 月にサポート終了と販売終了となるまで完全にサポートされます。 詳細: https://aka.ms/DESDeprecationBlog

データ エクスポートは Microsoft Dataverse ソリューションとして提供されるアドオン サービスで、顧客が所有する Microsoft Azure サブスクリプションの Microsoft Azure SQL データベース ストアに Dataverse データを複製する機能を追加します。 対応している対象は、 Microsoft Azure SQL Database および Microsoft Azure 仮想マシン上の Microsoft Azure SQL Serverです。 データ エクスポートは Dataverse スキーマとデータ全体をインテリジェントに同期処理し、その後、 Dataverse で変更 (差分変更) が発生すると、継続的に同期処理します。

データ エクスポート サービスでは、構成管理と Dataverse 内からのサービスの継続的な管理のインターフェイスを提供します。 詳細については、 Azure SQL Database にデータを複製する を参照してください。 このトピックでは、対応しているプログラム インターフェイスとこのサービスの問題を説明します。

データ エクスポート サービスを使用するための前提条件

このサービスでは、Dataverse から外部 Microsoft Azure SQL データベースへのアクセスが必要となるため、このサービスに正常にアクセスするには、いくつかの前提条件を満たす必要があります。 次の前提条件は、データ エクスポート サービスを使用するための前提条件 のセクションで管理者の観点からより完全に説明されます。

Dataverse 環境は、次のように構成する必要があります:

  • エクスポートされるテーブルは、変更の追跡で有効になります。 詳細については、変更の追跡を使用してデータを外部システムに同期 を参照してください。

  • コードは、システム管理者セキュリティ ロールを持つユーザーのコンテキストで実行されます。

注意

このサービスにアクセスするプログラムでは、関連するデータ エクスポート管理ソリューションをインストールする必要は ありません

ターゲットの Azure SQL データベースは、次のように構成する必要があります:

  • サブスクリプションは、Dataverse インスタンスからレプリケーションされたデータ量をサポートする必要があります。

  • ファイアウォール設定は、データ エクスポート サービスの IP アドレスからアクセスを許可する必要があります。 詳細については、Azure ポータルを使用する Azure SQL データベース サーバー レベルのファイアウォール ルールの構成 を参照してください。

  • [azure services へのアクセスの許可] オプションを有効にすることをお勧めします。

  • データ エクスポート接続文字列で指定されたデータベース ユーザーは、ターゲット データベースで適切な作成、および変更アクセス許可を持っている必要があります。 少なくともこれらには次のものが含まれます: CRTBCRTYCRVWCRPRALUS、'VWDS'。 詳細については、アクセス許可 (データベース エンジン) を参照してください。

  • 少なくとも1人のユーザーは、スキーマで全面的なアクセス許可があります。 次のスクリプトでは、新しいユーザーが作成されます。

  
USE MASTER;  
CREATE LOGIN NewUser WITH PASSWORD='newpassword';  
  
USE DESTINATIONDATABASE;  
CREATE USER NewUser FOR LOGIN NewUser  
GRANT CREATE TABLE, CREATE TYPE, CREATE VIEW, CREATE PROCEDURE, ALTER ANY USER to NewUser  
GRANT ALTER, REFERENCES, INSERT, DELETE, UPDATE, SELECT, EXECUTE ON SCHEMA::dbo TO NewUser  
  

オンライン ソリューションとサービスの場合、Azure は、Key Vault サービスを使用して、暗号鍵、パスワード、およびその他の秘密を保護します。 Azure Key Vault を使用するには、アクセス許可が「Dynamics 365 データ エクスポート サービス」に与えられ、SQL Azure 接続文字列を安全に保存するために使用されるように、この顧客所有のサービスを設定する必要があります。 PowerShell スクリプトでこの構成を行うには、Azure Key Vault の設定方法 を参照してください。 また、このサービスは REST API を使用して管理できます。Key Vault 管理 を参照してください。

ブラウザーの信頼済みサイトにドメイン https://discovery.crmreplication.azure.net/ を追加し、このサイトでポップアップを有効にすることもお勧めします。

データ エクスポート サービスのためのプログラミング

データ エクスポート サービスは、2 つのグループに分けられた REST ベース API を公開します: Dataverse の組織構造、関係、および接続情報を調べるための一連の Metadata 操作、そして各データ レプリケーションを構成し管理するための一連の Profiles 操作です。 この API は、次の Swagger URL で完全に定義および文書化されています。

Swagger エンドポイント 説明
https://discovery.crmreplication.azure.net/swagger/docs/2016-01-01 開発者ツールとを動的プロセスで使用するためのデータ エクスポート サービス API の JSON の定義
https://discovery.crmreplication.azure.net/swagger/ui/index# 開発者リファレンスのためのこの API のユーザー フレンドリ バージョン

API クイック リファレンス

読者の便宜のために、これらのインターフェイスは、次の表でまとめられています。

メタデータ操作 (https://discovery.crmreplication.azure.net/crm/exporter/metadata/)

リソース メソッド 説明
組織 GET 現在のユーザーが所属するすべての組織の組織情報を取得
検出 GET 指定した組織の組織情報を取得します。
コネクタ GET 指定した組織のコネクタ情報を取得します。
entities GET 指定した組織のエクスポート可能なすべての公開テーブルを取得します。
関連付け GET 指定した組織のエクスポート可能なすべての関連付けを取得します。
hasorgacceptedprivacyterms GET 関連組織がプライバシー条件を受け入れたかどうかを確認します。
acceptprivacyterms POST データ アクセスに指定した組織を受け入れます。

プロファイリング操作 ([ConnectorURL]/crm/exporter/)

リソース メソッド 内容
プロファイル GETPOST 指定した組織のすべてのプロファイルを取得し、新しいエクスポート プロファイルを作成します。
profiles/{id} GETPUTDELETE 特定のプロファイルを取得、更新、または削除します。
profiles/{id}/activate POST 関連したテーブル定義とデータの両方のレプリケーションを開始するプロファイルをアクティブ化します。
profiles/{id}/activatemetadata POST テーブル定義レプリケーションのみのプロファイルをアクティブ化します。
profiles/{id}/activatedata POST データ レプリケーションのみのプロファイルをアクティブ化します。
profiles/{id}/deactivate POST プロファイルを非アクティブ化します。
profiles/{id}/test GET 既存のプロファイル上でのテスト操作を実行します。
プロファイル/検証 POST プロファイル説明を作成する前にテスト操作を実行します。
profiles/{id}/failures GET 特定のプロファイルの失敗の詳細情報を含む BLOB に接続文字列を取得します。

アクセスの取得

Dataverse システム管理者のみがデータエクスポート操作の実行を許可されるため、これらの APIは Microsoft Entra ID セキュリティトークン を使用して強制的に呼び出し元の承認をします。 次のコード スニペットは、Web アプリケーションのトークンを生成する方法を示しています。 resourceAppId 値をサービスに適した値に置き換えます。 このアプローチは、開発、およびテストに使用できます。しかし、より安全な手段、Azure Key Vault の使用などを運用のために使用します。

using Microsoft.Identity.Client;

string resource = "https://contoso.api.crm.dynamics.com"; // Target environment
var AppId = "51f81489-12ee-4a9e-aaae-a2591f45987d";
var redirectUri = "http://localhost"; // Loopback for the interactive login.

// MSAL authentication
var authBuilder = PublicClientApplicationBuilder.Create(AppId)
    .WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
    .WithRedirectUri(redirectUri)
    .Build();
var scope = resource + "/user_impersonation";
string[] scopes = { scope };

// Use interactive username and password prompt
AuthenticationResult token =
    authBuilder.AcquireTokenInteractive(scopes).ExecuteAsync().Result;
string accessToken = token.AccessToken;

AppId の取得方法については、OAuth 2.0 および Microsoft Entra ID を使用してウェブアプリケーションへのアクセスを承認する を参照してください。 Azureのユーザーセキュリティに関する詳細については、Microsoft Entra ID の承認シナリオ を参照してください。

エラー処理および失敗の処理

プロファイルが正しく構成されると、通常、同期プロセスの信頼性が高くなります。 ただし、レコードの同期に失敗すると、次のエラー処理が適用されます。

  1. 再試行間隔が構成された後、レコードを同期させる別の試みが実行されます。 これは構成された再試行の最大数まで繰り返されます。

  2. レコードは処理済みとしてマークされます。

  3. 対応するエラー レコード エントリはエラー ログに書き込まれます。

  4. 次のレコードが処理されます。

レコードが処理済みとしてマークされるため、その値またはスキーマが変更されるまでレコードを同期する試みは実行されません。 (同一の値をテーブルに書き戻すと、修正済みとしてマークされることに注意してください。)

エラー ログでのエントリは書き込み専用です。 同じレコードの同期中の将来の成功または失敗は、このレコードに対する過去のエントリの改ざんが影響するわけではありません。 たとえば、レコードが後の同期サイクル中に正常に同期された後であっても、エラー ログでの失敗エントリは残ります。

注意事項

このエラー処理ロジックは、このサービスの今後のリリースによって変更されることがあります。

これらの失敗エントリは 特定のプロファイルの失敗の詳細情報を取得 要求を介して取得することができます。 応答は、失敗情報を含む Azure BLOB に URI を返します。 各行には次のコンマ区切りフィールド (明確にするために追加された改行) があります。

  
Entity: <entity-name>,   
RecordId: <”N/A” | guid>,   
NotificationTime: <datetime>,   
ChangeType: <sync-type>,  
FailureReason: <description>  
  

たとえば、次のようになります。

  
Entity: lead,   
RecordId: N/A, NotificationTime: , ChangeType: Trigger Initial Export, FailureReason: There is already an object named 'hatest201_lead' in the database.  
Entity: account, RecordId: b2a19cdd-88df-e311-b8e5-6c3be5a8b200, NotificationTime: 8/31/2016 6:50:38 PM, ChangeType: New, FailureReason: Invalid object name 'dbo.hatest201_account'.  

関連項目

Dynamics 365 でデータを管理する
データのインポート

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。