# Microsoft Dynamics 365 Sales Import Integration Using CLI コマンドラインインターフェースからMS Dynamics 365 Salesデータコネクタを使用することもできます。以下の手順では、CLIを使用してデータをインポートする方法を説明します。 ## Install the 'td' command v0.11.9 or later 最新の[Treasure Data Toolbelt](https://toolbelt.treasuredata.com/)をインストールしてください。 ``` $ td --version 0.11.10 ``` ## Create Seed Config File (seed.yml) 以下の手順に従って、Dynamics 365 CRMへのアクセスを設定してください: 1. アプリケーションを作成し、client_id、client_secretを取得します [https://docs.microsoft.com/en-us/powerapps/developer/data-platform/use-single-tenant-server-server-authentication](https://docs.microsoft.com/en-us/powerapps/developer/data-platform/use-single-tenant-server-server-authentication) 2. アプリケーションユーザー用のカスタムセキュリティロールを作成します。最小限の権限(目的のオブジェクトに対する読み取り権限のみ)を持つカスタムセキュリティロールを作成することを推奨します。詳細はこちらを参照してください: [https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531130(v=crm.8)#create-a-security-role](https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531130(v=crm.8)#create-a-security-role) および [https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531090(v=crm.8)#security-roles](https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531090(v=crm.8)#security-roles) 3. Dynamics 365インスタンスからアプリケーションユーザーを作成します。詳細はこちらを参照してください: [https://docs.microsoft.com/en-us/power-platform/admin/create-users-assign-online-security-roles#create-an-application-user](https://docs.microsoft.com/en-us/power-platform/admin/create-users-assign-online-security-roles#create-an-application-user) 4. アプリケーションユーザーにカスタムロールを割り当てます Microsoft Dynamics 365の詳細情報を使用して、以下の例のようにseed.ymlを準備してください。 ```yaml in: type: ms_dynamics domain: YOUR_DYNAMICS_365_DOMAIN tenant_id: TENANT_ID auth_method: client_credentials client_id: CLIENT_ID client_secret: CLIENT_SECRET entity_type: contact filter_from: FROM_DATE incremental: true out: mode: append exec: {} ``` 利用可能なoutモードの詳細については、[Appendix](/ja/int/microsoft-dynamics-365-sales-import-integration-using-cli#h1__1835053169)を参照してください。 ### Supported config parameters | **Parameters** | **Value** | Required | **Description** | | --- | --- | --- | --- | | type | string | yes | ms_dynamics | | domain | string | yes | Dynamic 365 CRMドメイン。https://プレフィックスの有無は問いません | | tenant_id | string | yes | MicrosoftアカウントのテナントID | | auth_method | string | yes | client_credentials | | client_id | string | yes | アプリケーションのクライアントID | | client_secret | string | yes | アプリケーションのクライアントシークレット | | entity_type | string | yes | インポートするエンティティタイプ。例: contact、account、quoteなど... | | filter_from | string | yes | この値からデータをフィルタリングします | | filter_to | string | no | この値までデータをフィルタリングします。設定されていない場合はデフォルトの実行時刻が使用されます | | filter_column | string | no | データをフィルタリングする列。デフォルトは**modifiedon** | | incremental | boolean | no | 最後の実行以降の新しいデータのみをインポートします | | skip_invalid | boolean | no | 列に無効なデータ形式が含まれている場合、そのレコードをスキップします | | entity_set | string | no | エンティティセット名。通常はentity_typeの複数形です。例: contacts、accounts、quotesなど...この値が設定されていない場合、コネクタはAPIメタデータからentity_setを推測します | | columns | array | no | インポートする列とそのデータタイプ。この値が設定されていない場合、コネクタはAPIメタデータから列とデータタイプを推測します | | retry_limit | int | no | 各API呼び出しの最大リトライ回数 | | retry_initial_wait_millis | int | no | 最初のリトライの待機時間(ミリ秒) | | max_retry_wait_millis | int | no | API呼び出しを諦める前の最大待機時間 | | connection_timeout_millis | int | no | API呼び出し時に接続がタイムアウトするまでの時間 | | read_timeout_millis | int | no | リクエストにデータを書き込むまでの待機時間 | # Guess Fields (Generate load.yml) connector:guessを使用します。このコマンドは上記のseed.ymlを読み取り、新しいファイルを出力します ```bash $ td connector:guess seed.yml -o load.yml ``` load.ymlを開くと、推測されたentity_setとcolumnsが表示されます。 ```yaml --- in: type: ms_dynamics domain: tenant_id: auth_method: client_credentials client_id: client_secret: entity_type: contact filter_from: custom_expression_filter: your custom expression filter incremental: true entity_set: contacts columns: - {name: exchangerate, type: double} - {name: anniversary, type: string} - {name: lastname, type: string} - {name: employeeid, type: string} - {name: firstname, type: string} - {name: spousesname, type: string} - {name: customersizecode, type: long} - {name: fullname, type: string} out: {mode: append} exec: {} filters: - from_value: {mode: upload_time} to_column: {name: time} type: add_time ``` 次に、previewコマンドを使用して結果をプレビューできます。 ``` td connector:preview load.yml ``` システムが予期せず列タイプを検出した場合、または結果から列を削除したい場合は、load.ymlを直接変更して再度プレビューしてください。 現在、Data Connectorは「boolean」、「long」、「double」、「string」、「timestamp」タイプの解析をサポートしています。 ```bash td database:create td_sample_db td table:create td_sample_db td_sample_table ``` ## Execute Load Job ロードジョブを送信します。データのサイズによっては数時間かかる場合があります。データを保存するTreasure Dataのデータベースとテーブルを指定してください。 また、*--time-column*オプションを指定することを推奨します。これは、Treasure Dataのストレージが時間によって分割されているためです([data partitioning](https://docs.treasuredata.com/smart/project-product-documentation/data-partitioning-in-treasure-data)を参照)。オプションが指定されていない場合、データコネクタは最初のlongまたはtimestamp列を分割時刻として選択します。--time-columnで指定する列の型はlongまたはtimestamp型である必要があります。 データに時刻列がない場合は、add_timeフィルタオプションを使用して時刻列を追加できます。詳細については、[add_time filter plugin](https://docs.treasuredata.com/smart/project-product-documentation/add_time-filter-function)を参照してください。 ``` $ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column created_at ``` connector:issueコマンドは、すでに*database(td_sample_db)*と*table(td_sample_table)*を作成していることを前提としています。データベースまたはテーブルがTDに存在しない場合、connector:issueコマンドは失敗するため、データベースとテーブルを[手動で](https://docs.treasuredata.com/smart/project-product-documentation/data-management)作成するか、td connector:issueコマンドで*--auto-create-table*オプションを使用してデータベースとテーブルを自動作成してください: ``` td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column created_at --auto-create-table ``` `time`というフィールドがある場合は、`--time-column`オプションを指定する必要はありません。 ```bash td connector:issue load.yml --database td_sample_db --table td_sample_table ``` ## Scheduled execution 新しいデータの増分インポートのために、定期的なData Connector実行をスケジュールできます。TDは高可用性を確保するためにスケジューラを慎重に設定しています。この機能を使用することで、ローカルデータセンターでcronデーモンを使用する必要がなくなります。 増分ロードの詳細については、[About Incremental Loading](https://docs.treasuredata.com/display/INT/MS+Dynamics+365+Sales+Import+Integration#MSDynamics365SalesImportIntegration-AboutIncrementalDataLoading)を参照してください ## Create the schedule 新しいスケジュールはtd connector:createコマンドを使用して作成できます。以下が必要です: - スケジュールの名前 - cron形式のスケジュール - データを保存するデータベースとテーブル - Data Connector設定ファイル ```bash td connector:create \ daily_import \ "10 0 * * *" \ td_sample_db \ td_sample_table \ load.yml ``` また、Treasure Dataのストレージは時間によって分割されているため、--time-columnオプションを指定することを推奨します([data partitioning](https://docs.treasuredata.com/smart/project-product-documentation/data-partitioning-in-treasure-data)を参照)。 ```bash td connector:create \ daily_import \ "10 0 * * *" \ td_sample_db \ td_sample_table \ load.yml \ --time-column created_at ``` `cron`パラメータは、`@hourly`、`@daily`、`@monthly`の3つの特別なオプションも受け付けます デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。-tまたは--timezoneオプションを使用して、タイムゾーンでスケジュールを設定できます。`--timezone`オプションは、'Asia/Tokyo'や'America/Los Angeles'などの拡張タイムゾーン形式のみをサポートします。PSTやCSTなどのタイムゾーン略語は*サポートされておらず*、予期しないスケジュールになる可能性があります。 ## List the Schedules 現在スケジュールされているエントリのリストは、td connector:listコマンドを実行することで確認できます。 ``` td connector:list ``` ## Show the Setting and Schedule History td connector: スケジュールエントリの実行設定を表示します。 ``` td connector:show daily_import ``` td connector:historyはスケジュールエントリの実行履歴を表示します。各実行の結果を調査するには、td job jobidを使用してください。 ``` td connector:history daily_import ``` ## Delete the Schedule td connector:deleteはスケジュールを削除します。 ``` $ td connector:delete daily_import ``` # Appendix ## Modes for out plugin seed.ymlセクションでファイルインポートモードを指定できます。 ### append (default) これはデフォルトのモードで、レコードはターゲットテーブルに追加されます。 ``` in: ... out: mode: append ``` ### replace (In td 0.11.10 and later) このモードはターゲットテーブルのデータを置き換えます。ターゲットテーブルに対して手動で行われたスキーマ変更は、このモードでも保持されることに注意してください。 ``` in: ... out: mode: replace ```