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

複数のレコードの登録

ライブコントローラによって複数のレコードを登録するには、標準のリストコントローラまたは records 属性を持つカスタムコントローラを使用します。

標準リストコントローラ

ライブコントローラは、recordSetVar 属性を持つ標準リストコントローラによって使用されるレコードへの変更を自動的に追跡します。

次の例は、フォームで商談レコードのリストを更新する方法について示しています。商談名または金額が更新されると、ライブコントローラによって Visualforce ページが更新されます。

1<apex:page standardController="Opportunity" recordSetVar="opptys">
2    <apex:liveController reRender="thePageBlock"/>
3    <apex:form >
4        <apex:pageBlock id="thePageBlock">
5            <apex:pageBlockButtons >
6                <apex:commandButton action="{!quicksave}" value="Quick Save"/>
7                <apex:commandButton action="{!previous}" value="Previous"/>
8                <apex:commandButton action="{!next}" value="Next"/>
9            </apex:pageBlockButtons>
10            <apex:pageBlockTable value="{! opptys}" var="o">
11                <apex:column value="{!o.name}"/>
12                <apex:column headerValue="Amount">
13                    <apex:inputField value="{!o.amount}"/>
14                </apex:column>
15            </apex:pageBlockTable>
16        </apex:pageBlock>
17    </apex:form>
18</apex:page>

recordSetVar 属性を設定することは、Visualforce ページで標準リストコントローラを使用することを示します。opptys の値によって、レコードコレクション内の変数名が設定されています。この変数名を使用して、コレクションのデータにアクセスします。

標準リストコントローラの定義の後に、ライブコントローラを追加します。form 要素内に、pageBlock コンポーネントを作成し、リスト内のレコードに実行を繰り返します。pageBlockButtons 子要素には、標準リストコントローラの操作である「Previous」 (前へ) と「Next」 (次へ) のボタンが含まれており、リストの非表示の結果を表示するために使用できます。

<apex:pageBlockTable><apex:repeat> などの繰り返しコンポーネントでは、ライブコントローラを使用しないでください。ライブコントローラは Visualforce ページごとに 1 つだけ使用できます。

メモ

reRender 属性による有効な要素の制御

reRender 属性を使用して、ユー��入力要素が操作にどのように反応するかを制御できます。この構文は reRender="{elementId}" です。ユーザの操作が行われた後、この属性によって割り当てられているコンポーネントのみが更新されます。この属性をライブコントローラと共に使用すると、要素が有効になったときにもデータの更新が一時停止されます。これは、ユーザがフォーム項目にテキストを入力したときと同じです。ライブコントローラを含む Visualforce ページでは、reRender<apex:liveController> のみで使用します。他のコンポーネントでは使用しないでください。

records 属性を持つカスタムコントローラ

カスタムコントローラ内の複数のレコードへの変更を追跡するには、records 属性を使用します。この属性を含めない場合、Visualforce では、標準コントローラによって追跡されているレコードの更新のみが表示されます。他のレコードへの更新はページに読み込まれません。

次の例では、カスタムコントローラ DonationsController の寄付に関連する情報のリストが表示されます。Donation_Site__c オブジェクトに関連付けられたレコードをすべて取得するには、式 {! donationLocations}records 属性に割り当てます。次に、テーブルを保持するフォームを作成します。ここで寄付の場所のリストを反復処理します。各行には名前と住所を表示する 2 つの列があります。

DonationsController クラスでは、getDonationLocations() メソッドによって、寄付の場所のリストが読み込まれます。

1<apex:page controller="DonationsController">
2    <apex:liveController records="{! donationLocations}" />
3    <apex:pageBlock title="All sites">
4        <apex:pageBlockTable value="{! donationLocations}" var="item">
5            <apex:column value="{!item.name}"/>
6            <apex:column value="{!item.Address__c}"/>
7        </apex:pageBlockTable>
8    </apex:pageBlock>
9</apex:page>
1public with sharing class DonationsController {
2
3    public List<Donation_Site__c> getDonationLocations() {
4        List<Donation_Site__c> sites = [SELECT Id, Name, Address__c
5            FROM Donation_Site__c];
6        return sites;
7    }
8}

制限事項

ライブコントローラを使用して複数のレコードの変更を登録すると、レコードが更新されたときにページが更新されます。Visualforce の 1 ページごとに最大 50 のレコードと 5 つのオブジェクトを登録できます。たとえば、1 つのページで取引先、商談、および 3 つのカスタムオブジェクトを登録できます。