リストコントローラーによるデータへのアクセス
式の構文によるレコードへのアクセス
1<apex:page standardController="Account" recordSetVar="accounts" tabstyle="account" sidebar="false">
2 <apex:pageBlock>
3 <apex:pageBlockTable value="{!accounts}" var="acc">
4 <apex:column value="{!acc.name}"/>
5 </apex:pageBlockTable>
6 </apex:pageBlock>
7</apex:page><apex:pageBlockTable> はリストの各レコードを acc 変数に割り当てます。次に、<apex:pageBlockTable> は、<apex:column> コンポーネントで定義されている行を使用して、テーブルに新しい行を作成します。<apex:column> コンポーネントは、現在のレコードを表す acc 変数を使用して、そのレコードの項目値を取得します。
これ��よって作成されたページには、組織のすべての取引先名のリストが表示されます。
標準リストコントローラーを使用する場合、返されるレコードは、現在のビューの定義に従って最初のデータ列を基準に自動的に並び替えられます。拡張またはカスタムリストコントローラーを使用する場合、並び替えメソッドを制御できます。
Lightning Platform API でのクエリと同様に、式言語の構文を使用して関連するレコードからデータを取得できます。標準コントローラーと同様に、子-親リレーションは最大 5 レベルまで、親-子リレーションは 1 レベルをトラバースできます。
ID によるレコードへのアクセス
一般的なページ操作では、ページに移動する前にユーザーがリストビューからレコードを選択し、それらのレコードが Visualforce によってコントローラーに��信されます。選択したレコードを直接コントローラーに設定することで、レコードを手動で指定することもできます。
標準リストコントローラーは、StandardSetController Apex クラスに基づいています。Apex コントローラーからレコードのリストを設定するには、メソッド ApexPages.StandardSetController.setSelected() を使用します。
次にいくつかコードを見てみましょう。この例では、前の例のマークアップを使用して取引先名をテーブルに表示します。次に、特定のレコードを表示するように要求するために、カスタム Apex コードを組み込みます。
1<apex:page standardController="Account" recordSetVar="accounts" extensions="MyControllerExtension">
2 <apex:pageBlock >
3 <apex:pageBlockTable value="{!accounts}" var="acc">
4 <apex:column value="{!acc.name}"/>
5 </apex:pageBlockTable>
6 </apex:pageBlock>
7</apex:page>
8
9public with sharing class MyControllerExtension {
10 private ApexPages.StandardSetController setController;
11
12 public MyControllerExtension(ApexPages.StandardSetController setController) {
13 this.setController = setController;
14
15 Account [] records = [SELECT Id, Name FROM Account LIMIT 30];
16 setController.setSelected(records);
17 }
18}標準リストコントローラーは、StandardSetController Apex クラスに基づいています。リストコントローラーに割り当てられているレコードのリストを取得するには、メソッド ApexPages.StandardSetController.setSelected() を使用します。
MyControllerExtension のコンストラクターで、ID と名前を Account オブジェクトから選択し、最初の 30 個の結果に制限する SOQL リクエストを実行します。次に setController.setSelected(records) を定義して、レコードがページ読み込み時に選択されるようにします。
レコード ID のリストを複数のクエリパラメーターとして URL に含めることで、URL に渡すこともできます。たとえば、3 つの取引先 ID を持つ URL は /apex/pageName?ids=001xx00account1&ids=001xx00account2&ids=001xx00account3 のようになります。
ブラウザーによっては、URL の長さに厳格な制限があります。URL の ID が多すぎると、長さの制限に達する可能性が高くなり、この場合ページが正しく動作しなくなります。URL 文字列に ID を手動で含める代わりに、選択したレコードをコントローラーに設定することをお勧めします。