セールスフォースお助け隊ブログ | Salesforce
セールスフォース開発者のブログRSS
【Apex】コントローラクラス(Apexクラス)のコンストラクタでは、DMLの実行はできない。

【Apex】コントローラクラス(Apexクラス)のコンストラクタでは、DMLの実行はできない。

2011年3月 7日 14:31

みなさんこんにちは。
Salesforceお助け隊の加藤です。

Visualforceで作成したページに最初にアクセスした際に、
オブジェクトの更新を行おうと考えていました。

そこで、Visualforceに紐づけたコントローラクラス(Apexクラス)の
コンストラクタで処理を実装しようと考えました。
そうすれば、Visualforceで作成したページに最初にアクセスした際に、
コントローラクラス(Apexクラス)がインスタンス化され、
コンストラクタが呼び出されるからです。

しかし、実際にオブジェクトの更新処理を実行すると
「DML currently not allowed」というエラーが発生して
処理を実行できませんでした。

ページを開いた際に処理を行いたい場合は、
ページ表示時のイベントとして用意されている
Visualforceページのapex:pageタグのaction属性にて指定した
メソッドにて実装することになります。

但し、このイベントはページを表示する毎に発生するので、
今回のようにページに最初にアクセスした場合という条件を満たすには、
内部的に、一度画面が表示されたかどうかのステータスを管理して対応する必要があります。

ちなみに私は、コンストラクタでフラグを初期化しておき、
一回でもapex:pageタグのaction属性にて指定したメソッドが実行された場合に、
フラグを立てるという方法で対応しています。

「セールスフォースお助け隊ブログ」へのコメントやご意見等ありましたら
ファンページまでお願いします。  Facebookのファンページ

Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ

← 前のエントリー     次のエントリー →

顧客管理システム Salesforce CRM