tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:レコードIDの15桁表現と18桁表現の検証

SalesforceのレコードIDには大文字/小文字を区別する15桁の形式と、大文字/小文字を区別できない外部システムとの連携用に用意された18桁の形式が用意されています。


15桁のレコードIDはレコード詳細ページのURLなどで確認できます。
f:id:tyoshikawa1106:20160813065722p:plain


18桁のレコードIDはApexのSOQLクエリで取得したときに確認できます。
f:id:tyoshikawa1106:20160813070014p:plain


このレコードIDの桁数について、項目自動更新やプロセスビルダー、Apexトリガやレポート、数式で扱うときにどのように扱われるかというのをまとめてみようと思います。

レポートから参照したとき

まずはレポートからレコードIDを表示させたときです。この場合は15桁のIDが表示されました。
f:id:tyoshikawa1106:20160813070710p:plain


レポートのエクスポート機能で取得したIDは15桁表示となります。
f:id:tyoshikawa1106:20160813070854p:plain

数式で参照したとき

数式で取得した場合です。
f:id:tyoshikawa1106:20160813071127p:plain


これは通常15桁の形式で表示されます。
f:id:tyoshikawa1106:20160813071204p:plain


数式には『CASESAFEID』という関数が用意されています。これを利用することで18桁に変換することが可能です。
f:id:tyoshikawa1106:20160813071415p:plain


先ほどのレポートからエクスポートしたときに18桁に変換したい場合は数式で対応する方法があります。
f:id:tyoshikawa1106:20160813071456p:plain

ワークフロールールの項目自動更新でセット

ワークフロールールの項目自動更新でセットした場合です。
f:id:tyoshikawa1106:20160813072014p:plain


これも通常は15桁で扱われます。
f:id:tyoshikawa1106:20160813072109p:plain


ですが項目自動更新では数式と同じ関数が利用できるので『CASESAFEID』を使って18桁に変換することも可能です。
f:id:tyoshikawa1106:20160813072249p:plain

f:id:tyoshikawa1106:20160813072327p:plain

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桁として扱われました。
f:id:tyoshikawa1106:20160813073446p:plain


ApexトリガなどでレコードIDを差し込んだ時は通常は18桁として扱われます。もし15桁に変換したい場合はString型の変数にセットする際にSubStringを使って対応すれば変更できます。
f:id:tyoshikawa1106:20160813073632p:plain



このあたりの詳細はSalesforce Developer Blogにまとめられています。

プロセスビルダー

プロセスビルダーから更新する場合です。ワークフロールールと同じと思われますが、実際に試してみると結果が違ったりする可能性もあるのできちんと確認してみました。


検証してみた結果ですが、プロセスビルダーでもCASESAFEID関数を利用することができました。これで状況に応じて15桁と18桁のどちらをセットするか選択できました。
f:id:tyoshikawa1106:20160813074433p:plain

まとめ

Apexは通常18桁で扱われますがSubStringなどで15桁に変換することが可能です。ワークフロールールやプロセスビルダー、数式は通常15桁で扱われ、CASESAFEID関数を使って18桁に変換することができます。


レポートの場合は15桁で扱われ、エクスポートしたときも15桁だったのでデータ連携などでそのまま利用するときは注意が必要そうです。


15桁と18桁どちらに合わせるか悩みどころですが、基本的には18桁で扱うようにした方が安心だと思われます。


最後にCASESAFEID関数ですが、コンパイルサイズが大きいという注意点があるそうです。

たいていのことは、「気合い」と「根性」で乗り越えられるものだ!!:【salesforce】idを18桁にするCASESAFEIDについてだゼイ。


あまり複雑な数式をつくるとコンパイルサイズの上限エラーで困ったことになるケースも多々あるのでこのあたりの制限があることは意識しておいた方が良いと思います。(数式から他の数式を参照した場合など)