SalesforceでBase64エンコード

SalesforceでBase64エンコード
59
SalesforceでBase64エンコード
kazunii
2024/01/25 18:02:51

はじめに


salesforceの色々なレコードの情報を組み合わせて、外部サイトの個別のページを表示するための、URLを作成する場合があります。
例えば、アンケートのための名前や会員番号などを、元にその人専用のページを表示するためのURLがあります。
そのURLに、そのまま個人情報を表示すると、利用者に個人情報や見せたくない情報が見えてしまうので、あまり良くないですね。

 例)https://アンケートサイトのURL?name=カズ兄&no=123
そこで、URLパラメータをBase64などに変換することで、利用者がURLを見ただけではどんな情報が含まれているのか見えない様にすることができます。
 例)https://アンケートサイトのURL?name=44GL44Ga5YWE&no=MTIz

本記事では、Salesforceの機能を利用して、テキストをBase64に変換する方法を説明しております。
そのため、Base64へ変換する以外の、細かな設定内容については説明を省略しておりますのでご了承ください。


Base64への変換する方法について


  • 残念ながら、項目の数式を利用して、テキストをBase64に変換することができませんでした。
    フローやApexを利用して、Base64に変換した文字列を作成して利用することになります。
#機能名実現可否備考
1
数式

  • 数式の関数に、Base64へ変換する関数は用意されていないようです。(2024/1/9現在)
2
フロー

  • フロー変数の関数で実現可能
  • 通常の関数ではBase64への変換のための関数呼び出せないので、関数を手入力する必要があります。フローで利用できるのはありがたいです。
3
Apex

  • コードで関数を記述することで実現可能


設定方法


  • ここでは「フロー」を利用した実装案を説明します。
    なお、課題を実現するたに色々な方法があるとは思いますが、その中の1つの実現方法をお伝えします。

例題:
商談完了後にアンケートURLのリンクが入ったメールで送り、回答者が企業情報を入力しなくても、アンケートの回答が商談と関連する情報と分かるようにしたい

動作のイメージ:

  1. 商談のフェーズが"Closed Won"になったら、フローで商談のカスタム項目「アンケート送信先メールアドレス」宛てに、自動的にアンケートメールが送信される
  2. フローでBase64に変換した文字列を含むアンケートURLを、商談のカスタム項目「アンケートURL」に自動保存される
  3. その他仕様など
  • 商談と取引先の項目の値を利用して、Base64に変換した値をURLのパラメータに利用する
  • URLの仕様
    • https://アンケートサイトのURL?data=Base64に変換後の文字列
      この例題では、下のBase64への変換例「3.Base64に変換後のURL」をメールで送信する想定です。
    • Base64への変換例
      1. Base64に変換前の文字列
        • AccountName='テスト企業'&AccountNumber='99999'&OpportunityNumber='12345'&Stage='Closed Won'
      2. Base64に変換後の文字列
        • QWNjb3VudE5hbWU9J+ODhuOCueODiOS8gealrScmQWNjb3VudE51bWJlcj0nOTk5OTknJk9wcG9ydHVuaXR5TnVtYmVyPScxMjM0NScmU3RhZ2U9J0Nsb3NlZCBXb24n
      3. Base64に変換後のURL
        • http://アンケートサイトのURL?data=QWNjb3VudE5hbWU9J+ODhuOCueODiOS8gealrScmQWNjb3VudE51bWJlcj0nOTk5OTknJk9wcG9ydHVuaXR5TnVtYmVyPScxMjM0NScmU3RhZ2U9J0Nsb3NlZCBXb24n

設定内容:

  • 項目の作成(カスタム項目を作成します。)
オブジェクト表示ラベルapi名データ型
取引先取引先名Nameテキスト
取引先取引先番号AccountNumberテキスト
商談商談番号OpportunityNumber__cテキスト
商談フェーズStage選択リスト
商談アンケートURLSurveyURL__cロングテキスト
商談アンケート送信先メールアドレスSurveySendEmail__cメール

  • フローの作成
    • レコードトリガーフロー「EmailSurvey」を作成します。
変数(※フローで利用する変数を用意します。)
数式
TextBase64
  • この数式で、テキストをBase64に変換して、それを利用したアンケート用のURLを作成しています。
"https://アンケートサイトのURL?"+
base64Encode(
   blob(
      "AccountName='"+{!$Record.Account.Name}+"'&AccountNumber='"+{!$Record.Account.AccountNumber}+"'&OpportunityNumber='"+ {!$Record.OpportunityNumber__c}+"'&Stage='"+text({!$Record.StageName})+"'"
   )
)
関数名説明
base64Encode指定した文字列をBase64へ変換する関数です。
blob指定した文字列をblob型(2進数)へ変換する関数です。
ご参考:
テキストテンプレート
EmailText
  • メールで送信する本文を指定します。
  • 本文中の「アンケートへのリンク」には、フロー変数「TextBase64」を指定します。

処理の詳細
フロー図処理の説明
  1. オブジェクト 商談
    • 開始条件:フェーズが'Closed Won'(完了成立)になった時に開始する
  2. メール送信
    • 商談のメール項目「アンケート送信先メールアドレス」へメール送信する
    • メールの本文に、フロー変数 テキストテンプレート「EmailText」を指定するする

  3. 商談へアンケート用のURLを保存
    • 商談のレイアウトから送信したアンケートURLを確認できるように、フロー変数 数式「TextBase64」の値を、商談のロングテキスト項目「アンケートURL」へ保存します。

動作のイメージ
動作前


動作後
「アンケートURL」項目に、URLが自動登録されているのと、活動履歴にメールが表示されています。



おわりに


Base64にエンコードした値の"+"や"/"などを、別の文字に変更して、URLが誤動作しない様にする処理を入れると、もっと良いそうです。
その方法は、Googleなどの検索エンジンで、"Base64 セーフ"で、検索すると、見つかると思います。

※ご留意ください※

また、本記事での詳しい説明は行っておりませんが、単純にBase64に変換しただけでは”暗号化”はされておりません。
そのため、デコード(復元)するだけで簡単にエンコード前の文字列を確認できてしまいます。
高いセキュリティーを重視するのであれば、他の解決方法を取り入れる必要があること思います。

さて、初めて書いた記事でしたので、”読みづらい”や、”分かりづらい”な、ところがたくさんあったのではないかなと思います。。。
そのご指摘の内容でも良いですし、何かコメントをいただけると嬉しいです。
ご活用ください。
gilde tech(for Salesforce)」に入会しませんか?
登録すると、「gilde tech」に掲載されているSalesforceのノウハウを全部閲覧できるだけでなく、自分が知っている知識を発信し、他の会員と交流することもできます。
またSalesforceの知識習得に役立つイベント情報も得ることができます。
是非ここで得た知識を業務に活かしてください!
59
コメント