tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:ビューステートエラーとRemoteActionの送信上限の考慮について

Apexではpublic変数を用意することでページとクラス側で値のやりとりを簡単にできる変数を用意できます。ですが無制限に用意できるのではなく上限をオーバーするとビューステートエラーが発生します。
f:id:tyoshikawa1106:20170108134240p:plain


ビューステートエラーで気をつけなくては行けないのはファイルデータの扱いです。apex:inputFileタグをつかってファイルデータを保持した状態でreRenderなどで値のやりとりを行うと一発で発生します。ファイル添付画面→確認画面→アップロード処理実行というような機能を実装するときはJavaScriptRemotingなどで対応する必要があります。


またビューステートエラーが発生するからapexタグはダメだ。できるかぎりJavaScriptRemotingで対応する。という感じでRemoteActionを利用することがあると思います。実はRemoteActionにもApex側に値を渡すときに上限があります。
f:id:tyoshikawa1106:20170108134801p:plain


このようにJavaScriptRemotingで実装するときもいろいろ考慮する必要があります。


ビューステートエラーとRemoteActionの制限エラーが発生したときの一番の問題ですが、設計レベルで見直しが必要になることです。「NULLチェックが抜けていた」「保存処理がうまく実行できていなかった」という問題の場合はApex処理を修正して本番環境にリリースすれば修正できます。ですがビューステートエラーとRemoteActionの制限エラーの場合はデータの持たせ方から変更する必要がでてきます。場合によっては一から作り直す。オブジェクト構成から考え直すという状況にまでなる可能性があります。


組織に数万件のデータが溜まってきて動かなくなったということはあるかもしれませんが、数千件程度で動かなくなる処理というのは何かがおかしいので、運用が始まる前の開発フェーズで必ずチェックしておいた方が良いと思います。

関連記事