Salesforceのフローでケースの所有者へカスタム通知を送信する

本記事では、Salesforceのケースの所有者変更時、所有者へカスタム通知を送信するフローの作成手順をご紹介いたします。

カスタム通知とは

画面の右上のベルアイコンに表示されるお知らせです。通常、Chatterでメンションされた場合や承認プロセスで承認依頼、承認された場合に通知されます。

 

今回、ケースの所有者変更時、「ケースの所有者に割り当てられました」のカスタム通知をケース所有者に送信するフローを作成します。

 

通知をクリックすると、ケースのレコードページへ遷移します。

 

 

フロー処理概要

作成するフローの全体像です。

1. カスタム通知取得

カスタム通知種別Idを取得します。

2. 受信者割り当て

ケース所有者をコレクション変数に割り当てます。

3. 所有者にカスタム通知送信

ケース所有者にカスタム通知を送信します。

 

カスタム通知の作成

設定をクリックします。

 

検索ボックスに"通知"と入力し、「カスタム通知」をクリックします。カスタム通知画面の「新規」ボタンをクリックします。

 

以下を設定し、「保存」ボタンをクリックします。ここではデスクトップとモバイルで通知します。

カスタム通知名: ケースの所有者割り当て

API参照名: CaseOwnerAssignment

デスクトップ: チェックオン

モバイル: チェックオン

 

カスタム通知が作成されます。

 

 

フロー作成

左サイドバーの検索ボックスに"フロー"と入力し、「フロー」をクリックします。「新規フロー」ボタンをクリックします。

 

「レコードトリガーフロー」を選択し、「作成」ボタンをクリックします。

 

プロパティを設定します。

オブジェクト: ケース

フローをトリガーする条件: レコードが作成または更新された

 

条件の要件: 数式の評価がTrueになる

数式:

(IsNew() || IsChanged({!$Record.OwnerId}))

&& CASESAFEID({!$User.Id}) != CASESAFEID({!$Record.OwnerId})

 

条件の1行目は、「新規 または 所有者が変更されたら」です。

条件の2行目は、「かつログインユーザーが所有者ではない」です。自分でケースを作成時や自分に所有者を変更時、自身に通知しないようにします。User.IdRecord.OwnerIdCASESAFEID関数で18桁にしたIdで比較します。

 

更新されたレコードでフローを実行するタイミング: レコードを更新し、条件の要件に一致するたび

フローを最適化: アクションと関連レコード

 

右上の「×」ボタンをクリックし、編集画面を閉じます。

 

備考

「ログインユーザーが所有者ではない」の条件で、当初、{!$User.Id}) != {!$Record.OwnerId}としていました。デバッグ時、自身で動かしているので常に開始条件に一致しないはずですが、なぜか開始条件をスルーしていました。変数に割り当てて確認したところ、User.Id15桁で取得され、Record.OwnerId18桁で取得されるようです。

 

 

変数作成

まず、フローで使用する変数を作ります。作成する変数の一覧です。

変数名

説明

varRecipients

受信者Idリスト

textNotificationBody

通知本文

 

画面左上の「ツールボックスを切替」ボタンをクリックし、「新規リソース」ボタンをクリックします。

 

受信者Idの変数を作成します。設定後、「完了」ボタンをクリックします。

リソース種別: 変数

API参照名: varRecipients

データ型: テキスト

複数の値を許可 (コレクション): チェックオン

 

通知本文の変数を作成します。設定後、「完了」ボタンをクリックします。

リソース種別: テキストテンプレート

API参照名: textNotificationBody

本文: 「プレーンテキストとして表示」を選択後、本文設定

ケース番号: {!$Record.CaseNumber}

件名: {!$Record.Subject}

優先度: {!$Record.Priority}

※「プレーンテキストとして表示」を選択後、本文を設定します。「リッチテキストとして表示」を選択した場合、カスタム通知に余分な<p>タグなどが入ってしまいます。

 

最初にフローを一度保存しておきます。「保存」ボタンをクリックします。

 

任意の名前で保存します。ここでは以下で保存しています。

フローの表示ラベル: ケース所有者へカスタム通知を送信

フローのAPI参照名: SendCustomNotificationsToCaseOwner

