ToDoの割り当て先じゃないけど、作成者はレコードを削除できるようにする

ToDoの割り当て先じゃないけど、作成者はレコードを削除できるようにする

ToDoの割り当て先じゃない作成者もレコードを削除できるようにしたり、特定のレコードだけ削除できるようにする方法について紹介いたします。
ToDoの割り当て先じゃないけど、作成者はレコードを削除できるようにする
59
ToDoの割り当て先じゃないけど、作成者はレコードを削除できるようにする
chirosuke
2023/07/11 09:35:26
「ToDoの割り当て先の人は削除できるのですが、作成者は削除できないです。作成者も削除できるようにしたい」という質問を質問広場で見つけました。
検証してみたところ、フローの実行方法を「システムコンテキスト」にした画面フローの作成で実現ができました。

特定のレコードのみ削除できるようにする方法についても、同様の画面フローで実現できますので、こちらのフローの設定手順を紹介いたします。

※今回紹介する方法は、リストビューのレコードごとのアクションボタンには使えない方法ですのでご注意ください。




プロファイルの設定

要件を設定したい一般ユーザのプロファイルの設定を確認、変更します。
 
・ToDoの割り当て先じゃないけど、作成者はレコードを削除する
こちらに関しては今回の要件の場合はすでに、プロファイルの「ToDo の編集」にチェックがついて、ToDoの作成、編集ができる状態になっていると思いますので、特に設定変更は不要です。


特定のレコードのみ削除できるようにする
こちらは特定のレコードがある、オブジェクトの削除権限を外します。
今回は、例として「商談」オブジェクトを使用します。




フローの設定(ToDoの削除)

1.[設定] から、[クイック検索] で「フロー」を検索し、[フロー]をクリックし[新規フロー]ボタンをクリック、または、設定ホームの[作成▼]の「フロー」をクリックします。


2.「画面フロー」を選択、[作成]ボタンをクリックします。Flow Builderが開いたら、左上のアイコン「ツールボックスを切り替え」をクリックします。


3.マネージャの[新規リソース]をクリックして以下の変数を作成します。

①レコードIDを受け取るレコード(単一)変数
・リソース種別:変数
・API参照名:recordId(※この表記のままで入力してください)
・データ型:レコード
・オブジェクト:ToDo
・フロー外部での可用性:入力で使用可能にチェック


②実行ユーザのIDを18桁にする数式
※この後の分岐の条件で、ユーザIDの比較をしますが、①のリソースから参照するSalesforceIDは18桁、$User.IdのIDは15桁なので、桁数を揃えるためにこの数式を作成しています。
条件で実行ユーザIDの比較がない場合は、こちらの数式の設定は不要です。

・リソース種別:数式
・API参照名:formula_UserId(任意の名前)
・データ型:テキスト
・数式:CASESAFEID({!$User.Id})


4.[開始]の下の⊕から[決定]を追加し以下のとおり設定します。
表示ラベル:割り当て先か作成者は削除OK(任意の名前)
結果を実行する条件の要件:いずれかの条件に一致 (OR)

リソース

演算子

recordId > 割り当て先 ID

次の文字列と一致する

formula_UserId

(3.②で作成した数式)

recordId > 作成者 ID

次の文字列と一致する

formula_UserId

(3.②で作成した数式)

※他にも削除に必要な条件がある場合は、こちらで追加していきます。
デフォルトの結果:削除NG(任意の名前)


5.[決定]要素のコネクタの「割り当て先か作成者は削除OK」の⊕から[画面]を追加し以下のとおり設定します。
※こちらはなくても問題ありません。削除前の「本当に削除していいですか?」の確認画面です。
コンポーネントから[表示テキスト]をクリックし、削除前の最終確認のメッセージを入力します。

サンプルでは、ToDoの「件名」「期日」「割り当て先」も表示させています。


6.5の[画面]を下の⊕から[レコードを削除]を追加し以下のように設定します。
削除するレコードを検索する方法:レコード変数またはレコードコレクション変数に保存された ID を使用
レコードまたはレコードコレクション:recordId


7. [レコードを削除]要素下の⊕から[画面]を追加し以下のとおり設定します。
※こちらもなくても問題ありません。
コンポーネントから[表示テキスト]をクリックし、削除が完了したメッセージを入力します。

サンプルでは削除完了したメッセージを表示させ、[一時停止]と[前へ]ボタンを非表示にしています。


8.[決定]要素のコネクタの「削除NG」の下の⊕から[画面]を追加し以下のように設定します。
コンポーネントから[表示テキスト]をクリックし、削除条件に満たなかったユーザ宛てのメッセージを入力します。
サンプルではフローを終了させますので、[カスタム表示ラベルを使用]で完了ボタンの表示ラベルを「終了」にします。(フッターの設定は任意です)


9.最後にフローを以下のように[保存]し、 [有効化]にしてテストを実施します。
「フローの表示ラベル」と「フローの API 参照名」を入力し、左下の[詳細を表示]をクリックして開きます。
フローの実行方法:システムコンテキスト共有なし — すべてのデータにアクセス


