リストビューで一括更新するボタンをほぼノンプログラミングで作る【Salesforce】
リストビューにカスタムボタンを追加して、チェックボックスを付けたレコードの一括更新をしたいという要望に対応しました。
これまでこのような課題に対応するにはjavascriptでのコーディングが必要と考えられてきました。
リストビュー内カスタムボタンによるレコードの一括更新
https://developer.salesforce.com/forums/?id=906F0000000D7JPIA0
これをVisualWork Flowでどうにか実現したい!ということで色々頭をひねった結果が次のとおりです。
今回はケースにある3項目をボタン一つでまとめて更新します。
まずループを設定します。いつものことですが、ループ対象はSオブジェクトコレクション変数、ループ変数はSオブジェクト変数です。
ループ対象にはSオブジェクトコレクション変数を設定します。入力/出力種別は入力のみに設定します。
Sオブジェクト変数も合わせて設定します。こちらは非公開で大丈夫です。
ループの次は割り当てです。変数の設定がポイントです。
変数は先ほど作成したSオブジェクト変数から変更させたい項目を選ぶのです。今回の場合このあと高速更新を行うのですが、このときにはSオブジェクト変数で該当の項目に値を割り当てます。
また、先ほどの割り当てですが、変数を指定して、外部の値を取り込むことも可能です(上記の画像であれば{!User})。
割り当ての次にもう一つ割り当てを設定します。割り当て2と仮に呼びます。ここで変数には新しくSオブジェクトコレクション変数を作ります。値には既に作成したSオブジェクト変数を設定します。
作成するSオブジェクトコレクション変数は非公開のもので大丈夫です。
次に高速更新を設定します。変数には割り当て2で新規作成したSオブジェクトコレクション変数を設定します。
以上、作ったものをつないでいきます。ループをスタートとしてループ→割り当て1→割り当て2→ループとして、ループの終了を高速更新につなげます。これでフローは完成です。
次にVisualforceの設定をします。
こんなコードです。
-----------------------------------
<apex:page standardController="Case" recordSetVar="Cases">
<flow:interview name="ListUpdateCase"
finishLocation="{!URLFOR('/500?')}">
<apex:param name="SOCCase1" value="{!Selected}"/>
<apex:param name="User" value="{!$User.Id}"/>
</flow:interview>
</apex:page>
-----------------------------------
順に説明します。
standardController="Case"
ここの赤字は対象のオブジェクトを設定します。
recordSetVar="Cases"
というrecordSetVarというところがあるのですが、
ここは何か任意の文字列を入れていればいいようです。
<flow:interview name="ListUpdateCase"
finishLocation="{!URLFOR('/500?')}">
紫色のところにフロー名を、水色のところに完了後にランディングさせたいページリンクを入れます。通常、元のリストビューに戻って欲しいので、リストビューのURLを入れると思います。
<apex:param name="SOCCase1" value="{!Selected}"/>
<apex:param name="User" value="{!$User.Id}"/>
緑色にフローの変数を、茶色のvalueに値を入れます。フロー作成時にSオブジェクトコレクション変数を入力のみに設定しましたが、これには{!Selected}を割り当てます。これはリストビューでチェックされたレコードのIDを持ってきてくれるようです。
また、操作ユーザのIDは{!$User.Id}で持ってきます。
これでVisualforceは完了です。
次にカスタムボタンの設定です。
該当オブジェクトのボタン、リンク、及びアクションで新規ボタンまたはリンクをクリックします。表示の種類をリストボタンにして、チェックボックスの表示にもチェックを入れます。動作は「現在のウィンドウにサイドバー及びヘッダーなしで表示」を選び、内容のソースはVisualforceページにして、先ほど作ったVisualforceページを選択します。
次で最後です。検索レイアウトからボタンをリストビューに表示させます。検索レイアウトを開いて、リストビューで編集を押します。
カスタムボタン欄に先ほど作ったものがあるので、それを選択します。以上で完了です。
動作確認です。リストビューでレコードを選び、ボタンを押してみます。
無事更新されました。
削除版も作りました。