前回はローカルのExcelファイルからSalesforceへインポートしてみたので
今回はSalesforceからデータをエクスポートして、Excelファイルに格納してみます。

今回の参考URLはこちら↓

完成形はこんな感じになります。

talend-export-overview

tSalesforceInputコンポーネントではSalesforceからデータを抽出します。

talend-export-sfdc-input

プロパティタイプにリポジトリを利用していますが、ジョブの実行の度に
「組み込み」にするかどうかを聞かれるので、組み込みの方が良いかもしれないです。
クエリ条件で条件を付与する場合は以下のように、WHERE無しの条件句を設定します。

オブジェクトで「アカウント」等の標準オブジェクトを指定すると、自動的にスキーマが更新され、標準項目がセットされます。ただし、このままだと内部で利用するSOQLは標準項目しか抽出しないため、カスタム項目は取得できません。カスタム項目も取得したい場合は、「SOQLクエリの手動入力」にチェックをつけて、クエリを入力します。

talend-export-sfdc-input-query

この場合は、クエリで取得する項目の順番に応じて、スキーマを適切に手動更新する必要があります。

talend-export-sfdc-input-schema

tFileOutputExcelはこんな感じになります。

talend-export-output-excel

tSalesforceInputのスキーマを変更したら、output側のスキーマも更新する必要があります。「全てのカラムを自動サイズ調整」にチェックをつけると、Excelのカラムの幅を文字数に応じて自動的に調整してくれるので、Excelで閲覧する時の一手間が無くなり、便利です。

セッションID取得にOAuth2.0を利用したい場合

tSalesforceInputにおいて、以下のように設定を行うことで対応可能です。

talend-sfdc-oauth2-component

Consumer Key, Consumer Secretは接続アプリのものを入力します。
Token Fileはrefresh_tokenを格納するためのファイルになるので、空ファイルを作成しておきます。OAuth2でジョブを実行した場合はOAuth用のWebサーバがローカルに立ち上がります。
このWebサーバの設定がCallBack Host, CallBack Portになります。

Salesforceの接続アプリケーションは以下のように設定します。

talend-sfdc-oauth2-connection-app

ローカルのWebサーバのCallback Host, CallBack Portに応じてコールバックURLを設定してください。また、refresh_tokenのscopeの付与も忘れないようにしてください。

実行をすると

Paste this URL into a web browser to authorize Salesforce Access:
https://login.salesforce.com/…

とログに出力されるので、authorizeのURLをコピーして適当なブラウザでアクセスして、OAuth2.0のAuthorization Code Grantのフローを回します。

接続アプリケーションでrefresh_tokenのscopeが設定されていれば、一回ジョブを回した後は、Token Fileで指定したファイルにrefresh_tokenが保存され、次回以降はrefresh_tokenを使ってaccess_tokenを自動的に取得してくれるため、ブラウザを使ったauthorizeの必要が有りません。

接続の使い回しについて

複数コンポーネントで同一Salesforce組織に対して接続する場合、その都度、SOAPやOAuth2.0によってセッションIDを取得するのは非効率です。同じ環境への接続を使いまわすために、tSalesforceConnectionというコンポーネントを利用できます。以下のように接続完了をトリガとして出力するコンポーネントとして利用します。

talend-sfdc-trigger-connection

tSalesforceConnectionの設定は他のコンポーネントの接続設定と同様にして行い、Salesforceの各コンポーネントでは以下のように「既存の接続を使用」にチェックを付けて、対象の接続を選択することで、セッションIDを使いまわすことが出来ます。

talend-sfdc-existed-connection