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

 

公開日: 2017年1月

対象: Dynamics 365 (online)

データ エクスポートは、顧客所有の Microsoft Azure サブスクリプションで Dynamics 365 (オンライン) データをMicrosoft Azure SQL データベース ストアにレプリケーションする機能を追加する Microsoft Dynamics 365 (オンライン) ソリューションを使用できるようにするアドオン サービスです。 サポートされている対象先は、Microsoft Azure SQL データベースと Microsoft Azure 仮想マシン上の Microsoft Azure SQL サーバーです。 データ エクスポートは Dynamics 365 スキーマとデータ全体をインテリジェントに同期処理し、その後、Microsoft Dynamics 365 (オンライン) システムで変更 (差分変更) が発生すると、継続的に同期処理します。

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

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

このサービスは、Dynamics 365 (オンライン) から外部の Microsoft Azure SQL データベースへアクセスすることが必要であるため、このサービスに正常にアクセスするには、さまざまな前提条件を満たす必要があります。 特典として、TechNet: データ エクスポート サービスを使用するための前提条件 のセクションで、管理者の観点からより完全に説明されます。

Dynamics 365 (オンライン) サービスは、次のように構成する必要があります:

  • オリジナルもしくは完全なコピーの Microsoft Dynamics 365 用 2016 年 12 月の更新プログラム (オンライン) 以降のインスタンスが必要です。 詳細については、「インスタンスのコピー」を参照してください。

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

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

注意

このサービスにアクセスするプログラムは、データ エクスポートの管理ソリューションに関連付けられたインストールが必要ではありませんということに注意してください。

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

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

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

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

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

  • 少なくとも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 スクリプトでこの構成を行うには、「TechNet: Azure Key Vault の設定方法」を参照してください。 また、このサービスは REST API を使用して管理できます。Key Vault 管理 を参照してください。

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

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

データ エクスポート サービスは、2つのグループに分けられた REST ベース API を公開します: Dynamics 365 の組織構造、関係、および接続情報を調べるための一連の 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

指定された組織のコネクタ情報の取得

エンティティ

GET

指定された組織のエクスポート可能なすべての共有エンティティの取得

関連付け

GET

指定された組織のエクスポート可能なすべての関連付けの取得

hasorgacceptedprivacyterms

GET

関連組織がプライバシー条件を受け入れたかどうかを確認

acceptprivacyterms

POST

データ アクセスのための指定された組織の受け入れ

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

リソース

メソッド

説明

プロファイル

GETPOST

指定された組織のすべてのプロファイルを取得し、新しいエクスポート プロファイルを作成

プロファイル/{id}

GETPUTDELETE

特定のプロファイルを取得、更新、または削除

プロファイル/{id}/アクティブ化

POST

関連したメタデータとデータの両方のレプリケーションを開始するプロファイルのアクティブ化

プロファイル/{id}/activatemetadata

POST

メタデータ レプリケーションのみのプロファイルをアクティブ化

プロファイル/{id}/activatedata

POST

データ レプリケーションのみのプロファイルをアクティブ化

プロファイル/{id}/非アクティブ化

POST

プロファイルの非アクティブ化

プロファイル/{id}/テスト

GET

既存のプロファイル上でのテスト操作のを実行

プロファイル/検証

POST

プロファイル説明を作成する前にテスト操作を実行

プロファイル/{id}/失敗

GET

特定のプロファイルの失敗の詳細情報を含む BLOB に接続文字列を取得

アクセスの取得

Dynamics 365 システム管理者だけが、データ エクスポート操作の実行を許可されているため、これらの API は Azure Active Directory (AAD) セキュリティ トークン を使用して呼び出し元の承認を強制します。 次のコード スニペットは、管理者の名前とパスワードを使用して、Web アプリケーションのトークンを生成する方法を示しています。 サービスに適した値で、AppIdcrmAdminUsercrmAdminPassword に置き換える必要があります。 このアプローチは、開発、およびテストに使用できます。しかし、より安全な手段、Azure Key Vault の使用などを運用のために使用します。

//Reference Azure AD authentication Library (ADAL)  
using Microsoft.IdentityModel.Clients.ActiveDirectory;
   . . .
    string yourAppClientID = "[app-associated-GUID]";   //Your AAD-registered AppId 
    string crmAdminUser = "admin1@contoso.com";  //Your CRM administrator user name
    string crmAdminPassword = "Admin1Password";  //Your CRM administrator password; 
    //For interactive applications, there are overloads of AcquireTokenAsync() which prompt for password. 
    var authParam = AuthenticationParameters.CreateFromResourceUrlAsync(new 
        Uri("https://discovery.crmreplication.azure.net/crm/exporter/aad/challenge")).Result;
    AuthenticationContext authContext = new AuthenticationContext(authParam.Authority, false);
    string token = authContext.AcquireTokenAsync(authParam.Resource, yourAppClientID, 
        new UserCredential(crmAdminUser, crmAdminPassword)).Result.AccessToken;

AppId を取得する方法については、OAuth 2.0 と Azure Active Directory を使用して Web アプリケーションへのアクセスを承認 を参照してください。 Azure ユーザー セキュリティの詳細については、Authentication Scenarios for Azure AD を参照してください。

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

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

  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'.

関連項目

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

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 著作権