CData Sync ハンズオン

# はじめに

本資料は、[CData Software Japan](http://www.cdata.com/jp/)のハンズオン向けの資料です。本ドキュメントをもとに実機にCData Sync製品をインストールして手順に沿って操作する事で、SalesforceやDynamicsCRM Online(Dynamics365)といったクラウドサービスのデータをMySQLといったRDBに同期する方法を理解して頂くことを目的としています。

# 前提環境

ハンズオンには以下の環境が必要となります。

- Windowsマシン （Windows10が望ましい）
- インターネットへ接続可能　（プロキシサーバ経由でのアクセスが必要な場合はご連絡ください）
- Windowsの管理者権限が付与されており、プログラムのインストールが可能であること
- MySQL、および、WorkBenchが使用可能であること
- Salesforce、および、DynamicsCRM Online、SharePoint Onlineのアカウントを保有していること
- Postman

# ハンズオンの内容

本ハンズオンで実施する手順は以下の通りです。

1. CData Sync製品のインストール、および、初期設定
2. 製品の各機能の説明
3. SalesforceのデータをMySQLにSync
4. Dynamics CRM Online(Dynamics 365)のデータをMySQLにSync
5. APIからSyncジョブを実行
6. MySQL上でクラウドサービスに跨る顧客データを併せて確認

# 1. CData Sync製品のインストール、および初期設定

## CData Sync製品のインストール

[こちらのCData Sync製品のページ](http://www.cdata.com/jp/sync/)にアクセスして「DOWNLOAD」ボタンをクリックします。ダウンロードに必要な情報（メールアドレス必須）を登録してダウンロードします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/d8fb2db8-e10c-a06f-5348-e244879d498a.png)

setup.exeがダウンロードされるので、CData Syncを実行するマシン上にインストールします。インストーラを起動して、EURAを確認し、ウィザードに従いインストールします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/b2f285ff-a7bc-b0c5-cea7-7e4669624d98.png)
途中、管理者のパスワードの設定が必要となりますので、任意のパスワードを入力します。インストーラを最後まで進むと「Run CData Data Sync」にチェックがついていることを確認して終了します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/f79ade0f-03bf-7860-8aae-3324550db93d.png)
Windowsのステータスバーに、CData Data Syncのアイコンが表示されて、しばらくたつとブラウザが起動します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/0fdb41c3-1417-90ae-4548-f41f75128e55.png)

## ライセンスのアクティベーション

Login画面が表示されるので、User(admin), Passwordはインストール時に指定したパスワードを入力してSign inします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/8c2a770b-7d8e-b349-5509-b9452bcbb1ed.png)
Licenseのアクティベーションを行います。「30日の評価版をアクティベート」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/8a679eb6-805b-7a26-98a8-9eaac5934227.png)

アクティベートするクラウドサービスのデータソースとしてSalesforceを選択して、名前とEメールを入力して「評価版をアクティベートする」をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/6e2e087a-21fd-b47c-05de-83624c403b91.png)
Salesforceがアクティベート出来たら、続けてDynamicsCRMもアクティベートします。「このマシンのライセンス：」にSalesforceとDynamicsCRMの限定評価版のプロダクトキーがセットされれば成功です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/e4ba9d33-74d5-a3d7-208c-f0c584e25f9e.png)
限定評価版では、50行から後のすべての文字列が 'N/A-Trial Version' でマスクされるという制約があります。製品版をご導入の際には、アンインストールせず、同画面の「新しいライセンスをインストール」からライセンスキーをセットすることで、製品版に切り替えることが出来ます。

# 2. 製品の各機能の説明

CData Sync製品のWeb管理コンソールの各機能は、上段のタブで切り替えて表示することが出来ます。

## ジョブ

Syncジョブの作成、および、実行ステータスを確認する事が出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/2f6afc51-a299-a91e-37b2-deafda6b57fc.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/65e27872-b16a-b236-2ee7-d48ffd20fd82.png)

