【Apex】コントローラ拡張の使い方

スポンサーリンク
コントローラ拡張の使い方 Apex

こんにちは、にいるです。

今回は、Apexの「コントローラ拡張の使い方」について、書いてみたいと思います。

【ヘルプ】カスタムコントローラおよびコントローラ拡張

1.コントローラ拡張とは

言いにくいですが、正式名称はコントローラ拡張みたいですね。
拡張コントローラの方が他のコントローラの名前とも整合性が取れていいと思うんです笑

コントローラ拡張について、カスタムアクションを作成する機能の為、Apexクラスを書かないといけません。
標準コントローラと標準リストはVisualforceページだけでした。

なので、テストクラスも作成する必要が出てきます。

各コントローラの相違点をまとめてみました。

相違点 標準 標準リスト 拡張 カスタム
Apexクラスの作成 不要 不要 必須 必須
テストクラス 不要 不要 必須 必須
新しいアクションの追加 できない できない できる できる
アクションの上書き できない できない できる できる
デフォルトの実行モード ユーザ ユーザ システム システム

実行モードについては、項目レベルセキュリティを考慮する場合、with sharingを使用する必要があります。
アクションの上書きや作成もできるので、カスタムアクションを作成するにはとても便利なコントローラだと思います。

2.コントローラ拡張の使い方

実際に、コントローラ拡張を書いていきます。
今回は標準コントローラを拡張する内容にします。

①レコードIDを取得するためにStandardControllerをメソッドを使用しています。
②カスタムアクションを作成しています。
③標準コントローラを拡張するためにextensions属性で「myControllerExtension」を使用すると宣言しています。
④コントローラ拡張にはSaveメソッドを定義していないので、ここで呼び出されるSaveメソッドは標準コントローラを使用します。

■デバッグ結果
画面はこんな感じです。

動きとしてはページを読み込んだときに、Apexクラス「myControllerExtension」も実行されています。
そして、クラス内のメソッド「getGreeting()」によって、{!greeting}にも値がバインドされていて、画面に取得したデータが返ってきています。
 
コントローラ拡張の使い方
 

このSaveボタンは標準機能です。
ApexではSaveメソッドを作成していないため、上書けるものがありません。

そのため、これをクリックすると標準のレコード保存処理が実行されます。
何を保存するかについては、画面に表示されているinputFieldのvalue属性で判断できます。

ここでは取引先名を指定しているので、ここに入力された値が取引先名に変更されます。
 
コントローラ拡張の使い方
 

3.コントローラ拡張の複数使用

1つのページにコントローラ拡張を複数指定する場合は、最初に記載されたコントローラを優先して呼び出します。

例えば、下記のようにPage属性を宣言します。

そして、各コントローラには下記のようにメソッドが用意されているとします。

アクション 標準 ex1 ex2
保存 ある ある ある
編集 ある ない ある
削除 ある ない ない

 
コントローラ拡張
 

この場合、このVisualforceページで実行される各メソッドは、それぞれ

・保存 → ex1
・編集 → ex2
・削除 → 標準

になります。

ex1を優先してそこにメソッドが定義されていれば使用する、なければ次のコントローラ拡張の中身を確認する、それでもなければ標準機能を使用するといったロジックになっています。

4.まとめ

いかがでしたでしょうか。

コントローラ拡張は標準コントローラ、標準リストコントローラとは全然違う機能です。

シンプルにアクションを拡張する機能として覚えておくといいと思います。

カスタムコントローラまでではないけど、ちょっとしたカスタムアクションを定義したいときに、使用したい機能ですね。

皆さんもぜひ色々と試してみてください。
他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。

ではでは!

Salesforce 機能別 まとめページ

コメント

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