
【Salesforce】レコードURLを差込する為に組織とExperience Cloudのドメインを取得する
はじめに
「Salesforceのメール通知にレコードURLを差し込みたい」
そんなよくありそうなご要望を頂きました。
環境ごとに異なるドメイン。
手動で設定するのはなるべく避けたいですよね。
そこで、ドメインを何かしらの方法で取得できないか、と思ったのですが、、、意外と参考にできそうなサイトがないな、、、!
という事で、本記事ではドメイン取得の方法をいくつかご紹介していきたいと思います。
Salesforce構築に携わる皆様の一助になれば幸いです!
この記事の概要
先程「レコードのURLをメール通知に差し込みたい」とお伝え致しましたが、詳細なご要望としては
・Experience Cloudユーザからの操作 → 内部組織へURLを送る
・内部組織での操作 → Experience CloudユーザへURLを送る
と、RecordのIDは同じでも双方のドメインでURLを送る必要がありました。
そこで実際に試した事をご紹介していきます。
数式で取得してみる
まずは1番簡単そうな数式から。
こちらの数式でドメインを取得できるようなので早速試してみる…
LEFT($Api.Partner_Server_URL_350 ,FIND("/services/Soap/", $Api.Partner_Server_URL_350))
オブジェクトに数式テキスト項目を作成して先程の数式を挿入。

▼ 実行結果
表示できそう…でも…!
この数式、どうやら同じ項目でもトリガした背景により取得できるドメインが異なるみたいです。


今回実現したいのは、以下のイメージです。
・Experience Cloudユーザからの操作 → 内部組織へURLを送る
・内部組織での操作 → Experience CloudユーザへURLを送る
但しこの数式項目では、
Experience Cloudユーザからの操作でトリガされたレコードにはExperience Cloudのドメインが入ってしまいました…。
つまり内部へ送るはずのメールにExperience Cloudのドメインが入ってしまう事になっていました。
数式で取得できるのは簡単で良かったのですが、今回は実装見送りです。
Apexで取得してみる
次にApexで取得してみます。
それっぽいApexコードを見つけたので試してみる事に。
組織のドメイン取得
・getOrgDomainUrl()
組織の正規 URL を返します。たとえば、https://yourDomain.my.salesforce.com、または [私のドメイン] が無効な組織の場合は https://yourInstance.salesforce.com が返されます。
・getSalesforceBaseUrl()
Salesforce インスタンスの URL を返します。
▼実行結果
開発者コンソールではどちらも組織のドメインが表示され同じ結果に。
但し実際にデプロイしたところ、getSalesforceBaseUrl()は数式と同じようにExperience Cloudでトリガした場合はExperience Cloudのドメインが表示されていました。
※補足
getOrgDomainUrl()、getSalesforceBaseUrl()の戻り値は「System.URL型」です。.toExternalForm()を付与する事で文字列表現にすることができました。

Experience Cloudのドメイン取得
・getLoginUrl(networkId)
Experience Cloud サイトで使用されるログインページの絶対 URL を返します。
▼実行結果
Experience Cloudのドメインは取得できるが、ログインページのURLなので"login"まで入ってくる。

当たり前なんですが、loginまで入ってきてしまいました。
ただ他に取得方法も無さそうだったのでここは削る事にしました。

さいごに
数式とApexでのドメイン取得をご紹介させて頂きました。
内部のユーザのみで利用する場合などレコードをトリガする環境とドメインを使用したい環境が同一の場合は、数式で取得するのが一番簡単そうですね…!
但し、今回のような接続を問わず特定のドメインを取得しなければならない場合は、getOrgDomainUrl() やgetLoginUrl(networkId)を使うことになるようです。
参考になった方、少しでも「いいね」と思った方はハートを頂けたら励みになります。
最後まで読んで頂き有難うございました!