結論:まずこれだけ覚える
外部IDは、外部システムの識別子をSalesforce側に保持し、データ取込や連携でレコードを照合するためのカスタム項目属性です。 既存レコードがあれば更新し、なければ新規作成するアップサートでは、SalesforceレコードIDの代わりに外部IDを一致キーとして使用できます。
⚠️ [外部ID]を選択しただけでは値の一意性は保証されません。重複を禁止するには、別の設定である[一意]も有効にします。
外部IDとは
テキスト、数値、メールのカスタム項目に[外部ID]属性を設定できます。たとえば、基幹システムの顧客番号、会員番号、社員番号などを保存します。 外部IDには主に次の役割があります。
- 外部システムのキーでSalesforceレコードを検索・照合する
- Data LoaderやAPIのアップサートで一致キーとして使う
- 関連レコードをSalesforce IDではなく外部IDで指定する
- 項目にデータベースインデックスを作成する 外部IDは「外部システムのキーを保存する用途」を表す属性であり、項目のデータ型そのものではありません。
アップサートとの関係
アップサート(Upsert)は、指定した一致キーの値に応じて更新または新規作成を行う処理です。
- 一致するレコードが1件ある → そのレコードを更新する
- 一致するレコードがない → 新しいレコードを作成する
- 同じ外部IDを持つレコードが複数ある → 更新対象を一意に決められず、エラーの原因になる
たとえば、外部システムの顧客番号
C-10025を取引先の外部ID項目に保存しておけば、次回以降の連携ではその顧客番号を使って同じ取引先を更新できます。
[外部ID]と[一意]の違い
| 設定 | 役割 | 重複値 |
|---|---|---|
| 外部ID | 外部キーとして検索・照合・アップサートに利用する | 単独では許可される |
| 一意 | 同じ値を複数レコードへ保存できないようにする | 禁止される |
連携キーとして確実に1件を特定する必要がある場合は、通常[外部ID]と[一意]を併用します。[一意]を付けない外部IDは、並列処理などで重複レコードが作成され、その後のアップサートで DUPLICATE_EXTERNAL_ID エラーが発生する原因になり得ます。
SalesforceレコードIDとの使い分け
| 一致キー | 適する設計 | 注意点 |
|---|---|---|
| 外部ID | 外部システムが自分の識別子を正として管理する | Salesforce側にカスタム外部ID項目を作る |
| SalesforceレコードID | 外部システムがSalesforce IDを受け取り、継続して保持する | 外部側へのID書き戻しと保管が必要 |
Salesforce IDも更新キーとして利用できます。「外部システムから取り込み、外部側のキーで継続更新する」という要件で外部IDを選びます。
関連レコードの指定
外部IDは親子関係の取込にも利用できます。 たとえば、商談を取り込む際に、親取引先のSalesforce IDをファイルへ入れる代わりに、取引先の外部IDを指定して関連付けることができます。これにより、外部システムのキー体系を使ったまま関連レコードを照合できます。
設定手順
- [設定]→[オブジェクトマネージャ]→対象オブジェクトを開く
- [項目とリレーション]→[新規]をクリックする
- テキスト、数値、またはメールを選択する
- 外部システムのキーを保存する項目名を設定する
- [外部ID]を選択する
- 重複を禁止する場合は[一意]も選択する
- 項目レベルセキュリティを設定して保存する
- Data Loaderなどでアップサートを実行し、この外部ID項目を一致キーに指定する
試験での判別ポイント
- 外部システムのキーでインポートと継続更新を行う → 外部ID
- 既存なら更新、なければ作成する → アップサート
- Salesforce IDを外部側が保管している → Salesforce IDでも更新可能
- 外部IDの値を重複禁止にする → [一意]を併用
- 自動採番項目 → Salesforceが値を発行するため、外部側のキーを取り込む項目ではない
出典(Salesforce公式)
- How Many External ID Fields Can I Create Per Object in Salesforce — 外部IDがテキスト・数値・メールのカスタム項目であり、インデックスとアップサート照合に利用できることを裏付ける。
- Differences between the ‘External ID’ field and the ‘Unique ID’ field setting — 外部IDだけでは重複値を許容し、[一意]が重複を禁止する別設定であること、および両者の併用推奨を裏付ける。
- Make a SOQL query selective by marking a field as External ID or Unique — 外部IDにインデックスが作成され、アップサートのキーとして利用できる一方、一意性は自動的に強制されないことを裏付ける。
- Import Related Records with an External ID in Salesforce — 関連レコードをSalesforce IDの代わりに外部IDで指定できることを裏付ける。
- Insert or Update (Upsert) a Record Using an External ID — REST APIで外部IDを使い、既存レコードの更新または新規作成を行うアップサート動作を裏付ける。