DynamicsとTalendの接続は予想以上に難しかった

Salesforce側でデータの取り込みができました。
今回はDynamics CRMのデータを取り込みについて。

(先にお断りしておきますが、失敗談を盛り込んでいるので、内容がグダグダです)

スポンサーリンク

いきなり壁にぶち当たる

「作り方は分かった、SFDCと同じようにすればいいんだな」とタカをくくっていたら、えらいハマりました。

まずはパイプラインデザイナーでDynamicsとの接続を試みたところ…
接続にDynamicsはない

なっ、ない!(*´ω`*)

Salesforceでは接続がすんなりできていたものの、それはコネクタが既に用意されていたからなんですね。
データベースの内容も色々いじってみたけど、Dynamicsと直接関わるような設定はなさそうだったので断念。

パイプラインデザイナーからの接続は諦めることに。
(情報ある方プリーズ!)

では接続不可なのか?

いや、そんなことはないはず。
Talendのサイトを見てもコネクタがサポートされているはず。

Talendがサポートするコネクタ

それにしてもスゴイ数のコネクタがサポートされてますわ。
ほとんどが知らないヤツだけど、Talend使えば世界が一つになりますね。

Cloudは捨ててTalend Studioでやってみる

諦めが肝心!
ってことで、別の方法で。

Cloudはまだまだ発展途上のような感じがあるので、洗練された感があるTalend Studioから接続を試みることに。

早速、Talend Studioをダウンロード。
Talendのダウンロードページから製品をダウンロード。

Talend Open Studioをダウンロード

DataIntegrationをダウンロードしたが実はパイプラインデザイナーとのよく違いが分かっていない。。。
やっぱちゃんと予習すべきだったかな。

インストール後、プロジェクトの作成が必要なので新規プロジェクトで作成しました。
プロジェクトの選択

インストールするとようこそ画面が出てきます。
TalendStudioへようこそ

チュートリアル的な感じの画面もあるけど、とりあえずデモ版をインポートして参考にすることに。

Talend Studioで接続設定も…

では、Dynamicsとつなげてみましょう。

どハマりポイント1:Dynamicsの繋ぎ方が分からない

ファイル系だったり、SalesforceやAzureなどはすでにアイテムとして用意されているので、一目瞭然なんですがDynamicsのアイコンがここにもなかったみたい。

で、いろいろと試行錯誤したところ、接続設定は左側の[メタデータ]→[DB接続設定]からやるみたい。
そして、もう一つ重要なのがJDBC経由でDynamicsと接続するみたいです。

JDBCということなので、当然ドライバが必要となってきます。
自力で自作するのは困難なので、CDataからドライバを拝借することに。

こちらもアカウント登録すればトライアル期間があるので、それを使うことに。

DynamicsCRMJDBCドライバ

アカウント登録すればDynamics CRM JDBCドライバがダウンロード可能です。

ダウンロードしたら解凍して、setup.jarを叩きましょう。
インストーラが起動します。
解凍後setup.jarを起動

こちらがインストール画面。
特別な設定はなく、先に進めばOK。
Dynamics CRM JDBCドライバインストール

インストールした場所は後で使うので覚えておきましょう。

ドライバのインストールが完了したら、Talend Studioに戻ってDB接続定義を作成。

[メタデータ]→[DB接続定義]を右クリック、[接続定義]を選択。
DB接続定義の作成

名前や説明を入力。
ここは任意名でOK。
接続名を記入

次がとっても大事。
JDBCドライバの情報をこのように入力(ここを参考に設定しました)。

項目 備考
DBタイプ JDBC
JDBC URL jdbc:dynamicscrm:User=[ユーザID];Password=[パスワード];URL=https://[組織名].crm.dynamics.com/;CRM Version=CRM Online; []内はDynamics接続環境の情報を入力
ドライバー ※下記参照
ドライバーのクラス cdata.jdbc.dynamicscrm.DynamicsCRMDriver ドライバー指定後、「クラス名の選択」で自動設定される
ユーザID 接続先Dynamics環境のユーザID 実は使わないらしい
パスワード 接続先Dynamics環境のパスワード 実は使わないらしい
マッピングファイル Mapping SQL 多分使わない

ドライバーの指定は、[+]ボタンで新規作成→右側の[…]ボタン押下→「新規モジュールのインストール」で先ほどインストールしたCDataのJDBCドライバーを指定。
ドライバーの指定

最終的にはこのような設定に。
JDBCドライバーの設定

これで接続定義はひとまず完了、
「Test connection」で接続確認してみる。

テスト接続でエラー

(꒪ω꒪υ)

エラーやんけ!!!

設定内容を確認したけど、原因はよく分からん。

どハマりポイント2:DynamicsCRMドライバーが使えない!?

Dynamics CRM JDBCドライバーを使った接続がNGだったので、ダメ元でDynamics 365 Salesドライバーを使ってみることに。

設定等は割愛しますが、何とこちらは接続成功( ゚皿゚)
ますまず謎が深まるばかり。

とりあえず、これで突き進んでみることに。

接続確認後、作成されたDB接続定義を右クリックして[スキーマの取得]を選択。

これでエンティティが取り込まれるかと期待していたら。。。

エンティティが取得できない

取れず(泣)。。。
おそるべし、Talend。

エラーも出ないし。
まぁ、これでうまくいく方が怖いけど。

今まではMac環境でやっていたので、環境をガラッと変えてWindows版でやることに
このためにネカフェに行くなんて。

再びDynamicsCRMドライバーに戻して同じような設定で。

すると、何と接続が成功!
まさかのOS依存なのか!?

なんかまだMac版の方が不安定な感が否めないなぁ。

ということで、お次はエンティティの取得。
出来上がったDB接続設定に対し、右クリックして[スキーマの取得]を選択。
接続情報からスキーマの取得

最初の画面はそのまま[Next]でOK。
テーブル用フィルタ

次のスキーマ選択でエンティティが取り込まれてるではありませんか!
今回はAccountを使用するのでチェックを入れます。

エンティティが取得されている!

このように、テーブルにAccountエンティティが表示されています。
やったね!
テーブルにエンティティが取り込まれる

どハマりポイント3:コンパイルエラーだと!?

エンティティまで取り込んだらあとは楽勝…のはずだったんですが、また落とし穴が。

取り込んだエンティティを使ってジョブを作ることに。

ジョブを左のリポジトリから新規に作成し、デザイナーみたいなものが出てきます。

Accountを入力に使いたいので、テーブルにあるAccountをデザイナーへドラッグアンドドロップ。
エンティティをドラッグアンドドロップ

ドロップした後に出てくるウィンドウは「tJDBCInputを選択」を選択。
これが入力を意味します。
tJDBCInputを選択

次は出力側。
今回は途中の処理はナシでダイレクトにCSVに登録します。

こちらは右側のパレットから[tFileOutputDelimited]をデザイナーにドラッグアンドドロップ。
tFileOutputDelimitedをドラッグアンドドロップ

作成した2つのコンポーネントがバラバラなので繋げます。
入力側のコンポーネントを選択して右クリックを押しながら出力側に持っていきます。
入力と出力を繋げる

出力側はCSVを想定しているので、区切り文字や文字コードを調整。
CSVファイルの区切り文字を変更

CSVファイルの文字コードを変更

いざ実行!
…できない(╥﹏╥)

コンパイルエラーが出てしまいました。
実際にコード打ち込んでないのに何で!?
コンパイルエラー
エラーは何箇所かありました。

まずは、パッケージを最新化しました。
ソフトウェアの更新

オプションのライブラリも込みでインストール(結構時間かかりました)。
オプションのパッケージインストール

それでもエラーは解消せず。
あとは、Javaのバージョンが噛み合っていないのではと思い、Oracle1.8のJavaでビルドしてみることに。

Javaを入れて、環境設定を変えて、設定も変更。
Javaの設定変更

TalendのJavaインタプリタも変更。
Javanoインタプリタも変更

これでようやくビルドが通りました!

そして実行!
CSVが出力されて、Accountの内容も取り込まれているので成功です!

ふぅ〜、長かった。

今回の検証のまとめ

やってみてできたこと・できなかったこと

  • パイプラインデザイナーからDynamicsの接続はできなかった
  • Talend Studioを使用してもMac環境からは接続できなかった
  • WindowsであればDynamicsCRMの取り込みができた

この辺り、何かのバージョンアップとかで動きが変わるかもしれないので今後要チェックです。

簡単にできると思っていましたが、大苦戦でした。
やはり、全体的にTalendの知識が浅かったので、次回は反省会をします。

コメント