[フロー]数式を使って、Chatter投稿のメンションを出しわけてみた

[フロー]数式を使って、Chatter投稿のメンションを出しわけてみた

決定要素 VS 数式 可読性とメンテナンスコスト。。いつもどちらを選択するか迷います。。
[フロー]数式を使って、Chatter投稿のメンションを出しわけてみた
61
[フロー]数式を使って、Chatter投稿のメンションを出しわけてみた
nagamin
2024/01/16 07:18:42
今回は、数式を採用してメンションの出し分けを行った実装例をご紹介します。


■要件

Salesforceのお問い合わせ・改修依頼の作業を管理する「SFタスク管理」オブジェクトがあります。
「ステータス」項目が
・”Working”に変更されたら、アサインされているレコード所有者に
・"Escalated"に変更されたら、アサインされているレコード所有者のマネージャに
レコード上でメンションしてお仕事の開始をお願いしたいです。


Chatterの文面は次のとおり
***************
@〇〇 さん
ステータスを {変更前のステータスの値} から {変更後のステータスの値} に変更しました。
ご対応よろしくお願いいたします。
***************

”Working”と"Escalated"に変更されたとき、決定要素を使って、アクションを2つ作成・テンプレートを分けるのもいいですが、同じ内容のテンプレートが二つ存在すると、将来テンプレートのメンテナンスを行ったとき、見落とす可能性もあります。。
数式を使って、テンプレートの作成を1つにしてみました。



■フローの全体像です


①開始条件

・オブジェクト:SFタスク管理
・トリガー:レコードが更新されたとき
・エントリ条件:1 AND ( 2 OR 3 )
  1 . 「ステータス」項目 変更済み True
  2 . 「ステータス」項目 次の文字列と一致する Working
  3 . 「ステータス」項目 次の文字列と一致する Escalated


②Chatterに投稿

・メッセージ:テキストテンプレート(※後述)
・対象名または ID :{!$Record.Id}・・・フローをトリガしたレコードID


■リソース

事前に「数式」を3つと「テキストテンプレート」を用意しました。


テキストテンプレート

・Chatterのメッセージに使用しているテンプレートです。
・1行目は、数式 :formulaMention を差し込んでいます。

{!formulaMention}
ステータスを {!$Record__Prior.Status__c} から {!$Record.Status__c} に変更しました。
ご対応よろしくお願いいたします。

数式(A):formulaMention

もし「ステータス」項目が
 "Working"の場合は、数式:formulaMention_Workingの値を返す
 それ以外の場合は、数式:formulaMention_Escalatedの値を返す
IF(
ISPICKVAL({!$Record.Status__c}, "Working"),
{!formulaMention_Working},
{!formulaMention_Escalated}
)


数式(B):formulaMention_Working

「ステータス」が"Working"のとき、レコード所有者宛てにメンションするための数式

ここで、おさらい。
@[ と ] で囲むと、Chatter投稿でメンションが可能でした。
◇ Salesforce > ヘルプ > プロセスビルダーの「Chatterに投稿」アクションでレコードの関連ユーザにメンションする方法

[差し込み項目] ボタンにてメッセージ欄に関連ユーザを挿入し、それを下記設定例のように @[ と ] で囲みます。
設定例: @[{![Custom_d__c].OwnerId}]

数式でメンション部分を作るとき、文字列部分はさらに『""』で囲み、『&』で結合します。
"@["&{!$Record.OwnerId}&"]  さん"


数式(C):formulaMention_Escalated

「ステータス」項目が”Working以外(≒”Escalated”) のとき、レコード所有者のマネージャ宛てにメンションするための数式

所有者のときと同様に作ってみましたが、、、

ユーザーの「マネージャー」項目は、入力されていないユーザーもあり
ブランクだった場合、美しくない。。。

⇒数式にIF文を追加して、
 ・所有者の「マネージャー」項目がブランクでなかったら、所有者のマネージャーをメンション
 ・それ以外だったら、メンション部分をブランクにしました。
IF(
NOT(ISBLANK({!$Record.Owner:User.ManagerId})),
"@["&{!$Record.Owner:User.Manager.Id}&"] さん",
""
)



■動作の確認

できあがり♪




お知らせしたい担当者が複数名いる場合や、ユーザが無効の場合など、場面によってアレンジも広がりそうです♪
ぜひ試してみてください。
gilde tech(for Salesforce)」に入会しませんか?
登録すると、「gilde tech」に掲載されているSalesforceのノウハウを全部閲覧できるだけでなく、自分が知っている知識を発信し、他の会員と交流することもできます。
またSalesforceの知識習得に役立つイベント情報も得ることができます。
是非ここで得た知識を業務に活かしてください!
61
コメント