動的 Visualforce バインド
動的 Visualforce バインドとは、レコードに関する情報を表示する際に必ずしも表示する項目を指定しない汎用的な Visualforce ページを記述する方法です。つまり、ページ上の項目はコンパイル時ではなく実行時に決定されます。これにより、開発者は 1 ページだけ設計して、さまざまな利用者に対し、権限や設定に応じて異なる表示にすることができます。動的バインドは、わずかなコーディングで登録者ごとに固有のデータを表示できるため、管理パッケージに含まれる Visualforce ページで使用すると便利です。
動的 Visualforce バインドは、標準オブジェクトとカスタムオブジェクトでサポートされます。動的バインドは、一般的に次のフォームを取ります。
構成要素について説明します。
- reference は、sObject、Apex クラス、グローバル変数のいずれかに評価されます。
- expression は、項目名または関連オブジェクト名である文字列に評価されます。関連オブジェクトが返されると、項目または追加の関連オブジェクトを再帰的に選択するのに使用できます。
動的バインドは、数式が有効な場所であればどこででも使用できます。次のようなページで使用します。
必要に応じて、fieldname を動的式全体の最後に追加できます。動的式が sObject に解決されると、fieldname はそのオブジェクトの特定の項目を参照します。reference が Apex クラスの場合、項目は public または global である必要があります。次に例を示します。
動的 Visualforce ページは、ページ上のオブジェクトに標準コントローラを使用し、追加のカスタマイズはコントローラ拡張で実装するように設計する必要があります。
Apex Schema.SobjectType メソッドを使用して動的参照、特に、オブジェクトの項目にアクセスする動的参照の情報を取得できます。たとえば、Schema.SobjectType.Account.fields.getMap() は、Account 項目の名前のマップを、Apex コントローラと拡張が認識できる形式で返します。
リレーションの定義
reference と expression は両方とも、評価結果がオブジェクトリレーションになるような複合式にすることができます。たとえば、Object1__c というオブジェクトに別のオブジェクト Object2__c へのリレーションがあるとします。2 つのオブジェクト間のリレーションの名前は、Relationship__r となります。
Object2__c に myField という項目がある場合、次の動的キャストルックアップはすべて同じ項目への参照を返します。
- Object1__c.Object2__c['myField']
- Object1__c['Object2__c.myField']
- Object1__c['Object2__c']['myField']
- Object1__c.Relationship__r[myField]
- Object1__c[Relationship__r.myField]
- Object1__c[Relationship__r][myField]