【Apex+Visualforce】DML currently not allowed. コンストラクタでDMLの実行はできない。

Salesforce

初期表示時にオブジェクトのレコードをupdateする画面を作ったら、update実行のところでエラーが発生。

DML currently not allowed

結論から言うと、ControllerクラスのコンストラクタでDMLの実行はできないらしいです
対策としては、初期表示アクションを作って、apex:pageタグのactionで指定してあげればいいみたいですね。

詳しく書いていきますね。

エラーとなるソース

まずはエラーとなってしまうソース。
初期表示時に取引先の判定処理(ここでは詳しく触れませんが)を行い、結果を画面に表示することを期待しています。
判定が正常に行われた場合はChecked__cという項目をtrueにしてupdateします。

この画面を表示すると、”DML currently not allowed”のエラーが発生します。
DMLを実行している箇所(37行目)でエラーになる。

エラーとならないよう修正

ControllerクラスのコンストラクタでDMLの実行はできないので、初期表示で処理するアクションメソッドを作成して、それをapex:pageタグのactionで指定してあげます。
以下のような感じ。変更箇所はハイライトしてます。

コメント

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