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

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

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

リストコントローラは、2 つのレコードセットを追跡します。1 つは、条件検索で選択されたすべてのレコードが含まれるプライマリリストで、もう 1 つはユーザが選択したレコードが含まれるセカンダリリストです。セカンダリリストは通常、ユーザがチェックボックスをオンにしてレコードを選択できる、標準リストビューページで設定されます。設定後、ユーザはカスタムリストボタンをクリックしてカスタム一括更新ページに移動できます。カスタム一括更新ページでは、プロトタイプオブジェクトが使用されて新しい項目値がユーザの選択したレコードに適用されます。プロトタイプオブジェクトは、ユーザが選択したすべてのレコードを操作します。カスタムコントローラでプロトタイプオブジェクトを取得するには、StandardSetController の getRecord メソッドを使用します。たとえば、Opportunities の一括更新を有効にするには、その関連付けられたオブジェクトの単数形 (Opportunity) を使用して、選択したすべてのレコードの項目値を設定します。

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

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

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

メモ