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

Visualforce ページでのカスタム Apex コントローラの使用

これで、すべての商品レコードを表示する Visualforce ページが完成しました。前のチュートリアルではデフォルトのコントローラを使用しましたが、今度は自分でコントローラコードを記述します。コントローラは通常、Visualforce ページに表示するデータを取得します。また、コマンドボタンがクリックされるなどのページアクションに応答して実行されるコードが含まれます。

このレッスンでは、標準コントローラを使用するのではなく独自のカスタム Apex コントローラを使用するようにページを変更します。Apex を使用するコントローラを記述すると、標準コントローラで提供される基本的な動作以外のことも実行できます。次のレッスンでは、このコントローラを拡張し、E コマース機能を追加してリストをオンラインストアに変更します。

新しいコントローラクラスを作成する手順は、次のとおりです。

  1. [設定] で、[開発] | [Apex クラス] をクリックします。
  2. [新規] をクリックします。
  3. クラスの定義として次のコードを追加し、[Quick Save (適用)] をクリックします。
    1swfobject.registerObject("clippy.codeblock-0", "9");
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17public class StoreFrontController {
    18
    19
    20
    21    List<Merchandise__c> products;
    22
    23    
    24
    25    public List<Merchandise__c> getProducts() {
    26
    27        if(products == null) {
    28
    29           products = [SELECT Id, Name, Condition__c, Price__c FROM Merchandise__c];
    30
    31        }
    32
    33        return products;
    34
    35    }
    36
    37}
  4. https://<your-instance>.salesforce.com/apex/Catalog にある商品カタログページに戻り、ページエディタがまだ開いていない場合は開きます。
  5. <apex:page> 開始タグを変更して、ページを新しいコントローラクラスにリンクします。
    1<apex:page controller="StoreFrontController">
    属性名が standardController から controller に変更されたことに注目してください。recordSetVar 属性は標準コントローラでのみ使用されるため、削除します。
  6. [保存] をクリックして変更を保存し、ページを再読み込みします。
    唯一の変化は [Merchandise] タブが選択されなくなる点です。
  7. 次のコードを追加して、アプリケーションタブスタイルを Merchandise に再度設定します。
    1<apex:page controller="StoreFrontController" tabStyle="Merchandise__c">
  8. ページエディタのツールバーの上に、[StoreFrontController] ボタンが表示されています。このボタンをクリックして、ページのコントローラコードを表示し、編集します。[Catalog (カタログ)] をクリックして Visualforce ページのコードに戻ります。
    Visualforce ページエディタのツールバーこれは次のレッスンで使用します。

もうひとこと...

  • 前のレッスンと同様に、pageBlockTable の値属性は {!products} に設定され、テーブルコンポーネントが products というリストを反復処理することを示します。カスタムコントローラを使用しているので、Visualforce は、{!products} 式を評価するとき、Apex コントローラ内でメソッド getProducts() を自動的に検出します。
  • StoreFrontController クラスは、Visualforce カタログページで必要なデータを提供するために最小限必要な処理しか行いません。このクラスには 1 つのメソッド getProducts() が含まれ、データベースをクエリして Merchandise__c レコードのリストを返します。
  • 公開インスタンス変数 (products) と getter メソッド (getProducts()) を組み合わせて初期化を行い、アクセスを可能にするのは、Apex で記述された Visualforce コントローラの一般的なパターンです。