【Apex+Visualforce】標準コントローラの拡張をやってみた。アクションの追加と上書き。

Salesforce

公式ドキュメントを読んでいて、コントローラ拡張っていうのは、標準コントローラーを拡張するのが主な用途なのかな?と思ったので、標準コントローラの拡張をやってみました。

【Apex+Visualforce】コントローラ拡張の用途。標準ボタン、標準リンクの上書き。

アクションの追加

まず前提として、標準コントローラーで提供されるアクションは下記です。
標準コントローラで提供されるアクション(公式サイト)

保存(save)や編集(edit)、削除(delete)などの標準的なアクションですね。
アクションが実行された後の挙動も決まっています。

ここで、標準コントローラーでは提供されていないやり直し(redo)というアクションを追加したい場合(やり直しボタンを押すと、画面で編集中の内容が取り消されて初期表示の状態に戻る)。
こんな感じで実装します。
まずはコントローラークラス。


続いてVisualforce画面。

やり直しボタンを押すと、こんな感じの挙動になります。

アクションの上書き

続いて、もともと標準コントローラーに備わっているアクションに機能を追加したい場合。
今回は、保存時に「説明(Account.Description)」が未入力だった場合、”(自動入力)”という文字列を自動で設定するという動きを追加することにします。

こんな感じですね。


Javaとかで言うとオーバーライド的な発想ですが、実装的にはオーバーライドとは違うので”上書き”という言葉を使いました。

コントローラークラスの実装例はこんな感じです。
redoアクションを追加した時のソースとの差分をハイライトしてます。

ポイントとしては45行目です。
標準コントローラーでも提供されているsaveメソッドと同じ名前のメソッドを作ったので(41行目)、標準コントローラのsaveメソッドは実行されずに、上記拡張クラスのsaveメソッドが実行されます。
でも今回やりたかったのは標準コントローラの保存処理の前に少し処理を追加したかっただけなので(42~44行目)、標準コントローラのsaveメソッドも処理したい。なので45行目のコードになっています。

補足

ちなみに標準コントローラのsaveメソッドは、保存時に画面遷移する仕様となっています。
保存した際に画面遷移したくないのであればquicksaveメソッドを使います。
標準コントローラで提供されるアクション(公式サイト)

しかし!ApexPages.StandardControllerクラスにはquicksaveメソッドがない。
StandardControllerクラス(公式サイト)
作っておいてくれてもいいのに・・
とりあえず下記のように実装すればquicksaveと同じような(たぶん同じ)動きになります。

まずはコントローラ。

次にVisualforce画面。

コメント

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