完璧じゃなくてもとりあえず終わらせるブログ

主にSalesforceの悪夢を記録しています

SalesforceId(15桁、18桁)の話

オブジェクトに保存したレコードには、すべてのオブジェクトをまたがって一意となるレコードIDが自動で付与されます。
つまり、このレコードIDが分かれば「どのオブジェクトのどのレコードなのか」が特定できます。
このレコードIDのことを「SalesforceId」や「SFID」と表現することがよくあります。

同じSalesforceIdなのに15桁と18桁がある

不思議な仕様ですよね。

15桁と18桁の違いは以下の通り。
・15桁:大文字小文字の区別あり(例:0015h00000aPBXv)
・18桁:大文字小文字の区別なし(例:0015h00000aPBXvAAO)

「大文字小文字の区別ができる場合は15桁でレコードを特定できるよ」ってことですね。

Salesforce内で完結するアプリケーションの場合はほとんど意識することなく使用可能です。
例えばSOQLでIdを取得したり、またその値を使ったり、という場合は変数で持ち回ることになりますし、その変数には18桁が勝手に入れられます。

Salesforce内で完結しないアプリケーション、つまり他システムとの連携をする場合などは18桁のSalesforceIdを使用することを意識しておきましょう。
なぜならURLは大文字小文字の区別がないので、15桁によるレコードの特定はできません。

SalesforceIdは外部に公開してもいいのか

たぶん、きっと、おそらく、よくないです。
明確に否定されている公式リファレンスやブログなどはこれまで見つけられていないのですが、Salesforceの仕様上、原則公開すべきでないと私は考えています。

例えば、
デジタルエクスペリエンスを作成し、サイトゲストユーザによるアクセスを許可するとき、GETリクエストによって渡されたSalesforceIdを使用してレコードを取得するなんて処理を書いてしまうと、セキュリティリスクの懸念があります。
サイトゲストユーザによるアクセス権限の不適切な付与はこれまでもたびたび問題になっており、Salesforce側もサイトゲストユーザによるアクセスを極力制限する仕様変更を過去何度か実施しています。
(この例ではサイトゲストユーザへのアクセス権限が本題ですが、SalesforceIdが起因となる可能性として考慮すべき事項だと考えます)

したがって、原則SalesforceIdはSalesforce内のアプリケーションで使用するものであり、外部アクセスにて使用する際にはWeb APIにおける認証などを施した上で授受すべき情報であるといえます。

SalesforceIdを利用する小ネタ

この話の本題はこれです。
SalesforceIdは頭3桁がオブジェクトを示すプレフィックスです。
これを利用して少しでも早く目的のデータにアクセスしましょう。

例:
「カスタムオブジェクト1」のレコードのSalesforceIdは:a055h00000bRfFc
 → プレフィックスである頭3桁の「a05」が「カスタムオブジェクト1」を示している

【classicのみ】このプレフィックスを利用してカスタムオブジェクト1のビューにアクセスする


SalesforceのURLを直接書き換えて、ビューを表示させます。

URLの不要な部分を削除し、プレフィックスを指定

これですぐにカスタムオブジェクト1のビューを表示させることができます。

カスタムオブジェクト1のビューが表示された

よくアクセスするオブジェクトのプレフィックスを覚えておけば、効率よくデータ閲覧ができるかもしれません。
Salesforceはとにかく画面遷移が遅いですからね。
もちろん標準オブジェクトも同様にアクセス可能です。
ただし、これはclassicのみで活用できます。lightningでは使えなくなってしまったのでご注意ください。


よし、とりあえず終わらせたぞ