Salesforceの外部IDについてどこまでご存じですか?本記事では外部IDとは何なのか、そして外部IDを使って余計な突合作業なしにレコードを登録する方法や、参照関係を外部IDで作成するための方法を詳しく解説します。
Salesforce 外部IDとは?
Salesforce外部IDとは、Salesforce以外のシステムで使われているIDをSalesforceでレコードの一意のID(識別子)として使用できる機能です。
Salesforce IDはレコード作成時に自動生成されますが、外部IDは任意の文字列を設定できます。
データ移行や一括登録・更新時にSalesforce IDの代わりに外部IDを使用することで、事前にSalesforce IDを確認する手間が省け、効率的に作業できます。 特に、外部データとの参照関係を構築する際に便利です。
通常、データ更新の際に参照項目にはSalesforceIDを入れておくことで参照関係を作れます。対して外部IDはSalesforceIDの代わりになることが出来ます。参照項目にSalesforceIDではなく外部IDを入れても問題なく取り込みが可能であるということです。
ただし、外部ID項目は「ユニーク」に設定し、重複を防ぐ必要があります。
また、外部IDとして使用できるデータ型は、メール、テキスト、数値、自動採番の4種類に制限されており、 自動採番型の項目はデータローダでは使用できません。
外部データは複数持つことが出来ますが、オブジェクト(エンティティ)あたり最大25個まで設定可能です。
外部IDとSalesforce IDの違い
Salesforce IDは自動採番されますが、外部IDは任意の値にすることが出来る点が大きな違いです。
Salesforce ID: レコードが作成された時にSalesforceが自動で生成する15桁または18桁の一意のIDです。ユーザーは任意の文字列を設定することはできません。
外部ID: Salesforce以外のシステムで使用しているID、またはそれに代わるような一意の値が登録されているデータ項目を指します。ユーザーが任意の文字列を設定できます。ただし、一意である必要があります。
数は外部IDの設定画面です。外部IDをtrueにしたら、ユニークをfalseのまま保存することもできるのですが、それでは外部IDとして機能しません。ユニークもtrueにすることで初めて、外部IDとして使用することが出来ます。

下図はインポートウィザードです。「外部IDサンプル」というのがサンプルで作った項目ですが、「ユニーク」をtrueにせず、外部IDだけtrueにしても一致条件には使えませんでした。

外部IDを使うメリットとは?
外部IDは、Salesforce以外のシステムで使われているIDを、Salesforceでもそのまま使えるようにする機能です。
外部IDを使う大きなメリットは、他のシステムのIDがそのまま使えるので管理がシンプルである、ということはもちろんのこと、データをSalesforceに取り込む時にSalesforce IDを事前に確認する手間を省けることです。
具体的なユースケースをもとに外部IDのメリットについて考えていきたいと思います。
下図を参照ください。ECのショッピングサイトを運営する企業が、ECのデータをSalesforceに日次でバッチ連携しているものとします。

Salesforceにデータが作成される順序としては、WEB商品⇒個人顧客⇒購入商品の順番で作られるものとします。
この場合、もし外部IDを使っていなかったら購入商品から個人顧客やWEB商品をどうやって参照するでしょうか?
購入商品を作成するバッチの中で、EC側のIDをベースに個人顧客やWEB商品のSalesforceIDを取得してくる処理を書けば可能ですが、かなり煩雑です。場合によっては購入商品の受け止めのためのカスタムオブジェクトがもう一つ必要になってしまうかもしれません。
この点、外部IDを使用してしまえば、購入商品の参照項目から個人顧客とWEB商品の外部IDを指定するだけなので、ただのデータインポートと近しい難易度になります。これが外部IDのメリットです。
もしくはもっとシンプルに、以下のような例もあります。
クラウドファンディングサイトの会員をSalesforceに定期的に取り込んでいる場合があるとします。この時、メールアドレスや電話番号、氏名で突合をかけますが、表記ゆれでうまくいかず、重複が発生する場合があります。
こんな時、クラウドファンディングサイトのIDを外部IDとすれば、もしクラウドファンディングサイト側のメールアドレス、もしくはSalesforce側のメールアドレスが変更されていても突合することが出来、リピーターの情報を常に最新に保つことができるでしょう。
この例は仮に外部ID化せず、通常のテキスト型で持っていても同じことが出来そうです。しかしデータローダーで取り込む際に直接取り込めるのか・レポートで出力して突合してから取り込むのか、という点で手間に大きな差分があり、外部ID運用に軍配が上がると思います。
外部IDの設定方法
外部IDはカスタム項目として設定します。
設定したいオブジェクトの「項目とリレーション」から「新規」をクリックします。

データ型は、メール・テキスト・数値・自動採番から選択します。ただし、自動採番型の項目はデータローダでは使用できません。テキスト型を使うことが多いです。

項目の表示ラベル、文字数、項目名を入力します。

「外部ID」と「ユニーク」にチェックを入れます。「ユニーク」にチェックを入れることで、同じ値を持つレコードが複数作成されるのを防ぎます。もしユニークにしないで保存し、先に重複レコードを作ってからユニークにしようとすると、エラーになり、重複を解消してからでないとユニークに出来なくなります。

項目レベルセキュリティとページレイアウトを設定し、「保存」をクリックします。これで作成は完了です。
外部IDをレコードの一意の識別子として使用する方法
以下はデータインポートウィザードの画面です。取引先を更新しようとしており、一致条件として先ほど作成した外部IDを指定しています。これにより、企業マスタを別のデータベースで持っていたとしても、外部IDでそのままインポートを行うことが出来ます。

もちろん、データローダーでも同じことが可能です。
外部IDを参照項目でSalesforce IDの代わりに使用する方法
取引先責任者には取引先を参照する参照項目が存在します。
そして、先ほど取引先でサンプルとして「企業ID(外部)」という外部ID項目を作成しました。
これらを使って、取引先責任者を外部IDで取引先に紐づける操作をデータローダーを使用して実演してみます。
まず適当に外部IDを入力しました。データローダーでこの外部IDを指定したうえで、取引先責任者の取引先参照項目が正常に入力されていれば、外部IDがSalesforceIDの代わりとなることが担保できます。
※データローダーの詳しい設定・操作方法はこちらから:Salesforceのデータローダーとは?インストールと使い方

データローダーでUpsertを選択します。

対象オブジェクトとして取引先責任者を選び、CSVを選択します。

CSVはこのようなデータにしました。取引先責任者から取引先を参照する項目に外部IDが入力されていますね。

続いて、このテストではあまり関係ないですがUpsertの対象として使用する項目を選択します。

次は、関連オブジェクトとのキー項目を何にするかを選択する画面が表示されます。ここで外部IDを選択します。

項目をマッピングしました。これでFinishを押して取り込んで行きます。

結果は… 無事取り込まれていました。外部IDをSalesforceIDの代わりに参照項目に入力しましたが、それで問題なく取り込みできることが証明されました。
