本記事では、Salesforceのケースの所有者変更時、所有者へカスタム通知を送信するフローの作成手順をご紹介いたします。
カスタム通知とは
画面の右上のベルアイコンに表示されるお知らせです。通常、Chatterでメンションされた場合や承認プロセスで承認依頼、承認された場合に通知されます。
今回、ケースの所有者変更時、「ケースの所有者に割り当てられました」のカスタム通知をケース所有者に送信するフローを作成します。
通知をクリックすると、ケースのレコードページへ遷移します。
フロー処理概要
作成するフローの全体像です。
1. カスタム通知取得
カスタム通知種別Idを取得します。
2. 受信者割り当て
ケース所有者をコレクション変数に割り当てます。
3. 所有者にカスタム通知送信
ケース所有者にカスタム通知を送信します。
カスタム通知の作成
設定をクリックします。
検索ボックスに"通知"と入力し、「カスタム通知」をクリックします。カスタム通知画面の「新規」ボタンをクリックします。
以下を設定し、「保存」ボタンをクリックします。ここではデスクトップとモバイルで通知します。
カスタム通知名: ケースの所有者割り当て
API参照名: CaseOwnerAssignment
デスクトップ: チェックオン
モバイル: チェックオン
カスタム通知が作成されます。
フロー作成
左サイドバーの検索ボックスに"フロー"と入力し、「フロー」をクリックします。「新規フロー」ボタンをクリックします。
「レコードトリガーフロー」を選択し、「作成」ボタンをクリックします。
プロパティを設定します。
オブジェクト: ケース
フローをトリガーする条件: レコードが作成または更新された
条件の要件: 数式の評価がTrueになる
数式:
(IsNew() || IsChanged({!$Record.OwnerId}))
&& CASESAFEID({!$User.Id}) != CASESAFEID({!$Record.OwnerId})
条件の1行目は、「新規 または 所有者が変更されたら」です。
条件の2行目は、「かつログインユーザーが所有者ではない」です。自分でケースを作成時や自分に所有者を変更時、自身に通知しないようにします。User.IdとRecord.OwnerIdはCASESAFEID関数で18桁にしたIdで比較します。
更新されたレコードでフローを実行するタイミング: レコードを更新し、条件の要件に一致するたび
フローを最適化: アクションと関連レコード
右上の「×」ボタンをクリックし、編集画面を閉じます。
備考
「ログインユーザーが所有者ではない」の条件で、当初、{!$User.Id}) != {!$Record.OwnerId}としていました。デバッグ時、自身で動かしているので常に開始条件に一致しないはずですが、なぜか開始条件をスルーしていました。変数に割り当てて確認したところ、User.Idは15桁で取得され、Record.OwnerIdは18桁で取得されるようです。
変数作成
まず、フローで使用する変数を作ります。作成する変数の一覧です。
変数名 |
説明 |
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;