## 接続

クラウドデータソース、および、Sync先のRDBへのコネクション情報を設定する事が出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/ba475c2e-628f-e331-191c-d5764f46faa5.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/f5c4276c-fc96-d3d5-156b-5a5cb7366f00.png)

## 設定

ジョブ実行時のEmailへの通知やAPIエンドポイントへのアクセス権を設定する事が出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/e135b8b4-af7a-19b4-020f-0f93fdee349d.png)

## ヘルプ

本製品のドキュメントです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/dc614e5e-3528-fed0-ffb5-a6cbbf62c720.png)

## 情報

ライセンス情報を確認する事が出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/e4ba9d33-74d5-a3d7-208c-f0c584e25f9e.png)

## API

管理用APIエンドポイントのリストです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/9cd7c97a-0556-83be-7b2a-40ea2effbc68.png)


## 組み込みWebサーバの設定

CData Sync製品には、組み込みWebサーバが含まれており、デフォルトでは、本Webサーバーが利用されます。必要に応じて、IISをご利用頂けます。詳細は[製品マニュアル](http://localhost:8461/help/sync/pg_serveriisconfigmft.htm)をご覧ください。組み込みWebサーバの設定は、Windowsの通知エリアのCDataSyncアイコンを右クリックして、「Server Options...」からご確認頂けます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/45b89cd6-0d31-ace7-7ef2-44aec0c41889.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/2a1597f5-28c2-ecc4-6bb0-6344d970835a.png)

# 3. SalesforceのデータをMySQLにSync

## Salesforceへのコネクションを作成

「接続」タブを開き、「Add Connection」内のタブが「Sources」であることを確認して、「Salesforce」のアイコンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/915cb24c-5e61-353f-d17c-051e97400635.png)

Salesfroceへのコネクションの設定画面が表示されるので、名前を任意の名称（例：Salesforce）に変更して、User、Password、SecurityTokenを設定して、「接続のテスト」ボタンをクリックします。上段に「接続に成功しました。」のメッセージが出たら成功です。「変更の保存」ボタンをクリックして作成したコネクション情報を保存してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/cc2990b8-7a28-f8ec-4fe9-04f5cc1f4ec9.png)
※Salesforceのアカウント、および、セキュリティトークンの取得方法がわからない場合は、「[Salesforce Sales Cloud 開発者アカウント、および、セキュリティトークン取得方法](https://qiita.com/kuwazzy/items/68bc7c4a5b36721cfe83)」をご覧ください。

## MySQLへのコネクションを作成

Sync先のRDBとなるMySQLの管理コンソールである「MySQL Workbench」を開きます。保存されたlocalhostへのMySQLへの接続情報をクリックして開きます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/93d08a2a-90ea-daec-4120-5ad19314e510.png)
左下のSCHEMAエリアで右クリックから「Create Schema..」を選択して開きます。スキーマ名に任意（例：Sync）の名称を付与して「Apply」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/112f0c37-c0d6-c4a6-7847-f09ab7d9dd25.png)
新たに、Sync用のスキーマが作成されました。今回は、MySQLのこのスキーマ内にSync先のテーブルを作成したいと思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/6765bcac-31c1-5850-8902-6f8c3888de0f.png)

再び、CData Syncの管理コンソールに戻ります。「設定」>「Add Connection」タブを「Destinations」に切り替えて、「MySQL」のアイコンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/3a16be00-f3f8-96ea-0d4e-0b5bf0c5a3e6.png)
MySQLへのコネクションの設定画面が表示されるので、名前を任意の名称（例：MySQL）に変更して、Server、Port（デフォルトの3306）、Database（上記手順で作成したMySQLスキーマ名）、User、Passowordを設定して、「接続のテスト」ボタンをクリックします。上段に「接続に成功しました。」のメッセージが出たら成功です。「変更の保存」ボタンをクリックして作成したコネクション情報を保存してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/cb392900-9b9a-e745-4eb7-15204bf24e4b.png)

