メールアラートでメール送信する際に詳細ページなどのリンクを記載したいというケースが良くあると思います。ですが、『https://login.salesforce.com』の部分をテンプレートに直書きすると本番環境とSandbox環境の違いで困ったことになります。
そこで『https://login.salesforce.com』の部分を数式で取得できるか探してみたのですが、うまくいきませんでした。
Twitterでも教えてもらったのですが、やっぱり難しいみたいです。
↓(メールテンプレートの設定でインスタンス取得できないかって話)
@tyoshikawa1106昔がんばったことがありますがうまくいきませんでした。 https://t.co/kjIyWkXl6W
— tarot (@tarot) 2015, 11月 20
数式の関数で動的に取得するのは無理そうなので、多少ましになる方法について確認しておきました。
以下、カスタム設定の方法試しましたが、数式項目まで用意する場合は、URL部分を取得する方法ありました。一番下に追記しました。
カスタム設定をつかったURLの取得
階層型のカスタム設定は数式項目で利用することができます。
こんな感じで『https://login.salesforce.com』の部分をカスタム設定に登録します。本番環境とSandbox環境で"login"と"test"を切り替えて使用します。(画面はマイドメインを有効化した組織でのURLです。)
数式項目にカスタム設定のURLを挿入します。$Setupで挿入可能です。
用意した数式項目をメールテンプレートに差し込みます。
これで詳細ページへのリンクをメールテンプレート内に差し込むことができます。
実際にメールアラートで送信したメールを確認したところ、問題なくリンクURLとして扱われていました。
今回、カスタム設定で対応してみましたが、これはカスタム表示ラベルでも対応可能です。ケース・バイ・ケースの部分がありますが個人的にはこういった設定情報はカスタム設定に持たせる方がいいんじゃないかなと思っています。(カスタム設定の場合、データ型の判別ができるなどのメリットがあります。オブジェクト使用数にカウントされるというデメリットもありますが...)
メールテンプレートの差し込みの種類の部分でカスタム設定やカスタム表示ラベルが挿入できれば一番よかったのですが、その2つは直接挿入できませんでした。数式項目で対応するしかなさそうです。
メールテンプレートのURLはつい固定文字列で指定したくなりますが、カスタム設定やカスタム表示ラベルで本番とSandbox環境を変更できるようにしておくことでよりメンテがやりやすい組織になると思います。また、固定文字列ではなくカスタム設定やカスタム表示ラベルにしておくと一箇所の変更でまとめて変更できるというメリットもあります。
ちなみにApexクラスの場合はURL部分を取得することが可能です。VisualforceやApexトリガなどの開発でURLが必要になった場合はApexで取得するようにしたほうがいいと思います。
追記
数式項目を用意する場合はカスタム設定などは必要ありませんでした。次の記事にまとめました。