ETL ツール DM ExpressでCData ODBC Driver for Dynamics CRM を使い、SQL Serverにデータを連携する方法

# はじめに

本記事ではETLツールの DM Express を使って、Dynamics CRM の顧客リストを取得し、SQL Serverにデータを連携する方保を解説します。

# DM Expressとは

syncsoft 社が提供している高機能な ETL 製品群です。

http://www.syncsort.co.jp/pro_dmx.html

# 実現イメージ

今回はDM ExpressからDynamicsCRM APIに接続しますが、DM Expressは単純にDynamicsCRMと接続することができません。
DM ExpressがどのようにDynamicsCRM API側へリクエストを投げるべきかの判断材料やメタデータの情報が無いためです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/33ce5e77-43f4-4498-ff98-35e2530f71e4.png)

そこで、CData ODBC DynamicsCRM Driverを用いて、このボトルネックを解決します。

まず、各ツールからはODBCインタフェースでSQL（Select文）をCData DynamicsCRM ODBC Driverに向けて発行してもらいます。そのリクエストを受け取った、CData DynamicsCRM ODBC Driverは、DynamicsCRMのWebAPIのエンドポイントに対して、SQL文を解釈し、HTTPリクエスト形式に変換して発行します。

リクエスト後、XML/JSON フォーマットで返ってきたデータセットはCData DynamicsCRM ODBC DriverがODBCインタフェースのResultsetに変換してツールに返します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/66cb919b-5c0e-b244-0f3e-42137ad3fb43.png)

これにより、DM ExpressからアドホックにSQLによるリクエストがあったタイミングで最新のデータをDynamics CRMから取得することが可能です。

# 必要なもの
1. DM Express (本記事では体験版を利用します)
2. Dynamics CRM アカウント
3. CData ODBC Dynamics CRM Dirver

# 事前準備

今回の資料ではDynamics CRM から SQL Serverに顧客情報を連携します。

予めSQL Serverには出力先となるテーブルを構成しておいてください。

## DM Express のインストール

DM Express Sudioは以下のサイトからトライアル版を取得できます。

[https://www.ashisuto.co.jp/product/category/etl/syncsort-dmexpress/]

インストーラーを入手後、Wizardに従ってDM Express のインストールを進めてください。

## CData DynamicsCRM ODBC Driverのインストール

以下のサイトから評価版ビルドをダウンロードします。

- [CData DynamicsCRM ODBC Driver](http://www.cdata.com/jp/drivers/DynamicsCRM/odbc/)

ダウンロードされたインストーラ形式(.exe)のファイルを起動します。
(注)ODBCデータアドミニストレーターを閉じてから実行してください。
(注)途中オンラインでのアクティベーションが実行されるためインターネットアクセス出来る環境で行ってください。

下記のようなインストーラが起動するので、ライセンス契約書を確認した上で、デフォルト設定のままインストールを進めて完了させます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/219cc6b5-8ac1-3662-0488-e4c87d5e0e3d.png)

インストールが完了するとデフォルトブラウザが起動して製品ヘルプファイルが起動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/c5745fec-5bcf-0758-5f61-8b407c50a4b6.png)

また、ODBCのDSN構成ダイアログが表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/09bda255-7b0f-38b3-6ee7-0d4cd32cb98f.png)

（注）ODBCデータソースアドミニストレーターはマシンのビット数（32bit, 64bit）にあった方をご利用ください。

## CData DynamicsCRM ODBC Driverの接続設定

起動した「ODBCのDSN構成」ダイアログ内の下記の項目に、[DynamicsCRM評価版アカウント取得、および、サンプルアプリケーションの作成方法](https://qiita.com/kuwazzy/items/416b9c884892016bcc9f)で事前に取得した接続情報を設定します。

| DynamicsCRMの接続情報 | 設定項目 |
|:-----------------|------------------|
| CRM Version | CRM Online |
| Url | 例）https://***crm7.dynamics.com/ |
| User | 例）***@***.onmicrosoft.com |
| Password | 例）password |

「接続テスト」ボタンをクリックします。下記のようなダイアログが表示されれば成功です。「ODBCのDSN構成」の「OK」ボタンをクリックして保存します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/8f3b7e2b-3381-eeb7-35bf-87fc8992a158.png)

## タスクの作成