保存したコネクション情報がコネクションの一覧に表示されれば成功です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/bdccd778-4a46-3f8f-c5e8-fe890fa1a40d.png)

## ジョブの作成

「ジョブ」タブを開き、「ジョブを追加」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/16440d37-5dc1-2560-08b1-57d29926e675.png)

ジョブの設定画面が表示されたら、「ジョブ名」を任意の名称（例：Salesforce2MySQL）に変更して、「ソース」がSalesforceへのコネクション名、「同期先」がMySQLへのコネクション名がセットされていることを確認します。確認が出来たら、Salesforce内のテーブル（オブジェクト）を選択するために「＋テーブルを追加」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/e5445d3c-7aef-edec-c013-8bf0d739cc79.png)

Salesforce内のテーブル（オブジェクト）リストが表示されるので、今回は、取引先であるAccountを選択して、「+選択したテーブルを追加」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/66a9d520-cc21-037b-72a1-2e11c7bfbe07.png)

テーブルのリストにAccountが追加されたことを確認します。後の手順で、同じMySQLのスキーマにDynamicsCRMのデータも取り込むため、テーブル名にSalesforceのテーブルとわかるようにプレフィックスを付与します。下部の「Advanced」部分を開き、「テーブル名のプレフィックス」にSalesforceのテーブルとわかるような任意の名称（例：SFDC_）をセットします。設定したら上部の「変更を保存」ボタンをクリックしてジョブの設定を保存します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/f6ee85a7-b098-d089-0d86-cfa3edd9c754.png)

## ジョブの実行

それでは、アドホックにSalesforceのテーブルのSyncを実行してみます。上記手順で追加したSalesforceのテーブル（例：SFDC_Account）を選択して、「実行」ボタンをクリックします。しばらくたつと、上部に薄緑のメッセージボックスで「The [ジョブ名] completed successfully. Records affected: 99 (Runtime: 00:00:99).」といったメッセージが表示されれば成功です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/9c693ff1-64a9-9221-5cef-7ad11379cde6.png)

それは、MySQLWorkbenchからMySQLにSalesforceのデータがSyncされているか確認してみましょう。上記手順で作成したスキーマ（例：Sync）を開き、テーブルリストに、「cdata_sync_status」と追加したテーブル（例：sfdc_account）が表示されていることを確認します。追加したテーブル（例：sfdc_account）を選択すると、テーブルにイナズマが付いたアイコンが表示されます。本アイコンをクリックすると「SELECT * FROM sync.sfdc_account;」といったSQLが自動で生成されて、選択結果が表示されます。Salesforce内のデータがリストとして表示されれば成功です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/229e5e92-3699-b4f1-792c-19b9c39ef75e.png)

# 4. DynamicsCRM Online(Dynamics 365)のデータをMySQLにSync

## DynamicsCRM Online(Dynamics 365)へのコネクションを作成

「接続」タブを開き、「Add Connection」内のタブが「Sources」であることを確認して、「DynamicsCRM」のアイコンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/adac13d0-e243-88ae-ac15-5e5e67f745fc.png)

DynamicsCRMへのコネクションの設定画面が表示されるので、名前を任意の名称（例：DynamicsCRM）に変更して、URL、User、Password、CRMVersion(CRMOnline)を設定して、「接続のテスト」ボタンをクリックします。上段に「接続に成功しました。」のメッセージが出たら成功です。「変更の保存」ボタンをクリックして作成したコネクション情報を保存してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/f526f04d-11ab-3487-f975-9ca53d00bef0.png)
※DynamicsCRM Online(Dynamics 365)の評価版アカウントは[こちらのページ](https://trials.dynamics.com/Dynamics365/Signup)」から取得出来ます。

## MySQLへのコネクションを作成

DynamicsCRM OnlineのSync先のRDBには、Salesforceと同じスキーマとしますので本手順は不要です。

## ジョブの作成

「ジョブ」タブを開き、「ジョブを追加」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/10881875-4438-b05e-62aa-939998917f30.png)

