dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[Salesforce]リストビューに「一括削除」ボタンを追加する

ちょいメモ。
タイトルの通り、Salesforce のリストビューで選択したレコードを一括削除するボタンがほしい。

f:id:dackdive:20150511102413p:plain

(リストビューとはこの画面)

実は以前にも似たようなことを試していて、

この時はリストビューではなく、レコード詳細画面にある関連リスト。
基本的に同じようなコードで OK だけど、今回は

  • 削除前に確認ダイアログを表示したい
  • 確認ダイアログでレコード名を表示したい

とか考えてると思ったよりややこしくなった。。。

以下、例としてリードのリストビューにボタンを実装する場合。

カスタムボタンの作成

コードはカスタムボタンとして設置する。

カスタマイズ > リード > ボタン、リンク、およびアクション > 新規ボタンまたはリンク

表示の種類、動作、内容のソースを以下のように。

f:id:dackdive:20150511103137p:plain

参考:http://dackdive.hateblo.jp/entry/2014/04/26/015934

コード

カスタムボタンの作成画面の下部に以下のコードを貼り付け。

補足

削除は sforce.connection.deleteIds に Id (の配列)を渡せばよく、
また、選択したレコードの Id だけなら {!GETRECORDIDS($ObjectType.Lead)} で取れるので、

{!REQUIRESCRIPT('/soap/ajax/33.0/connection.js')};

var ids = {!GETRECORDIDS($ObjectType.Lead)};

sforce.connection.deleteIds(ids); 
window.location.reload(); 

だけでいい。

が、確認ダイアログにリード名(Name フィールド)を出したいとなると
sforce.connection.query で一度レコードを取得する必要があり、なかなか面倒なことに。

リストビューにボタンを追加

作成したボタンは自分でレイアウトに追加しないと表示されない。

カスタマイズ > リード > 検索レイアウト > リード リストビュー

から。

f:id:dackdive:20150508192443p:plain

動作

レコード左側のチェックボックスで削除したいレコードを選択し、

f:id:dackdive:20150511103632p:plain

「一括削除」ボタンを押すと確認のアラートが表示される。

f:id:dackdive:20150511103655p:plain

そのまま「OK」で無事削除されました。

f:id:dackdive:20150511103739p:plain

リファレンス

Javascript GETRECORDIDS on Contract to Return Account Ids - Salesforce Developer Community