Salesforceのオブジェクトのデータをエクスポートするにはいろいろな方法があります。
- Dataloaderを使う
よく使われる方法。単一のオブジェクトをCsvへ出力するには便利だが、エクセルなどの形式や、オブジェクト同士の加工、ジョブ化には手間がかかる
- dataloader.ioを利用する
なかなか良いサービスだと思うが、フリーで使用できるレコード件数に制限があり、それ以上は有料。
- JitterbitのSalesforce Data Loaderを使う
直感的なインターフェースでマッピングを行え、使いやすい。ジョブスケジュール等のできる上位版のJitterbitHarmonyは有料だが、「Salesforce Data Loader」は無料で利用できる。
ざっとあげてみましたが、それぞれ一長一短で、得意なシーンが異なります。
csvであれば、データローダーだけで十分でしょうが、出力形式がデータベースやエクセルだったりすると、ツールを使った方が便利ですよね。
今回は、CommunityEditionであればフリーで使用できるPentahoのETLツール、「Spoon」を使用してみましょう。
Pentaho(Spoon)でできること
Spoonは、PentahoBIツールの中で、ETL部分を担うコンポーネントである「Kettle」の、GUIでETL作業を行うことのできるコンポーネントです。
Spoonを使うと、
- csvファイルやデータベース、エクセルからデータを抽出して加工し、それをSalesfore登録する。
- Salesfoeceからデータをcsvやデータベース、エクセルにエクスポートする。
- csvファイル、エクセルのデータをデータベースにロードする。
といったことを、GUIでのマッピングや設定で簡単に行うことができます。
Pentaho(Spoon)のインストールと起動
PentahoのCommunityEditionのページに行って、「Download Section」を押します。
すると、画面下部に移動します。
ここで、「Data Integration」を押すと、ETLツールをダウンロードする「ALL OS」のリンクが表示されます。
「pdi-ce-6.0.1.0-386.zip」をダウンロードして、ローカルのPCの適当なディレクトリに保存しましょう。
保存後、これまた適当なディレクトリで解凍します。
すると、「data-integration」というディレクトリができるはずです。
このディレクトリにある「Spoon.bat」(Windows以外はspoon.sh)をダブルクリックするか、コマンドプロンプトから実行すれば、PentahoのETLツールであるSpoonが起動します。
proxyを通さなければいけない場合は、「Spoon.bat」の下の方の「set OPT」のオプションに、「”-Dhttp.proxyHost=xxxxxx.xxxxx.xx.xx” “-Dhttp.proxyPort=xxxx”」を追加します。
特に、Salesforce等のクラウドと接続を行う場合には、開発環境によってはプロキシの設定が必要になりますので、注意してください。
実行にあたり、エラーが出る場合は、環境変数に「JAVA_HOME」が定義されていないのかもしれませんので、確認してみてください。
Salesforceへの接続
Spoonを起動すると、以下のような画面が表示されます。
左側に「データ変換」と「ジョブ」が表示されています。
Spoonでは、一連のデータ加工の方法について定義した「データ変換」(Transform)と、複数の「データ変換」をつなげたり、
「データ変換」に前処理や後処理を付け加えた「ジョブ」をGUIで定義することができます。
今回は「Salesforceのデータをエクセルに出力する」というシンプルな作業であるため、「データ変換」を定義することにします。
Salesforce Inputの作成
左側から「データ変換」を選んでダブルクリックしましょう。
左側がデザイン・ビューに切り替わりますので、「入力」→「Salesforce Input」を選んで、中央の領域(ペイン)にドラッグします。
その後、「Salesforce Input」をダブルクリックすると、Salesforceからの入力データの定義を行う画面が開きます。
3つのタブがありますが、はじめに、「接続」タブで定義します。
接続先のSalesforceのサービスURL
https://www.salesforce.com/services/Soap/u/21.0(本番環境の場合)
https://test.salesforce.com/services/Soap/u/21.0(Sandbox環境の場合)
とユーザ名とパスワードを入力します。
上記の設定を行ったら、エクスポート対象のオブジェクトを指定します。
今回は取引先(Account)とします。
クエリの指定もできますので、SOQLを書いて、対象のレコードを絞り込んだり、複雑なデータ構造を抽出することもできます。
次に、「フィールド」タブに行きましょう。
「フィールドの取得」ボタンを押すと、Salesforceから定義情報を取得します。
データタープやデータ長も自動でとってきてくれますので、便利ですよ。
Date型の項目に対する「書式」が、「yyyy-MM-dd’T’HH:mm:ss’.000’Z」になっていますが、このバージョン(Ver6)では、うまく扱えないようですので、「yyyy-MM-dd’T’HH:mm:ss’.000’」に変更します。「couldn’t convert string [2016-02-01T09:59:08.000Z] to a date using format [yyyy-MM-dd’T’HH:mm:ss’.000’Z] on offset location 0」というエラーが出てしまう場合は、日付型項目をチェックしてみましょう。
エクセルへの出力の作成
では、上記で、Salesforce側の入力を定義しましたので、それをエクセルに出力する定義を行います。
左から、「出力」→「Microsoft Excel Writer」を選んでドラッグします。
その後、「Microsoft Excel Writer」をダブルクリックすると、エクセルへの出力データの定義を行う画面が開きます。
2つのタブがありますが、はじめに、「ファイル&シート」タブで定義します。
今回は出力先のファイル名を定義するだけでいいでしょう。
定義が終わったら、2つをつなぎます。
シフトを押しながら「Salesforce Input」をクリックし、「Microsoft Excel Writer」にドラッグすることで、両者をつなぐことができます。
これで、Salesforceの入力を、エクセルに出力する定義を行えました。
しかし、まだSalesforceから取得したオブジェクトの各フィールドをどのようにエクセルのセルに出力するかを決めないといけません。
最後に、「Microsoft Excel Writer」をダブルクリックして開き、「コンテンツ」タブで、Salesforceから取得するデータをエクセルのセルにどのようにマッピングするかを定義します。
画面下部に「フィールドの取得」ボタンがありますので、押下すると、Salesforce側から流れ込むフィールドが列挙されます。
これで一通りの定義ができました。
あとは、実行ボタン(下記の画像の「▶」ボタン)を押下すれば、SalesforceのAccountオブジェクトからデータが抽出され、エクセルに書き込まれます。
出力されたエクセルを開いてみると、
こんな感じで出力されていますね!
一度出力の定義をつくれば、あとはボタン一発で好きな時にエクスポートできますので、バッチ化することも可能です。
また、インポートの定義を作れば、エクセルでデータを編集して、その結果をSalesforce側に戻すこともできますよね。
次回はSlesforceへのデータインポート(Upsert)を行ってみたいと思います。