ジョブの設定画面が表示されたら、「ジョブ名」を任意の名称（例：DynamicsCRM2MySQL）に変更して、「ソース」がDynamicsCRMへのコネクション名、「同期先」がMySQLへのコネクション名がセットされていることを確認します。確認が出来たら、DynamicsCRM内のテーブル（オブジェクト）を選択するために「＋テーブルを追加」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/c095b05b-6eeb-da13-b0d3-19f52b6995b7.png)

DynamicsCRM内のテーブル（オブジェクト）リストが表示されるので、今回は、取引先企業であるAccountを選択して、「+選択したテーブルを追加」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/52f983ce-f606-cb4f-526a-89831011598d.png)

テーブルのリストにAccountが追加されたことを確認します。下部の「Advanced」部分を開き、「テーブル名のプレフィックス」にDynamicsCRMのテーブルとわかるような任意の名称（例：D365_）をセットします。設定したら上部の「変更を保存」ボタンをクリックしてジョブの設定を保存します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/61a0f728-af22-07d6-6489-0fea7702bc71.png)

## ジョブの実行

それでは、アドホックにDynamicsCRMのテーブルのSyncを実行してみます。上記手順で追加したDynamicsCRMのテーブル（例：D365_Account）を選択して、「実行」ボタンをクリックします。しばらくたつと、上部に薄緑のメッセージボックスで「The [ジョブ名] completed successfully. Records affected: 99 (Runtime: 00:00:99).」といったメッセージが表示されれば成功です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/bea41e5b-d5c4-1abc-0d11-7027bed1e881.png)

それは、MySQLWorkbenchからMySQLにDynamicsCRMのデータがSyncされているか確認してみましょう。上記手順で作成したスキーマ（例：Sync）を開き、テーブルリストに、「cdata_sync_status」と追加したテーブル（例：d365_account）が表示されていることを確認します。追加したテーブル（例：d365_account）を選択すると、テーブルにイナズマが付いたアイコンが表示されます。本アイコンをクリックすると「SELECT * FROM sync.d365_account;」といったSQLが自動で生成されて、選択結果が表示されます。DynamicsCRM内のデータがリストとして表示されれば成功です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/f59a936c-99a9-778e-b5cd-9933df52be01.png)

# 5. APIからSyncジョブを実行

## APIアクセス用トークンの発行

「設定」タブを開き、「ユーザー権限」内の「ユーザー」の「＋追加」ボタンをクリックします。「ユーザーを追加」ダイアログが表示されるので、任意の名称のユーザー（例：cdata）を入力して、権限の「GET / POST」をチェックして「変更を保存」します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/644bf6d2-3046-0ed8-4680-168b83765130.png)

APIアクセス用のAuthトークンが生成されます。本トークン値は後の手順で必要となりますので控えておいてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/db04911d-380c-e110-b72c-511631cf4e8c.png)

## APIからジョブ一覧の取得

APIからジョブ一覧を取得してみます。「API」タブを開き、左側のメニュー内の「リソース > /api.rsc/jobs」を開きます。右側にHTTPメソッドの一覧が表示されるので、GETメソッドをクリックしてオープンします。本GETメソッドでJOBの一覧が取得可能な事が確認出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/286845e9-bdd2-daa9-1aea-3fa813456ac6.png)

Postmanを開き、下記の画面を参考にリクエスト時の設定を行い「Send」ボタンでクリックします。ジョブの一覧がJSONフォーマットで返って来れば成功です。

