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

カスタムオブジェクトおよびパッケージでの動的参照の使用

パッケージ開発者は動的 Visualforce バインドを使用して、ユーザがアクセスできる項目のみをリストできます。これが必要になるのは、オブジェクトの項目を表示する Visualforce ページを含む管理パッケージを開発する場合などです。パッケージ開発者は登録者がアクセスできる項目がわからないため、動的ページを定義して登録者ごとに表示を変えることができます。次の例は、Visualforce ページを使用するページレイアウトと一緒にパッケージされたカスタムオブジェクトを使用して、異なる登録ユーザに同じページを表示する方法を示します。

  1. Book という名前で次の項目とデータ型を持つカスタムオブジェクトを作成します。
    • Title: Text(255)
    • Author: Text(255)
    • ISBN: Text(13)
    • Price: Currency(4, 2)
    • Publisher: Text(255)
    デフォルトでは、新規カスタムオブジェクトを作成すると、そのオブジェクトのレイアウトが作成されます。このレイアウトを Book Layout と呼びます。
  2. レイアウトを変更し、上記のカスタム項目が表示されて、作成者、最終更新者、所有者、名前などの標準項目が削除されるようにします。
  3. 新規カスタムオブジェクトタブを作成します。オブジェクトを Book に、タブスタイルを Books に設定します。
  4. [Book] タブに切り替えて、Book オブジェクトをいくつか作成します。このチュートリアルでは、項目内のデータは実際には関係ありません。
  5. 次のコードで bookExtension という名前のコントローラ拡張を作成します。
    1public with sharing class bookExtension {
    2    private ApexPages.StandardController controller;
    3
    4    private Set<String> bookFields = new Set<String>();
    5    
    6    public bookExtension (ApexPages.StandardController controller) {
    7        this.controller = controller;
    8        Map<String, Schema.SobjectField> fields = 
    9        Schema.SobjectType.Book__c.fields.getMap();
    10
    11        for (String s : fields.keySet()) {
    12        // Only include accessible fields 
    13            if (fields.get(s).getDescribe().isAccessible() && 
    14                fields.get(s).getDescribe().isCustom()) {
    15                    bookFields.add(s);
    16            }
    17        }
    18    }
    19    
    20    public  List<String> availableFields {
    21        get {
    22            controller.reset(); 
    23            controller.addFields(new List<String>(bookFields));
    24                return new List<String>(bookFields);
    25        }
    26    }
    27}
  6. このコントローラ拡張を使用して Book オブジェクトの値を表示する、booksView という名前の Visualforce ページを作成します。
    1<apex:page standardController="Book__c" extensions="bookExtension" > 
    2
    3    <br/>
    4    <apex:pageBlock title="{!Book__c.Name}">
    5        <apex:repeat value="{!availableFields}" var="field">
    6
    7            <h2><apex:outputText 
    8                 value="{!$ObjectType['Book__c'].Fields[field].Label}"/></h2>
    9            <br/>
    10            <apex:outputText value="{!Book__c[field]}" /><br/><br/>
    11
    12        </apex:repeat>
    13    </apex:pageBlock>
    14
    15</apex:page>
  7. コントローラ拡張はパッケージ化されるため、Apex クラスのテストを作成する必要があります。手始めに次の基本的なコードで bookExtensionTest という名前の Apex クラスを作成します。
    1public with sharing class bookExtension {
    2
    3    private ApexPages.StandardController controller;
    4    private Set<String> bookFields = new Set<String>();
    5    
    6    public bookExtension (ApexPages.StandardController controller) {
    7        this.controller = controller;
    8        Map<String, Schema.SobjectField> fields = 
    9            Schema.SobjectType.Book__c.fields.getMap();
    10
    11        for (String s : fields.keySet()) {
    12            // Only include accessible fields 
    13            if (fields.get(s).getDescribe().isAccessible() && 
    14                fields.get(s).getDescribe().isCustom()) {
    15                    bookFields.add(s);
    16            }
    17        }
    18        controller.addFields(new List<String>(bookFields));
    19    }
    20    
    21    public  List<String> availableFields {
    22        get {
    23            controller.reset(); 
    24            controller.addFields(new List<String>(bookFields));
    25            return new List<String>(bookFields);
    26        }
    27    }
    28}

    この Apex テストは、あくまでもサンプルです。パッケージに含めるテストを作成する場合は、肯定的な結果と否定的な結果を含む、すべての動作を検証してください。

    メモ

  8. bookBundle という名前のパッケージを作成し、カスタムオブジェクト、Visualforce ページ、bookExtensionTest Apex クラスを追加します。その他の参照される要素は自動的に含められます。
  9. bookBundle パッケージを登録者組織にインストールします。
  10. パッケージがインストールされたら、Book のオブジェクト管理設定から、Rating という名前の新しい項目を追加します。
  11. 新規 Book オブジェクトを作成します。ここでも、レコードの値は実際には関係ありません。
  12. URL にパッケージ名前空間とブック ID を追加したものを使用して、booksView ページに移動します。たとえば、GBOOK が名前空間で、a00D0000008e7t4 がブック ID の場合、最終的な URL は https://Salesforce_instance/apex/GBOOK__booksView?id=001D000000CDt53 になります。

登録者組織からページが表示されると、ページにはパッケージ化された Book 項目のすべてと、新しく作成された Rating 項目が含まれます。異なるユーザおよび組織は引き続き必要な項目を追加でき、動的 Visualforce ページは、適宜調整されて表示されます。