外部IDの桁数が項目値とCSVで異なる場合の挙動
データ移行の際によくお世話になっている外部ID。ユニークな値を持たせてレコードの識別のために使いますが、桁数について質問をいただきました。
Admin
2020/09/09 17:40:41
前回に引き続き、「多分こうなると思うけど、言われてみればどうなるのだろう」シリーズです。
今回は、データ移行にとても便利な外部IDについて、桁数の違いがあってもUpsertが可能かどうか検証してみました。
取引先に「顧客コード」という外部ID項目を作成してあります。
CSVでは4桁で表示しています。
Salesforceの値
取引先名「株式会社あごーら」 顧客コード(外部ID):1
取引先名「XXXXカンパニー」 顧客コード (外部ID):10
CSVの値
取引先名「株式会社あごーら」 顧客コード(外部ID):0001
取引先名「XXXXカンパニー」 顧客コード(外部ID):0010

検証
外部ID「顧客コード」を使用してCSVを作成し、商談を取引先に紐づけて登録するようにDataLoaderで Upsertを実施しました。
検証結果
エラーとなり、商談のレコードは登録されませんでした。
エラーメッセージはCSVで「 not found for field ExternalID__c in entity Account 」と表示されました。
Salesforce上に既に登録されている外部IDと、CSV上の外部IDの桁数が同じレコードで異なる場合(=同じレコードで異なる外部IDの値を持つ場合)、IDは不一致とみなされてUpsertはエラーとりなるようです。
同じように取引先に「顧客コード」という外部ID項目を作成してあります。
Salesforceの値、CSV上の値の桁数は同じにしてありますが、レコードごとに異なっています。
Salesforceの登録
取引先レコードA 外部ID「顧客コード」:001
取引先レコードB 外部ID「顧客コード」:00001
CSVの値
取引先レコードA 外部ID「顧客コード」:001
取引先レコードB 外部ID「顧客コード」:00001

検証
前述のパターンと同様に、取引先に外部IDを設定。外部IDを使用してCSVを作成し、商談を取引先に紐づけるように DataLoaderで Upsertを実施しました。
検証結果
エラーもなく DataLoaderの Upsertが完了し、商談が外部IDで取引先と関連付けられた状態で登録されました。
Salesforce上に既に登録されている外部IDとCSV上の値が、レコードによって桁数が異なる場合でも同じレコードでは桁数が一致してる(=同じレコードでは同じ外部IDの値を持つ場合)ときは、外部IDで関連付けながらレコードを登録することができます。
◇Salesforce>ヘルプ>カスタム項目の属性
今回は、データ移行にとても便利な外部IDについて、桁数の違いがあってもUpsertが可能かどうか検証してみました。
状況
1. 同じ情報(レコード)に対する外部IDの桁数が異なる
取引先に「顧客コード」という外部ID項目を作成してあります。
CSVでは4桁で表示しています。
Salesforceの値
取引先名「株式会社あごーら」 顧客コード(外部ID):1
取引先名「XXXXカンパニー」 顧客コード (外部ID):10
CSVの値
取引先名「株式会社あごーら」 顧客コード(外部ID):0001
取引先名「XXXXカンパニー」 顧客コード(外部ID):0010
検証
外部ID「顧客コード」を使用してCSVを作成し、商談を取引先に紐づけて登録するようにDataLoaderで Upsertを実施しました。
検証結果
エラーとなり、商談のレコードは登録されませんでした。
エラーメッセージはCSVで「 not found for field ExternalID__c in entity Account 」と表示されました。
Salesforce上に既に登録されている外部IDと、CSV上の外部IDの桁数が同じレコードで異なる場合(=同じレコードで異なる外部IDの値を持つ場合)、IDは不一致とみなされてUpsertはエラーとりなるようです。
2.外部IDの値のなかで桁数にばらつきがある
同じように取引先に「顧客コード」という外部ID項目を作成してあります。
Salesforceの値、CSV上の値の桁数は同じにしてありますが、レコードごとに異なっています。
Salesforceの登録
取引先レコードA 外部ID「顧客コード」:001
取引先レコードB 外部ID「顧客コード」:00001
CSVの値
取引先レコードA 外部ID「顧客コード」:001
取引先レコードB 外部ID「顧客コード」:00001
検証
前述のパターンと同様に、取引先に外部IDを設定。外部IDを使用してCSVを作成し、商談を取引先に紐づけるように DataLoaderで Upsertを実施しました。
検証結果
エラーもなく DataLoaderの Upsertが完了し、商談が外部IDで取引先と関連付けられた状態で登録されました。
Salesforce上に既に登録されている外部IDとCSV上の値が、レコードによって桁数が異なる場合でも同じレコードでは桁数が一致してる(=同じレコードでは同じ外部IDの値を持つ場合)ときは、外部IDで関連付けながらレコードを登録することができます。
結論
同一項目の中で、レコードによって値の桁数にばらつきがある場合でも、外部IDの値として同一であれば(=ユニークな値が一致していれば)、Upsertは可能でした。考察
ヘルプの外部IDの属性を確認すると、カスタムの自動採番項目、メール項目、数値項目、またはテキスト項目を 25 項目まで設定できます。と記載があり、メールやテキストは値によって桁数が異なるので、今回確認した挙動も予測できるかと思います。
◇Salesforce>ヘルプ>カスタム項目の属性
参考
◇Salesforce>ヘルプ>外部 ID を使用して関連レコードをインポートするコメント