Salesforce担当者が一度は必ずつまずくポイントの一つに「IDの15桁・18桁問題」があります。Salesforceの各オブジェクトのプライマリーキーとなるIDに15桁のものと18桁のものがあるのです。
15桁IDも18桁IDもどちらも数値とアルファベットで構成されていますが、15桁IDの場合アルファベットの大文字か小文字かで別のIDとなります。一方18桁IDの場合、大文字小文字を区別しなくとも一意の値となります。
このことを知らずに15桁のIDを使ってExcelのvlookup関数で全く違うデータ同士を紐づけてしまった…と頭が真っ白になってしまったのは私だけではないと思います。それにしてもSalesforceはなぜこのような仕様にしたんでしょうね…。
「IDの15桁・18桁問題」 を回避する方法をいくつか記します。
数式の使用
15桁のIDを18桁に変換する関数があります。”CASESAFEID(id)”で18桁のIDを取得できます。私の場合は取引先オブジェクトと取引先責任者オブジェクトに数式のカスタム項目として18桁のIDを追加しました。エクスポートしてExcelなどで集計の処理をする場合などは必ず18桁のIDを使用するようにしています。
そもそもどんな法則?
15桁IDと18桁IDの間にはどんな変換の規則があるのでしょうか。Salesforceのサイトに変換のスクリプトが載っていたので解析しました。URLは失念。
まず15桁のIDを5桁ずつに分割します。
それぞれの5桁の固まりの5桁目からチェックし大文字アルファベットならば1、そうでなければ0をたて、5桁の2進数を作ります。
その2進数を10進数に変換します。
文字列”ABCDEFGHIJKLMNOPQRSTUVWXYZ012345″を0番目から数えて10進数の数値の文字を取得します。
例えば”5″ならば”F”となります。
その文字列を3つ並べたものを15桁IDの末尾につなげたものが18桁IDとなります。
例
0012v00003FrVW4
0012v → 00000 → 0 → A
00003 → 00000 → 0 → A
FrVW4 → 01101 → 13 → N
18桁ID: 0012v00003FrVW4AAN
18桁に変換するExcelファイルを作ってみた
15桁を18桁に変換する法則が分かったところで複数のIDをまとめて変換するExcelファイルを作ってみました。上の方に取引先と取引先責任者には18桁IDの数式項目を作ったと書きましたが、時々うっかり15桁IDの方をエクスポートしてExcelで作業を始めてしまうことがあります。そんな時にExcelの関数でガチャっと18桁に変換します。
Excelファイルを添付しますのでもしよければお使いください。ブログに添付されているExcelファイルなんてこわくてダウンロードに躊躇するかもしれませんが大丈夫ですよ。