リストビューからレコードを選択して一括削除する方法

前書き

画像のように、リストビューで選択したレコードを一括削除する方法をご紹介します。

注意事項

リストビューへの「削除」ボタンの実装はユーザからの要望が多い機能ですが、「データの信頼」および「ガバナンス」の観点から、多くの場合アンチパターンです。

各企業のシステム管理者およびSalesforceパートナー企業はユーザや顧客から要望があったとしても安易に実装しないでください

リード(見込み顧客)やケース(問い合わせ)のノイズや重複の対処においては、削除ボタンによる物理削除ではなく、“その他問い合わせ"に分類するなどの論理削除を第一に検討してください。

実装方法(概要)

(細かく挙げるとキリがないのですが、フローを軸に検討した場合)大きく以下の3つの実装方針があります。

NameDescription
「Mass Delete」AppExchangeを利用するpros:主要な標準オブジェクトについてはほぼカスタマイズなしで利用できる
cons:コンポーネントの構成要素が無駄に多く、環境がごちゃつく
クイックアクション経由でフローを呼び出すpros:ロジックの作りが簡明
cons1:実装対象のオブジェクトの数に比例して設定が増大する(実装するオブジェクトの数だけ、クイックアクション・カスタム項目・フローをそれぞれ一つずつ作成する必要がある)
cons2:確認画面などのメッセージを表示することができない
カスタムボタン経由でフローを呼び出すpros: クイックアクション経由でフローを呼び出す場合と比べて、 設定が簡素(クイックアクション・フローの作成だけでOK)
cons: 実装対象のオブジェクトの数に比例して設定が増大する(実装するオブジェクトの数だけ、クイックアクション・フローをそれぞれ一つずつ作成する必要がある)
カスタムボタン経由でApexを呼び出すpros: 実装対象のオブジェクトの数が増えても設定を増やさなくてもよい(追加作成はクイックアクションのみ
cons:Apexでの開発が発生

それぞれごく簡単にご紹介していきます。

「Mass Delete」AppExchangeを利用する

Salesforce Labsが提供する「Mass Delete」を利用する

設定方法(標準オブジェクト):「Appexchange Unboxing – Mass Delete by Salesforce Labs」

設定方法(カスタムオブジェクト):「How To Mass Delete Records From List View」

クイックアクション経由でフローを呼び出す

手順①:チェックボックス型のカスタム項目を新規作成する(命名例:"削除用チェックボックス")

手順②:「ボタン、リンク、およびアクション」の「新規アクション」から上記チェックボックスを更新する「レコードを更新」種別のアクションを新規作成する。

手順③:上記チェックボックスの更新をトリガに起動する「自動起動フロー」を作成し、「レコード削除」アクションを呼び出すロジックを作成する。

手順④:手順②で作成した一括クイックアクションを「Salesforce Classicの検索レイアウト」>「リストビュー」からボタンとして追加する。

参考:小坂さんのFlow Recipesの「リストビューからリードを一括削除」

カスタムボタン経由でフローを呼び出す

手順①:「画面フロー」を新規作成し、複数のレコードIDを受け取る"ids"変数と、これをループで回して削除するロジックをそれぞれ作成。

手順②: 「ボタン、リンク、およびアクション」の「新規ボタンまたはリンク」から下記のような"URL"を「内容のソース」とするリストボタンを新規作成する(※URLにはFlowのURLを指定)

手順③:手順②で作成したカスタムボタンを「Salesforce Classicの検索レイアウト」>「リストビュー」からボタンとして追加する。

参考:カスタムボタン経由でApexを呼び出す

「Apex側に選択されたレコードIDの情報を渡してDelete処理を行う」と表現するといかにも簡単そうですが、実際にはどのsObject型にも対応できる汎用的な処理にしようと思うとなかなか大変です。

具体的には下記の仕様やSalesforceの方針がネックとなります。

・フローからInvocableMethodに対してsObject型ではないリストを渡せない。

・カスタムボタンからVisualforce経由でApex処理を行う方針の場合、コントローラーの関係でsObjectに依存しない汎用的な処理にできない。

・カスタムボタンからJavaScript経由で処理を行う方針については、Salesforce公式が現在推奨していない(※参考:https://trailhead.salesforce.com/ja/modules/lex_javascript_button_migration

そのため、本記事ではこの方針の実装方法については考慮外としています。

Salesforce

Posted by regardie