この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

カスタムリストコントローラーによるレコードの一括更新

一括更新を実行するページを作成するには、StandardSetController クラスに含まれるプロトタ���プオブジェクトを使用します。

リストコントローラーでは 2 つのレコードセットが追跡されます。1 つは、絞り込まれたレコードが含まれるプライマリリストで、もう 1 つは、絞り込まれたレコードの選択肢が含まれるセカンダリリストです。セカンダリリストは標準リストビューページで確立されます。このページで、ユーザーはチェックボックスをオンにしてレコードを選択します。その後、ユーザーはカスタムリストボタンをクリックしてカスタム一括更新ページに移動します。カスタム一括更新ページでは、プロトタイプオブジェクトを使用して、新しい項目値を、ユーザーが選択したレコードに適用します。プロトタイプオブジェクトは、ユーザーが選択したすべてのレコードで動作します。カスタムコントローラーでプロトタイプオブジェクトを取得するには、StandardSetController の getRecord メソッドを使用します。

たとえば、商談の一括更新を有効にするには、カスタムリストコントローラー拡張で Opportunity 標準コントローラーを使用して、選択したすべてのレコードの項目値を設定します。

  1. massupdatestages という Visualforce ページを作成します。
  2. 次のコントローラーを指定します。
    1public class selectedSizeWorkaround {
    2
    3    ApexPages.StandardSetController setCon;
    4
    5    public selectedSizeWorkaround(ApexPages.StandardSetController controller) {
    6        setCon = controller;
    7    }
    8
    9    public integer getMySelectedSize() {
    10        return setCon.getSelected().size();
    11    }
    12    public integer getMyRecordsSize() {
    13        return setCon.getRecords().size();
    14    }
    15}
  3. 次のマークアップを指定します。
    1<apex:page 
    2    standardController="Opportunity"
    3    recordSetVar="opportunities"
    4    extensions="selectedSizeWorkaround"
    5    showHeader="false"
    6    id="muopp"
    7>
    8    <apex:form id="muform">
    9        <apex:pageMessage 
    10            summary="Selected Collection Size: {!mySelectedSize}" 
    11            severity="info"
    12            id="mupms"
    13        />
    14        <apex:pageMessage
    15            summary="Record Set Size: {!myRecordsSize}"
    16            severity="info"
    17            id="mupmr"
    18        />
    19        <apex:pageBlock title="Opportunity Mass-Update" mode="edit" id="mub1">
    20            <apex:pageMessages />
    21            <apex:pageBlockSection id="mus1">
    22                <apex:inputField value="{!opportunity.stagename}" id="stagename">
    23                    <apex:actionSupport event="onchange" rerender="muselectedlist"/>
    24                </apex:inputField>
    25            </apex:pageBlockSection>
    26            <apex:pageBlockButtons location="bottom" id="mubut">
    27                <apex:commandButton value="Save" action="{!save}" id="butsav"/>
    28                <apex:commandButton value="Cancel" action="{!cancel}" id="butcan"/>
    29            </apex:pageBlockButtons>
    30        </apex:pageBlock>
    31        <apex:pageBlock title="Selected Opportunities" id="muselectedlist">
    32            <apex:pageBlockTable value="{!selected}" var="opp" id="mutab">
    33                <apex:column value="{!opp.name}" id="oppname"/>
    34                <apex:column value="{!opp.stagename}" id="oppstage"/>
    35            </apex:pageBlockTable>
    36        </apex:pageBlock>
    37    </apex:form>
    38</apex:page>
  4. 商談のオブジェクト管理設定から、[ボタン、リンク、およびアクション] に移動します。
  5. [新規ボタンまたはリンク] をクリックします。
  6. [ボタン表示ラベル]「フェーズの一括更新」に設定し、[名前]「MassUpdateStages」に設定します。
  7. [表示の種類]「リストボタン」に設定し、[チェックボックスの表示 (複数レコード選択用)] がオンになっていることを確認します。[動作] を「サイドバーを持つ既存のウィンドウで表示」に設定し、[内容のソース] を「Visualforce ページ」に設定します。作成したページの名前をクリックしてこのボタンに関連付けて、変更内容を保存します。
  8. 商談のオブジェクト管理設定から、[リストビューボタンレイアウト] に移動します。[リストビュー] の横にあるドロップダウンから [編集] を選択します。
  9. [カスタムボタン] の下で、[フェーズの一括更新] ボタンを [選択したボタン] リストに移動します。変更内容を保存します。
  10. [商談] タブをクリックします。変更するいくつかの既存の商談を表示する検索条件を選択するか、作成します。
  11. リストビューの各レコードの横にチェックボックスが表示されています。複数の商談レコードのフェーズを変更するには、目的の各レコードのチェックボックスをオンにして、[フェーズの一括更新] をクリックします。変更内容を保存します。

この例では、1 つの項目を更新する方法を示していますが、プロトタイプオブジェクトの任意の数の項目を参照してユーザーが選択したレコードに適用できます。プロトタイプオブジェクト内の、ユ��ザーが設定しない項目は、選択したレコードに影響を与えません。プロトタイプオブジェクトでは、項目が必須かどうかなど、項目のプロパティが保持されます。たとえば、Opportunity.StageName などの必須項目についてページに入力項目を含めた場合、ユーザーはその項目に値を入力する必要があります。

ユーザーが選択または条件検索したセットのサイズをページが表示または参照するようにしたい場合、必要なのは selectedSizeWorkaround のみです。こうした表示は一括更新で変更されるセットに関する情報をユーザーに提供するため、役立ちます。

メモ