SalesforceのレコードIDには大文字/小文字を区別する15桁の形式と、大文字/小文字を区別できない外部システムとの連携用に用意された18桁の形式が用意されています。
15桁のレコードIDはレコード詳細ページのURLなどで確認できます。
18桁のレコードIDはApexのSOQLクエリで取得したときに確認できます。
このレコードIDの桁数について、項目自動更新やプロセスビルダー、Apexトリガやレポート、数式で扱うときにどのように扱われるかというのをまとめてみようと思います。
レポートから参照したとき
まずはレポートからレコードIDを表示させたときです。この場合は15桁のIDが表示されました。
レポートのエクスポート機能で取得したIDは15桁表示となります。
数式で参照したとき
数式で取得した場合です。
これは通常15桁の形式で表示されます。
数式には『CASESAFEID』という関数が用意されています。これを利用することで18桁に変換することが可能です。
先ほどのレポートからエクスポートしたときに18桁に変換したい場合は数式で対応する方法があります。
ワークフロールールの項目自動更新でセット
ワークフロールールの項目自動更新でセットした場合です。
これも通常は15桁で扱われます。
ですが項目自動更新では数式と同じ関数が利用できるので『CASESAFEID』を使って18桁に変換することも可能です。
Apexでセット
それではApex経由でセットした場合についてです。今回は開発者コンソールからApexを実行して検証してみます。
Apexで扱うときは以下の形式が考えられます。
- sObject型
- String型
- ID型
開発者コンソールから次の処理を実行して確認してみました。
Sample__c s = [SELECT Id,Name FROM Sample__c LIMIT 1]; String recordIdForString = s.Id; Id recordIdForId = s.Id; System.debug('レコードID (sObject型) = ' + s.Id); System.debug('レコードID (String型) = ' + recordIdForString); System.debug('レコードID (ID型) = ' + recordIdForId);
どれも18桁として扱われました。
ApexトリガなどでレコードIDを差し込んだ時は通常は18桁として扱われます。もし15桁に変換したい場合はString型の変数にセットする際にSubStringを使って対応すれば変更できます。
このあたりの詳細はSalesforce Developer Blogにまとめられています。
プロセスビルダー
プロセスビルダーから更新する場合です。ワークフロールールと同じと思われますが、実際に試してみると結果が違ったりする可能性もあるのできちんと確認してみました。
検証してみた結果ですが、プロセスビルダーでもCASESAFEID関数を利用することができました。これで状況に応じて15桁と18桁のどちらをセットするか選択できました。
まとめ
Apexは通常18桁で扱われますがSubStringなどで15桁に変換することが可能です。ワークフロールールやプロセスビルダー、数式は通常15桁で扱われ、CASESAFEID関数を使って18桁に変換することができます。
レポートの場合は15桁で扱われ、エクスポートしたときも15桁だったのでデータ連携などでそのまま利用するときは注意が必要そうです。
15桁と18桁どちらに合わせるか悩みどころですが、基本的には18桁で扱うようにした方が安心だと思われます。
最後にCASESAFEID関数ですが、コンパイルサイズが大きいという注意点があるそうです。
たいていのことは、「気合い」と「根性」で乗り越えられるものだ!!:【salesforce】idを18桁にするCASESAFEIDについてだゼイ。
あまり複雑な数式をつくるとコンパイルサイズの上限エラーで困ったことになるケースも多々あるのでこのあたりの制限があることは意識しておいた方が良いと思います。(数式から他の数式を参照した場合など)