それでは実際にDM Expressを用いてETL処理を構成していきます。

まず、DM Expressを立ち上げて、処理の単位となるタスクを作成します。

左上のタスクアイコンを選択し

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/a489f151-fca1-b6a6-2fe8-bc1594bfd334.png)

以下のようにタスクを配置します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/26fe58a1-07be-569e-16e1-ed07fe27482e.png)

## 取得元データベースの定義

続いて、CData ODBC Driverへの接続を作成します。

作成したタスクの詳細画面を表示し、「データベース」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/b44b032b-b9ad-3bcb-6bf5-37e9f922e7d6.png)

「DBMS」から「Other」、「アクセス方法」で「ODBC」を選択すると、データベースの一覧に先の手順で構成したODBC DSNの「CData DynamicsCRM Source」が表示されるので、これを選択し「OK」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/b4c132e8-05eb-fafb-b7f6-8f5e49441f2f.png)

以上のように接続情報が作成されれば、OKです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/79d3c388-2601-e401-a145-44f5a476106f.png)

## 出力先データベースの定義

次にデータを出力する先となるSQL Serverへの接続を作成します。

先程と同じように「データベース」をクリックし

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/84d1ce98-b5e9-d274-6c71-046d20c82fcc.png)

「DBMS」から「SQL Server」、「アクセス方法」で「ODBC」を選択し、データベースの一覧から「sql server dsn」を選択します。

ユーザー名とパスワードには、SQL Server User Accountを指定してください。

正常に接続検証が行えれば、接続完了です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/2ad71d75-ab6d-d2ed-3bf0-a3f8c6409f4d.png)

以上で、それぞれの接続情報が構成できました。

## 入力条件の設定

それでは、実際にETL処理部分、まず取得元として構成した接続情報を元に、どのようなデータ、カラムを取得するのか？　の定義を行います。

DM Express タスクの「入力」を右クリックし「データベーステーブルを追加」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/82e550f8-dd42-961a-5d51-3832973ee513.png)

以下のような入力データベーステーブルの設定ウィンドウが表示されるので、接続先として事前に作成したCData ODBC DriverのConnection情報選択し、取得した対象のテーブルを選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/f62b4591-0fa2-92fb-2c92-d6c469683d67.png)

テーブルを選択すると、左下にカラム一覧が表示されるので、どのカラムを抽出するのか？　を下記のように構成します。

選択後、「OK」をクリックして、出力構成は完了となります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/99eacdf9-4969-040c-ca0d-5e767b3f91b8.png)

## 出力条件の設定

続いて、取得したデータをSQL Serverにどのように出力するのか？　の定義を行います。

入力の時と同様に「DM Express タスク」から、今度は出力を右クリックし「データベーステーブルを追加」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/55d50bee-455d-ca2f-68b7-b5e7eb89e3ca.png)

接続先にはSQL ServerのConnection情報を選択し、事前に作成しておいた出力先のテーブルを選択します。

選択後、カラムマッピングが表示されるので、ここの画面で入力元と出力先の各カラムの紐づけを行います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/47752d31-7454-e60f-06e1-aa3ce553f53e.png)

紐づけが完了し「OK」をクリックすれば、ETL処理タスクの作成は完了です。

## テスト実行

それでは実際に作成したタスクを動かしてみたいと思います。

テスト実行を行う場合は左上の「実行」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/4995cb52-f307-a648-9a27-7488a772aa15.png)

DM Expressサーバは任意のサーバを選択してください。。今回はローカルホストで実行します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/573f50ec-af3e-5e3f-3685-dceef1f7aeb5.png)

テスト実行の確認画面が表示されるので、「OK」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/d516c063-9cfa-b80c-e26c-e00c3c4150e7.png)

クリック後、処理状況を確認する画面に移り、構成したタスクの処理が実施されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/c5b2445e-1f63-3f64-1e09-86f29c0b52b1.png)

# おわりに

今回はDynamics CRMのデータを取得してみましたが、CDataではDynamics CRM以外にもおよそ100種類ほどのODBC Driverを提供しています。

https://www.cdata.com/jp/drivers/

ERP・CRM・NoSQLやSNS等、様々なツールからODBC 経由でデータが取得できるので、是非DM Expressと組み合わせて様々なデータ連携に役立ててみてもらえればと思います。