前回は、Salesforceのマスタ管理やデータ移行で、外部IDを利用するとすごく便利だというお話について、詳しく説明しました。

今回はいよいよ実践編になります。
前回と同じく、取引先マスタと、取引先を参照(Lookup)項目として持つ、担当者マスタを例にします。
取引先マスタはSalesforceの取引先(Account)オブジェクトに、担当者マスタは、取引先責任者(Contact)オブジェクトに投入することにします。
取引先(Account)への外部ID項目の定義
最初に、取引先オブジェクトに、外部ID項目を作成しましょう。項目名は「Ex_Account_Key__c」とします。
テキスト型で定義。

ユニーク性を保つために、「ユニーク」->「値の重複を許可しない」にチェックを入れます。
また、「外部ID」にもチェックを入れましょう。


取引先(Account)へのデータのロード
では、取引先にデータをロードします。今回はデータローダーを使いました。マスタのサンプルとして、このファイルもつけましたので、参考にしてください。(このまま別の組織でも使えますので、ご自由にお使いください。)
データ構造としては、こんな感じです。



Upsertを選択して先に進み、取引先オブジェクトを選択して「Next」ボタンを押すと、下記のように、Upsertのキーを選択する画面になります。通常、IDが選択候補として表示されますが、先ほど定義した外部ID「Ex_Account_Key__c」も候補になっていますね。今回はそれを選択します。つまり、UpsertにオブジェクトIDは必要なく、マスタのcsvにもオブジェクトIDを保持する必要がないということです。

次の画面では、「related object」を選択します。これが、今回外部IDを追加したことにより、表示されることになったのですが、その効果は後程、別の場面で発揮されますので、今回は、そのまま何もしないで進みます。

csvとSalesforceの項目をマッピングします。「Ex_Account_Key__c」に取引先IDを、それ以外は適切にマッピングしましょう。

これで、取引先オブジェクトへ、外部ID付きでデータがロードされました。
取引先責任者へのデータロード
では、いよいよ取引先責任者へデータロードを行います。取引先は参照項目として「取引先への参照」を持っています。ここには、取引先IDをセットしておきます。なお、外部ID「Ex_Contact_Key」はあらかじめ作成しておきましょう。

これをUpsertして行きましょう。

Upsertのキーは新たに作成した外部キーを指定。

ここで、Related ObjectのAccountに取引先の外部IDである「Ex_Account_Key__c」を設定します。これで、
「Account:Ex_Account_Key__c」という対応ができ、取引先責任者の「Account」という項目には取引先オブジェクトの「Ex_Account_Key__c」が関連付けられます。つまり、次のマッピング画面に出てくる「Account:Ex_Account_Key__c」に取引先の外部キーが指定されたら、ロード時に参照を解決して、外部キーからオブジェクトIDを取得してねという指定をしたということです。
重要なのは取引先オブジェクトに外部キーを作成したからこれが可能になったということです。

先に述べた通り、マッピングで、csvの「取引先への参照(Account_Key_For_Ref)」項目をに「Account:Ex_Account_Key__c」をマッピングします。


「OK」ボタン押下。

では、上記のマッピングでデータをロードします。
以下のように、取引先担当者の「取引先」の参照項目に、csvで指定した取引先が入っていることが確認できます。

いかがでしたでしょうか。あらかじめ外部IDを定義しておけば、Salesforceの組織に依存しないマスタ管理が可能なことがお分かりいただけたと思います。
すごく便利なので、ぜひマスターして取り入れてください。