フローで文字を抜き出す関数はあれど、”改行”で区切って判別するには工夫が必要でした。
改行判定には下記2つの関数が利用できるかなと考えていますが、
もっと良い方法があるよ!などあれば是非教えて頂けると嬉しいです。
①BR関数を使う
②JSENCODE関数を使う
先日、「SalesforceにメールTOケースで受信したメール内容を元に、ケースの項目に値を自動セットする」処理を作成した際に、①を使用した実装を行ったのでまとめてみました。
※同じメールアドレスの取引先責任者が複数いる組織での実装(ケースと取引先責任者の自動紐づけが機能しません。)
※記事用に内容は一部編集しています
【メールの送信内容イメージ】
メールTOケースで最初に届くメール構成は、ある程度統一されています。メールの文中に、「件名」「取引先番号」という単語が含まれている為、これを抽出してケースに登録するフローの実装を進めて行きます。また、
メール本文 はケースの説明(Description)項目に登録されます。
【開始条件】
オブジェクト:ケース
フローをトリガーする条件:レコードが作成された
エントリ条件:「説明」が[Null][FALSE]
【スケジュール済パス】
作成日時から1分後のパスを作成します。
メールTOケースによって作成されるケースは特殊な登録動作になるらしく、即時実行だと上手くメール本文が取得出来ない場合がありました。

【作成リソース】
データ型は全て「テキスト」です
①メール本文から「
取引先番号」以降を抽出する数式
RIGHT({!$Record.Description}, LEN({!$Record.Description})-FIND("取引先番号:", {!$Record.Description})-〇)〇→検索したい単語の文字数-1を記入します([取引先番号]の5文字)

②
メール本文から「件名」以降 を抽出する数式RIGHT({!$Record.Description}, LEN({!$Record.Description})-FIND("件名:", {!$Record.Description})-〇)〇→検索したい単語の文字数-1を記入します([件名]の2文字)
③改行判定用の数式
BR()
④①から改行以降を削除する数式
TRIM(LEFT({①の変数}, FIND({③の変数},{①の変数})-1))
⑤
②から改行以降を削除する数式TRIM(LEFT({②の変数}, FIND({③の変数},{②の変数})-1 ))
【フロー要素】
取引先番号に合致する取引先を取得する要素、
ケースの取引先ID・件名を更新する要素を登録します


【作成されたケース】取引先・件名が自動セットされました!


ケースの「説明」はロングテキストエリアですが、テキストエリア・リッチテキストエリア項目でも同様に改行判定は可能でした。
また、改行削除で使うbr関数について、リソースでテキスト化しないと改行が判別できませんのでご注意を。
・JSENCODE関数での改行判定
こちらを利用する時は、br関数は不要です。
数式リソース内でテキストをエンコードした上で、改行判別を行います

エンコードしたテキストにおいて、改行は下記表記になります。

また、スラッシュ単体がエスケープ文字にあたるため数式内で使えません。
find関数で下記エスケープシーケンスを使用して改行判定を行います。

※利用イメージ


参考:引用符で囲まれた文字列のエスケープシーケンス
https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_select_quotedstringescapes.htmなんだか他にも使えそうですが用途が思いつかず…
何か活用方法を思いついた方は是非コメントで教えて頂けると幸いです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

先日絵を描いていたら、鍋を火をかけていることを忘れてティファールの鍋を焦がしました。悲しみ