今回のフローのポイントは、実行ユーザの権限ではなくシステム権限でフローを実行させることです。
参考ヘルプ
フローの実行ユーザ
システムコンテキストで常に実行




フローの設定(特定レコードのみ削除)

今回はサンプルとして、商談フェーズが「01-商談の見極め」の場合のみレコードを削除できるようにします。
フローの設定は、上記の「フローの設定(ToDoの削除)」とほぼ同じなので、条件分岐の[決定]要素とフロー図全体のみ掲載いたします。


■ [決定]要素の設定
表示ラベル:削除OK(任意の名前)
結果を実行する条件の要件:すべての条件に一致 (AND)

リソース

演算子

recordId > フェーズ

次の文字列と一致する

01-商談の見極め

※他にも削除に必要な条件がある場合は、こちらで追加していきます。
デフォルトの結果:削除NG(任意の名前)


■ フロー図



カスタムアクションまたはカスタムボタンの作成

今回の削除ボタンはレコード詳細画面に配置しますので、どちらの作成でも大丈夫ですが、挙動が少し違うので要望に合うほうで作成してください。

■カスタムアクション
主な特徴は、フロー起動がモーダルです。完了の戻り値が設定できません。

■カスタムボタン
主な特徴は、フロー起動がタブです。完了の戻り値が設定できます。



1.削除するレコードのオブジェクトマネージャから「ボタン、リンク、およびアクション」にアクセスし、[新規アクション]または、[新規ボタンまたはリンク]をクリックします。


2.[表示ラベル][名前]を入力し、以下のように設定します。

■カスタムアクション
・アクションの種別:フロー
・フロー:作成したフローを選択


■カスタムボタン
・表示の種類:詳細ページボタン
・動作:現在のウィンドウにサイドバーおよびヘッダーなしで表示
・コンテンツソース:URL
・数式入力欄:/flow/ToDoDelete?recordId={!Task.Id}&retURL=00T/o


<数式入力欄の解説>

フローの API 参照名:フローの「プロパティ」や、「詳細とバージョンの表示」から確認することができます。

戻り値:設定しないとフロー完了ボタンを押した後も初期画面に戻りエンドレスになりますので何かしらの設定が必要です。
今回のサンプルではToDoのホーム画面(リストビュー画面)に戻るようにしています(00TはToDoのオブジェクトPrefix)
他のオブジェクトのオブジェクトPrefixを確認したい場合はレコード画面を開いてアドレスバーからレコードIDの先頭の3桁を確認してください。

その他のフローの完了時のカスタマイズについてはヘルプを参照してください。


3.ページレイアウトの「Salesforce モバイルおよび Lightning Experience のアクション」に配置し、標準の[削除]ボタンを除外します。
※サンプルでは検証のため、標準の[削除]ボタンを残したままにしています。




【結果確認】

まずは、割り当て先ではない作成者がToDoを削除する検証です。
標準ユーザの「社員のネロ」さんが作成したToDoです。


標準の[削除]ボタンをクリックすると、メッセージが表示され削除できません。


次は、カスタムアクションの「カスタム削除A」ボタンをクリックします。
アクションなので、モーダルでフローが起動し、作成者なのでフローの分岐で削除可能の画面が表示されています。


フロー画面の「次へ」ボタンをクリックすると、削除完了画面が表示されました。


フローの[完了]ボタンをクリックすると、カスタムアクションはフローの戻り値が設定できないため、削除されたレコード画面のままです。


ごみ箱に削除されたレコードがあります。


フロー自体は同じですが、フローの起動の違いを紹介するため、削除したToDoレコードを復元して、カスタムボタンの検証もしてみます。
次はカスタムボタンの[カスタム削除B]をクリックすると、タブ全体でフローの削除可能画面が表示され削除ができました。


フローの[完了]ボタンをクリックすると、戻り値に設定したToDoのホーム画面に戻りました。


次は、先ほど削除したToDoレコードをまた復元して、割り当て先でも、作成者でもないユーザ「社員のジジ」さんで検証します。
[カスタム削除A]ボタンをクリックすると、フローの分岐で削除不可の画面が表示されました。


最後に、商談フェーズが「01-商談の見極め」の場合のみレコードを削除できるボタンを検証します。
フェーズが「02-ニーズの把握」の商談の[カスタム削除]ボタンをクリックすると、削除不可の画面が表示されました。


フェーズを「01-商談の見極め」に変更して、[カスタム削除]ボタンをクリックすると削除可能の画面が表示され、削除ができました。


ただ、プロファイルで商談の削除権限を外しているので、削除したユーザが「ごみ箱」を確認しても削除したレコードを確認することはできません。
システム管理者など「組織のごみ箱」にアクセスできるユーザは確認することができます。
そのため、フローの削除後のメッセージ画面などに復元について記載したほうが良いかもしれません。


おわり

gilde tech(for Salesforce)」に入会しませんか?
登録すると、「gilde tech」に掲載されているSalesforceのノウハウを全部閲覧できるだけでなく、自分が知っている知識を発信し、他の会員と交流することもできます。
またSalesforceの知識習得に役立つイベント情報も得ることができます。
是非ここで得た知識を業務に活かしてください!
59
コメント