説明: ケース作成時と所有者変更時に所有者へカスタム通知を送信

 

 

1. カスタム通知取得

「レコードトリガーフロー」の下の「+」マークをクリックします。

 

「レコードを取得」を選択します。

 

プロパティを設定します。

表示ラベル: カスタム通知取得

API参照名: GetCustomNotification

オブジェクト: カスタム通知種別

条件の要件: すべての条件に一致 (AND)

項目/演算子/: "DeveloperName" 次の文字と一致する "CaseOwnerAssignment"

※値には、前手順で作成したカスタム通知のAPI参照名を設定します。

 

並び替え順: 並び替えなし

保存するレコード数: 最初のレコードのみ

レコードデータの保存方法: 項目を選択してあとはSalesforceに任せる

 

 

2. 受信者割り当て

「カスタム通知取得」の下の「+」マークをクリックし、「割り当て」を選択します。

 

プロパティを設定します。

表示ラベル: 受信者割り当て

API参照名: asgRecipients

変数: {!varRecipients}

演算子: 追加

: {!$Record.OwnerId}

※コレクション変数に単レコードは割り当てられないので、演算子は「追加」で設定します。

 

 

3. 所有者にカスタム通知送信

「受信者割り当て」の下の「+」マークをクリックし、「アクション」を選択します。

 

左サイドバーの「通知」をクリックし、「カスタム通知を送信」を選択します。

 

プロパティを設定します。

表示ラベル: 所有者にカスタム通知送信

API参照名: SendCustomNotificationToOwner

カスタム通知種別ID: {!GetCustomNotification.Id}

受信者ID: {!varRecipients}

通知タイトル: ケースの所有者に割り当てられました

通知本文: {!textNotificationBody}

対象ID: {!$Record.Id}

 

これでフローは完成です。

 

「保存」ボタンをクリックします。

 

 

フローをデバッグ

レコード画面よりテスト用のケースレコードを作成します。

 

「デバッグ」ボタンをクリックします。

 

レコードトリガフローは常にロールバックモードでのデバッグになります。カスタム通知を実際に送信しての確認はできません。今回は、ケース作成時と更新時にフローが最後までエラー無く進むことをデバッグで確認します。

 

 

ケース作成(自身で作成)

まず、ケース作成時の動作を確認します。

「レコードが次の場合にフローを実行」に「作成済み」を選択し、テスト用のケースレコードを選択します。「実行」ボタンをクリックします。

 

ログインユーザー自身でデバッグしているので、開始条件に一致しません。フローは処理なしで終了することを確認します。

 

 

ケース作成(他のユーザが作成)

「再デバッグ」ボタンをクリックします。

 

「別のユーザーとしてフローを実行」をチェックオンにし、別のユーザーを選択します。「実行」ボタンをクリックします。

 

エラーなくフローが最後まで進んでいることを確認します。

 

 

ケース更新(所有者変更なし)

次に、ケース更新時の動作を確認します。「再デバッグ」ボタンをクリックします。

 

「レコードが次の場合にフローを実行」に「更新済み」を選択します。「実行」ボタンをクリックします。

 

所有者が変更されていないので、開始条件に一致しません。フローは処理なしで終了することを確認します。

 

 

ケース更新(開始条件をスキップ)

「再デバッグ」ボタンをクリックします。

 

「開始条件の要件をスキップ」をチェックオンにします。「実行」ボタンをクリックします。

 

エラーなくフローが最後まで進んでいることを確認します。

 

「有効化」ボタンをクリックします。

 

 

実際にカスタム通知送信

Sandbox環境で他のユーザーで代理ログインしてケース所有者を別のユーザーに変更します。ケースの所有者には、カスタム通知が送信されます。

 

 

メモ

画面からケースレコードを作成時は所有者を自身以外に設定することはできません。ケース作成時のテストは、Dataloaderでケースレコードを登録します。もしくは、開発者コンソールが使用可能なシステム管理者の場合、以下のApexを実行でケース新規作成時に任意のユーザーを所有者に割り当てます。

 

Case cs = new Case(

    Subject = 'Test',

    OwnerId = '005xxxxxxxxxxxx'

);

insert cs;

 

 

タイトルとURLをコピーしました