こんにちは、にいるです。
今回は、Apexの「カスタムコントローラの使い方」について、書いてみたいと思います。
1.カスタムコントローラとは
カスタムコントローラはページの機能やロジックを全て実装できるコントローラです。
pageタグのcontroller属性でカスタムコントローラ名を指定することでページで使用できます。
1 |
<apex:page controller="ControllerName"> |
カスタムコントローラを使用する場合は、そのプログラムをシステムモードで実行します。
システムモードでの実行は項目レベルセキュリティやユーザ権限を考慮しないので、どのユーザでも実行することが可能になります。
この点を考慮した設計が必要になるので、必要に応じてクラスにwith sharingキーワードを使用することも考えなければいけません。
また、カスタムコントローラはApexクラスを必ず書くので、テストクラスの作成も必要になります。
他の各コントローラの相違点をまとめてみました。
相違点 | 標準 | 標準リスト | 拡張 | カスタム |
Apexクラスの作成 | 不要 | 不要 | 必須 | 必須 |
テストクラス | 不要 | 不要 | 必須 | 必須 |
新しいアクションの追加 | できない | できない | できる | できる |
アクションの上書き | できない | できない | できる | できる |
デフォルトの実行モード | ユーザ | ユーザ | システム | システム |
pageタグの属性 | standardController | standardController | extensions | controller |
他のコントローラと比較して、ポイントを押さえておきたいですね。
2.カスタムコントローラの使い方
実際に、カスタムコントローラを書いていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class CustomController { private final Account account; // ① コンストラクタ public CustomController() { account = [SELECT Id, Name, Phone, Type FROM Account WHERE Id = :ApexPages.currentPage().getParameters().get('id')]; } // ② 取引先レコードを取得 public Account getAccount() { return account; } // ③ 保存メソッド public PageReference save() { update account; return null; } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
<!-- ④controller属性で呼び出すカスタムコントローラを指定しています。 --> <apex:page controller="CustomController" tabStyle="Account"> <apex:form> <apex:pageBlock title="取引先名セクション"> 取引先名: <apex:inputField value="{!account.name}"/><br/> 電話番号: <apex:inputField value="{!account.phone}"/><br/> 種別: <apex:inputField value="{!account.type}"/><br/><br/> <!-- ⑤ コントローラのsaveメソッドを呼び出します。 --> <apex:commandButton action="{!save}" value="save"/> </apex:pageBlock> </apex:form> </apex:page> |
①Visualforceページを読み込んだときに最初に実行され、ページのIDを持つ取引先レコードを取得しています。
②取得した取引先をVisualforceページに渡しています。
③カスタムのsaveメソッドです。標準機能ではなく、開発者が作成したメソッドです。
④pageタグでカスタムコントローラを使用することをcontroller属性で指定しています。
⑤actionにコントローラのsaveメソッドを指定して呼び出します。
②取得した取引先をVisualforceページに渡しています。
③カスタムのsaveメソッドです。標準機能ではなく、開発者が作成したメソッドです。
④pageタグでカスタムコントローラを使用することをcontroller属性で指定しています。
⑤actionにコントローラのsaveメソッドを指定して呼び出します。
■デバッグ結果
※デバッグなので、レコードIdを手動で指定する必要があります。
ちゃんと取得したレコードIDの情報をコントローラ側からページにバインドされているのが確認できますね。
3.まとめ
いかがでしたでしょうか。
カスタムコントローラを使用することができれば、ある程度の開発はできると思います。
あとは、ユーザの要件に合わせて、条件分岐、例外処理やメール送信、エラーメッセージの表示などのメソッドを組み込んでいくことを繰り返すだけです。
書いて書いて慣れていきましょう!
皆さんもぜひ色々と試してみてください。
他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。
ではでは!
コメント