前回の記事ではPentaho(Spoon)を使って、Salesforceのデータをエクセルにエクスポートしました。
今回は、エクスポートしたデータを加工して、逆にSalesforceにデータをUpsertしてみようと思います。
エクセルのデータをそのままUpsertできれば、マスタ等をエクセルで管理しておき、変更があったらそのままSalesforceにUpsertするといったこともできますので、非常に便利です。
今回、インプットにつかうエクセルは、前回の記事でエクスポートした「取引先」のものを使いますので、前回記事を参考に、エクセルを用意すると、わかりやすいと思います。
更新用項目の準備
今回、取引先(Account)のデータをUpsertするにあたり、更新のキーを新たに定義することにしましょう。オブジェクトIDを更新キー(Upsert Key)にすることもできますが、データベースなど、外部のプライマリ・キーをキーにして更新できた方が、メンテナンス性も高まります。
そのため、あらかじめ、取引先に更新用のキーとして「FK_Key__c」という項目を外部キーとして用意しました。外部キーについては、この記事「Salesforceへのデータ移行に必須の外部ID!オブジェクトIDを使わないでデータ参照する方法①」とこの記事「Salesforceへのデータ移行に必須の外部ID!オブジェクトIDを使わないでデータ参照する方法② 実践編」に詳しく書きましたので、わからない場合は参考にしてください。
Salesforce側の定義を追加したら、エクセル側にも、「取引先FK」という項目を追加しておきます。これが取引先レコードのPKだと考えます。
では、用意ができましたら、これも前回の記事を参考に、Spoonを起動しましょう!
エクセル入力の定義
はじめに入力側の定義を行います。「入力」⇒「Excel入力」を中央にドラッグし、ダブルクリックして定義を開きます。
はじめに「ファイル」タブで定義を行います。タブ名のところに「!ファイル」というびっくりマークがついているのは、まだ定義しないといけない項目が残っているという意味ですね。
はじめに選択するのは、スプレッドシートタイプ(エンジン)です。「Excel 2007 XLSX (Apache POI)」を選択しました。
次に「ファイルとディレクトリ」で対象の取引先をエクスポートしたエクセルファイルを選択し、「追加」ボタンで追加します。
次に「シート」タブに移ります。ここで、画面下部の「シートの取得」ボタンを押すと、ダイアログが開きますので、対象のシートを選択しましょう。今回は「Sheet1」です。
最後に、「フィールド」タブで「フィールドの取得」ボタンを押すと、エクセルのシートにある項目が自動で取得されます。確認して、「OK」ボタンを押しましょう。
Salesforce Upseertの定義
次にSalesforce側のUpsertを定義します。左から「Salesforce Upseert」を選択して中央にドラッグし、その後、Shftを押しながら「エクセル入力」から「Salesforce Upseert」にドラッグして線をつなげます。つなぎ終わったら、「Salesforce Upseert」をダブルクリックして定義を開きます。
「ユーザ名」と「パスワード」を適切にいれて、接続できることを確認します。そしてここがポイントですが、「比較フィールド更新」の項目に、Upsertのキーである、「FK_Key__c」を入力します。
その後、「フィールド取得」ボタンを押すと、入力であるエクセルの項目が取得されます。わかりやすくするために、項目を削して、「取引先FK」「取引先名」「取引先 電話」「取引先 Fax」だけとします。
また、「モジュールフィールド」は対応するSalesforce側の項目を選択しなおします。「外部IDを使用」の項目はすべて「N」にします。これは、外部IDを使用して参照(Lookup)を解決するかという指定なので、今回は関係ないです。
実行
それでは、画面上部の実行ボタンを押下して、実行します。
下記のようにSalesforce側にレコードが追加されていることが確認できましたか?
今回、更新キーには「FK_Key__c」を使用しましたので、オブジェクトIDが異なるほかの組織でも同じようにUpsertすることが可能です。
オブジェクトIDに依存してしまうと厄介なSalesforceのレコード管理ですが、外部IDとETLツールをうまく使うと、手間をかけないで管理できそうですよね。