標準コントローラ、カスタムコントローラ、コントローラ拡張の違い【Visualforce】

brown pendant lamp hanging on tree near river Apex
Photo by Rachel Xiao on Pexels.com

標準コントローラ、カスタムコントローラ、コントローラ拡張について、

  • 特徴
  • それぞれを使うべき場面

に絞ってまとめました。

具体的な書き方やコードについては触れていないので、その辺りの情報は公式ドキュメントを参照して下さい。

ページとコントローラの関係

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レベル下位のオブジェクトにアクセスする

カスタムコントローラとコントローラ拡張の比較

カスタムコントローラとコントローラ拡張は、標準コントローラにないロジックを実装できるという点では同じです。

しかし、カスタムコントローラはシステムモード標準コントローラ+コントローラ拡張はユーザモードで実行されるという点は注意が必要です。

  • システムモード:現在のユーザの権限と項目レベルのセキュリティが適用されない
  • ユーザモード:現在のユーザの権限、項目レベルのセキュリティ、および共有ルールが適用される

したがって、ページをどちらのモードで実行したいかによってカスタムコントローラとコントローラ拡張を使い分けるべきです。

コメント

タイトルとURLをコピーしました