SalesforceでBase64エンコード
kazunii
2024/01/25 18:02:51
はじめに
salesforceの色々なレコードの情報を組み合わせて、外部サイトの個別のページを表示するための、URLを作成する場合があります。
例えば、アンケートのための名前や会員番号などを、元にその人専用のページを表示するためのURLがあります。
そのURLに、そのまま個人情報を表示すると、利用者に個人情報や見せたくない情報が見えてしまうので、あまり良くないですね。
例)https://アンケートサイトのURL?name=カズ兄&no=123
例)https://アンケートサイトのURL?name=44GL44Ga5YWE&no=MTIz
本記事では、Salesforceの機能を利用して、テキストをBase64に変換する方法を説明しております。
そのため、Base64へ変換する以外の、細かな設定内容については説明を省略しておりますのでご了承ください。
Base64への変換する方法について
- 残念ながら、項目の数式を利用して、テキストをBase64に変換することができませんでした。
フローやApexを利用して、Base64に変換した文字列を作成して利用することになります。
| # | 機能名 | 実現可否 | 備考 |
1 | 数式 | ☓ |
|
2 | フロー | ◯ |
|
3 | Apex | ◯ |
|
設定方法
- ここでは「フロー」を利用した実装案を説明します。
なお、課題を実現するたに色々な方法があるとは思いますが、その中の1つの実現方法をお伝えします。
例題:
商談完了後にアンケートURLのリンクが入ったメールで送り、回答者が企業情報を入力しなくても、アンケートの回答が商談と関連する情報と分かるようにしたい
動作のイメージ:
- 商談のフェーズが"Closed Won"になったら、フローで商談のカスタム項目「アンケート送信先メールアドレス」宛てに、自動的にアンケートメールが送信される
- フローでBase64に変換した文字列を含むアンケートURLを、商談のカスタム項目「アンケートURL」に自動保存される
- その他仕様など
- 商談と取引先の項目の値を利用して、Base64に変換した値をURLのパラメータに利用する
- URLの仕様
- https://アンケートサイトのURL?data=Base64に変換後の文字列
※この例題では、下のBase64への変換例「3.Base64に変換後のURL」をメールで送信する想定です。 - Base64への変換例
- Base64に変換前の文字列
- AccountName='テスト企業'&AccountNumber='99999'&OpportunityNumber='12345'&Stage='Closed Won'
- Base64に変換後の文字列
- QWNjb3VudE5hbWU9J+ODhuOCueODiOS8gealrScmQWNjb3VudE51bWJlcj0nOTk5OTknJk9wcG9ydHVuaXR5TnVtYmVyPScxMjM0NScmU3RhZ2U9J0Nsb3NlZCBXb24n
- Base64に変換後のURL
- http://アンケートサイトのURL?data=QWNjb3VudE5hbWU9J+ODhuOCueODiOS8gealrScmQWNjb3VudE51bWJlcj0nOTk5OTknJk9wcG9ydHVuaXR5TnVtYmVyPScxMjM0NScmU3RhZ2U9J0Nsb3NlZCBXb24n
- Base64に変換前の文字列
- https://アンケートサイトのURL?data=Base64に変換後の文字列
設定内容:
- 項目の作成(カスタム項目を作成します。)
| オブジェクト | 表示ラベル | api名 | データ型 |
| 取引先 | 取引先名 | Name | テキスト |
| 取引先 | 取引先番号 | AccountNumber | テキスト |
| 商談 | 商談番号 | OpportunityNumber__c | テキスト |
| 商談 | フェーズ | Stage | 選択リスト |
| 商談 | アンケートURL | SurveyURL__c | ロングテキスト |
| 商談 | アンケート送信先メールアドレス | SurveySendEmail__c | メール |
- フローの作成
- レコードトリガーフロー「EmailSurvey」を作成します。
| 数式 | |
TextBase64
"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
|
処理の詳細
| フロー図 | 処理の説明 |
|
動作のイメージ
| 動作前 |
| 動作後 |
| 「アンケートURL」項目に、URLが自動登録されているのと、活動履歴にメールが表示されています。 |
おわりに
Base64にエンコードした値の"+"や"/"などを、別の文字に変更して、URLが誤動作しない様にする処理を入れると、もっと良いそうです。
その方法は、Googleなどの検索エンジンで、"Base64 セーフ"で、検索すると、見つかると思います。
※ご留意ください※
また、本記事での詳しい説明は行っておりませんが、単純にBase64に変換しただけでは”暗号化”はされておりません。
そのため、デコード(復元)するだけで簡単にエンコード前の文字列を確認できてしまいます。
高いセキュリティーを重視するのであれば、他の解決方法を取り入れる必要があること思います。
さて、初めて書いた記事でしたので、”読みづらい”や、”分かりづらい”な、ところがたくさんあったのではないかなと思います。。。
そのご指摘の内容でも良いですし、何かコメントをいただけると嬉しいです。
ご活用ください。
コメント