Yo Blog

カメラとドライブが趣味のSEが書く雑記ブログ

【Salesforce 認定 Platform デベロッパー対策 #05】Visualforceコントローラ

スポンサーリンク

今回は、「Visualforceコントローラ」について。

標準コントローラ

developer.salesforce.com

  • 標準オブジェクトやカスタムオブジェクトに対して、APIで問い合わせができる
  • Visualforceとの関連づけ
    • <apex:page standardController="OBJECT">
  • 標準コントローラを使用する場合、カスタムコントローラは使用できない
  • URL上にidクエリ文字列パラメータを指定することでデータバインディングする(Getterメソッド)
  • 子から親への参照も可能(5レベルまで)
    • 例えば、取引先名を表示したい時:{!Contact.Account.Name}
  • アクションメソッド
    • 主なタグ
      • <apex:commandButton> : アクションをコールするボタンを作成する
      • <apex:actionFunction> : アクションをコールする新しい JavaScript 関数を定義する
    • 主なアクションメソッド
      • save() : 新規レコード追加・更新し、操作完了後は元のページに踊るか保存したレコードの詳細ページに遷移
      • edit() : レコード編集ページに遷移し、操作完了後は呼び出したページに遷移する

developer.salesforce.com

標準リストコントローラ

developer.salesforce.com

  • 標準コントローラが一度に1レコードを操作するのに対し、一度に多数のレコードを操作することができる
  • ページリスト、関連リスト、活動のページなどを作成できる
  • Visualforceとの関連づけ
    • rencordSetVar属性
    • <apex:page standardController="Account" recordSetVar="accounts">
  • アクションメソッド
    • 標準コントローラで提供されているアクションに加えて、「first, last, next, previous」が追加されている

カスタムコントローラ

developer.salesforce.com

  • カスタムアクション作成やコールアウトなど、標準コントローラで提供されていない機能を使いたい場合は、カスタムコントローラをコーディングする必要がある
  • Visualforceとの関連づけ
    • <apex:page controller="MyController">
  • コントローラメソッド

    • actionメソッド:ロジックやナビゲーションを実行する
      • <apex:commandButton>
      • <apex:commandLink>
      • <apex:actionPoller>
      • <apex:actionSupport>
      • <apex:actionFunction>
    • getterメソッド : コントローラの値を検索し、返却する
    • setterメソッド:ページからコントローラにデータを渡す

    developer.salesforce.com

  • 実行順序

    1. コンストラク
    2. アクションメソッドの前にSetterメソッドが呼ばれる
    3. Setterメソッド以外の実行順序は保証されていない

拡張コントローラ

developer.salesforce.com

仕事では、拡張コントローラって言ってますが、Visualforce開発者ガイドでは、「コントローラ拡張」って書いてありますね。

  • 標準コントローラおよびカスタムコントローラの機能を拡張するApexクラス
  • 複数の拡張コントローラを利用する場合、一番最初のものでオーバーライドされる
    • <apex:page controller="MyController" extensions="MyExtension, MyOtherExtension">の場合
      • MyExtension → MyOtherExtension → MyControllerの順でアクションメソッドを検索
      • 「MyExtension」のアクションメソッドでオーバーライドされていく
      • オーバーライドされない場合は、「MyController」クラスのメソッドがそのまま呼び出される