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

項目セットの使用

動的バインドを使用して Visualforce ページに項目セットを表示することができます。項目セットとは、項目をグループ化したものです。たとえば、ユーザの名、ミドルネーム、姓、肩書を示す項目を 1 つの項目セットにして持つことができます。そのページを管理パッケージに追加すると、システム管理者は項目セット内の項目の追加、削除、並び替えを行って、コードを変更せずに Visualforce ページ上に表示する項目を変更できます。項目セットは、API バージョン 21.0 以降の Visualforce ページに使用できます。1 ページで最大 50 個の項目セットを参照できます。

Visualforce での項目セットの使用

項目セットを Visualforce で直接参照するには、$ObjectType グローバル変数をキーワード FieldSets と組み合わせます。たとえば、Contact オブジェクトに 3 つの項目を表示する properNames という項目セットがある場合、Visualforce ページは次の反復によって項目データを参照できます。
1<apex:page standardController="Contact">
2    <apex:repeat value="{!$ObjectType.Contact.FieldSets.properNames}" var="f"> 
3        <apex:outputText value="{!Contact[f]}" /><br/>
4    </apex:repeat>
5</apex:page>
次の項目セット内の項目の特殊なプロパティを使用して、項目の表示ラベルやデータ型など、追加情報を表示するように選択することもできます。
プロパティ名 説明
DBRequired オブジェクトでその項目が必須かどうか
FieldPath 項目の範囲情報のリスト
Label 項目の UI 表示ラベル
Required 項目セットでその項目が必須かどうか
Type 項目のデータ型
たとえば、properNames の項目の表示ラベルとデータ型には次のようにアクセスできます。
1<apex:page standardController="Contact">
2    <apex:pageBlock title="Fields in Proper Names">
3        <apex:pageBlockTable value="{!$ObjectType.Contact.FieldSets.properNames}" var="f">
4            <apex:column value="{!f}">
5                <apex:facet name="header">Name</apex:facet>
6            </apex:column> 
7            <apex:column value="{!f.Label}">
8                <apex:facet name="header">Label</apex:facet>
9            </apex:column> 
10            <apex:column value="{!f.Type}" >
11                <apex:facet name="header">Data Type</apex:facet>
12            </apex:column> 
13        </apex:pageBlockTable> 
14    </apex:pageBlock> 
15</apex:page>
この Visualforce ページが管理パッケージに追加され、配布された場合、登録者は properNames 項目セットを編集できます。Visualforce ページを生成するロジックは変わりませんが、表示は各登録者の実装に応じて異なります。管理パッケージの項目セットを参照するには、項目セットの先頭に組織の名前空間を追加する必要があります。上記のマークアップを使用すると、properNames が Spectre という組織のものである場合、項目セットは次のように参照されます。
1{!$ObjectType.Contact.FieldSets.Spectre__properNames}

Apex での項目セットの使用

Visualforce ページで標準コントローラを使用するときには、項目セットの項目は自動的に読み込まれます。カスタムコントローラを使用する場合、ページの SOQL クエリに必須項目を追加する必要があります。Apex は、項目セットとそれが含む項目を検出できる、Schema.FieldSetSchema.FieldSetMember の 2 つの Schema オブジェクトを提供します。これら 2 つのシステムクラスについての詳細は、『Force.com Apex コード開発者ガイド』の「FieldSet クラス」を参照してください。

サンプル: Visualforce ページへの項目セットの表示

このサンプルでは、Schema.FieldSet および Schema.FieldSetMember メソッドを使用して、Merchandise カスタムオブジェクトの Dimensions 項目セットに含まれるすべての項目を動的に取得します。取得した項目のリストを使用して、これらの項目を表示に使用できるようにする SOQL クエリを作成します。Visualforce ページは、MerchandiseDetails クラスをコントローラとして使用します。
1public class MerchandiseDetails {
2
3    public Merchandise__c merch { get; set; }
4    
5    public MerchandiseDetails() {
6        this.merch = getMerchandise();
7    }
8
9    public List<Schema.FieldSetMember> getFields() {
10        return SObjectType.Merchandise__c.FieldSets.Dimensions.getFields();
11    }
12
13    private Merchandise__c getMerchandise() {
14        String query = 'SELECT ';
15        for(Schema.FieldSetMember f : this.getFields()) {
16            query += f.getFieldPath() + ', ';
17        }
18        query += 'Id, Name FROM Merchandise__c LIMIT 1';
19        return Database.query(query);
20    }
21}
上記のコントローラを使用する Visualforce ページは単純です。
1<apex:page controller="MerchandiseDetails">
2    <apex:form >
3
4      <apex:pageBlock title="Product Details">
5          <apex:pageBlockSection title="Product">
6              <apex:inputField value="{!merch.Name}"/>
7          </apex:pageBlockSection>
8      
9          <apex:pageBlockSection title="Dimensions">
10              <apex:repeat value="{!fields}" var="f">
11                  <apex:inputField value="{!merch[f.fieldPath]}" 
12                      required="{!OR(f.required, f.dbrequired)}"/>
13              </apex:repeat>
14          </apex:pageBlockSection>
15  
16        </apex:pageBlock>
17
18    </apex:form>  
19</apex:page>
上記のマークアップは、フォーム上の項目を必須項目として示す必要があるかどうかを判定するために使用する数式です。項目セット内の項目は、項目セット定義または項目自体の定義によって必須にすることができます。この数式では両方を処理します。

項目セットの考慮事項

項目セットに追加された項目は、次の 2 つのカテゴリのいずれかに入れることができます。
  • 項目が [項目セットで使用可能] とマークされている場合、項目は項目セット内に存在しますが、開発者はパッケージ化された Visualforce ページ上でそれを表示していません。システム管理者は、その項目を [利用可] 列から [項目セットで] 列に移動することによって、その項目セットをリリースした後、表示できます。
  • 項目が [項目セットで] とマークされている場合、開発者はデフォルトで、パッケージ化された Visualforce ページ上でその項目を表示しています。システム管理者は、項目を [項目セットで] 列から削除して項目セットをリリースした後、ページから項目を削除できます。

開発者が、表示される項目をリストする順序によって、Visualforce ページ上での表示順序が決まります。

パッケージ開発者は、次のベストプラクティスに留意してください。
  • インストール済みの項目セットを持つ登録者は、ページに含めなかった項目を追加できます。項目セットの反復から一部の項目を条件に応じて除外することはできないため、項目セットによって表示される項目がすべてのデータ型で使用できることを確認してください。
  • 項目セットには必須ではない項目のみを追加することをお勧めします。これにより、登録者が項目セットのすべての項目を削除した場合でも、その項目セットを使用する Visualforce は正常に機能します。

項目セットは、API バージョン 21.0 以降の Visualforce ページに使用できます。

メモ