| 項目| 値 |
|:-----------------|:------------------|
| メソッド | GET |
| URI | http://localhost:8461/api.rsc/jobs/ |
| Header : Key | x-cdata-authtoken |
| Header : Value | 上記で取得したAPIトークン値 |

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/8bac9b40-5146-06d1-597a-138353a2e2d1.png)

## APIからジョブの実行

次に、APIからジョブを実行してみます。その前に、Salesforceの取引先（Account）とDynamicsCRMの取引先企業（Account）に新規に追加、既存のデータを変更してみます。

Salesforceの取引先（Account）の追加・変更の例
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/c15ad613-ef38-702b-81f6-239c41c2a392.png)

DynamicsCRMの取引先企業（Account）の追加・変更の例
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/8c5245f2-057f-cad5-759a-b2015e2f8970.png)

CData SyncのWeb管理コンソールの「API」タブを開き、左側のメニュー内の「アクション > /api.rsc/executeJob」を開きます。本POSTメソッドでJOBの実行が可能である事を確認出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/7993ef52-aa8d-35fa-ac0e-915511004bcb.png)

Postmanを開き、下記の画面を参考にリクエスト時の設定を行い「Send」ボタンでクリックします。今回はSalesforceのジョブを実行してみます。レスポンスのJSONのStatusが、"The job started running..."と表示されれば成功です。

| 項目| 値 |
|:-----------------|:------------------|
| メソッド | POST |
| URI | http://localhost:8461/api.rsc/executeJob/ |
| Header : Key | x-cdata-authtoken |
| Header : Value | 上記で取得したAPIトークン値 |
| Body : Key 1 | jobName |
| Body : Value　1 | ジョブ名(例：Salesforce2MySQL) |
| Body : Key　2 | ExecutionType |
| Body : Value　２ | Run |

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/b2d6cd5b-4793-831c-f43a-2821a97f4ee4.png)

CData SyncのWeb管理コンソールの「ジョブ」タブを開き、上記で実行したジョブの最後の実行結果を見ると、「Records affected: 2」と追加・更新されたレコードの件数が表示されているのが確認出来ます。これは、CData Sync製品が、更新差分のみ同期処理を行なっているためです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/767fdf65-96c5-41bc-ff4d-b4fd943e2f99.png)

MySQL Workbenchにて、下記のSQLで取引先の名称、部門、作成日時、更新日時を確認する事が可能です。

```sql
SELECT Id, Name, Site, CreatedDate, LastModifiedDate FROM sync.sfdc_account;
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/a9a316f5-acdb-b5ca-f440-8ef71d61aeef.png)

引き続き、DynamicsCRMのジョブも実行してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/9282fff5-188d-6eac-5a5d-57673c030988.png)
こちらも更新差分の件数のみ更新されていることを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/87e586f8-235f-4efd-76ba-45f03fae483e.png)

確認用のSQLは以下の通りです。

```sql
SELECT Id, Name, Telephone1, CreatedOn, ModifiedOn FROM sync.d365_account;`
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/cd350630-e814-8ef4-9eae-9406195b26c0.png)

# 6. MySQL上でクラウドサービスに跨る顧客データを併せて確認

MySQL WorkBench上でSalesforceとDynamicsCRM上の取引先データを併せてみてみましょう。以下のSQLを使います。

```sql
SELECT 'Salesforce' AS Soure, Id, Name, CreatedDate, LastModifiedDate FROM sync.sfdc_account
UNION ALL
SELECT 'DynamicsCRM' AS Soure, Id, Name, CreatedOn, ModifiedOn FROM sync.d365_account;
```
SalesforceとDynamicsCRMといった異なるクラウドサービス内のデータを併せて確認することが出来れば成功です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/08b86e6a-ab2a-19f9-fe7a-4099193ab63a.png)


# アンケート

[アンケートはこちらのリンクからご回答ください](https://docs.google.com/forms/d/16bAqkrvkk6qZm8sAMpA5F3_TbIAvhSC4R_yjWV0mWks/edit)