標準コントローラ、カスタムコントローラ、コントローラ拡張について、
- 特徴
- それぞれを使うべき場面
に絞ってまとめました。
具体的な書き方やコードについては触れていないので、その辺りの情報は公式ドキュメントを参照して下さい。
ページとコントローラの関係
1つのページに、1つのメインコントローラ
Visualforceページを作成する場合、メインコントローラが必要です。
メインコントローラは以下の3つの中から1つを選びます。
- 標準コントローラ
- 標準リストコントローラ
- カスタムコントローラ
標準リストコントローラはレコードのリストを表示する際などに使いますが、この記事では説明を割愛します。
コントローラ拡張の追加
メインコントローラの機能だけでは不十分な場合、コントローラ拡張を追加します。コントローラ拡張は複数追加することができます。
以下はVisualforceページのコントローラ定義の例です。メインコントローラに標準コントローラ(取引先)を使用し、さらにExtension1, Extension2(それぞれクラスとして定義) という2つのコントローラ拡張を使用しています。
<apex:page standardController="Account" extensions="Extension1, Extension2">
...
</apex:page>
コントローラ拡張はメインコントローラではないという点で他と異なることが分かりました。次に、標準コントローラとカスタムコントローラの違いを見ていきます。
標準コントローラとカスタムコントローラの比較
それぞれのコントローラのメリット・デメリットを挙げて特徴を比較します。
標準コントローラのメリット
- 新しくクラスを作成する必要がない
標準コントローラを使えば、新たにクラスを作成しなくても、レコードの保存・編集・削除などの標準機能を使うことができます。
標準コントローラのデメリット
- 標準機能以上のことはできない
- 2レベル下位のオブジェクトにアクセスできない
標準コントローラを使って標準機能以上のことをしたい場合には、コントローラ拡張を追加します。
また、標準コントローラでは2レベル下位(孫)のオブジェクトにアクセスできません。これらの情報をページに表示したい場合にも、コントローラ拡張が必要になります。
カスタムコントローラのメリット
- 標準コントローラでできない機能を持たせることができる
カスタムコントローラを使えば、必要なロジックを自由に実装することができます。
カスタムコントローラのデメリット
以下の場合には、標準コントローラを使ったVisualforceページしか使えないので注意が必要です。
- 標準ボタンの遷移先
- ページレイアウトにVisualforceページを含める
1つ目は、標準ボタンの遷移先です。標準ボタンとは、「新規」や「編集」などレコード作成ページへ飛ぶためにデフォルトで設置されているボタンです。
2つ目は、作成したVisualforceページを、ページレイアウトに含める場合です。
まとめ
以下のような場合は標準コントローラを使うべき
- 画面側だけ作ってロジックは標準機能で良い
- ページを標準ボタンの遷移先に使う
- ページレイアウトに含めるためのVisualforceページを作成する
以下のような場合はカスタムコントローラを使う、または標準コントローラをコントローラ拡張する
- 標準機能にないロジックを実装する
- 2レベル下位のオブジェクトにアクセスする
カスタムコントローラとコントローラ拡張の比較
カスタムコントローラとコントローラ拡張は、標準コントローラにないロジックを実装できるという点では同じです。
しかし、カスタムコントローラはシステムモード、標準コントローラ+コントローラ拡張はユーザモードで実行されるという点は注意が必要です。
- システムモード:現在のユーザの権限と項目レベルのセキュリティが適用されない
- ユーザモード:現在のユーザの権限、項目レベルのセキュリティ、および共有ルールが適用される
したがって、ページをどちらのモードで実行したいかによってカスタムコントローラとコントローラ拡張を使い分けるべきです。
コメント