tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Apex開発『apex:iframe』とreadOnlyの関係

SOQLでレコード件数を取得して画面に表示する場合、50,000件を超えるとシステムエラーとなってしまいます。

f:id:tyoshikawa1106:20150221151027p:plain


例外として、readOnly="true"と宣言することで50,000件を超える件数を画面に表示することが可能です。

f:id:tyoshikawa1106:20150221151619p:plain


ただし、readOnly="true"を宣言した画面では保存処理などが実行ができなくなります。

f:id:tyoshikawa1106:20150221151724p:plain


今回は『apex:iframe』を利用することでこの問題を回避できるのか確認してみました。readOnly="true"を宣言して大量件数を取得するページと、登録処理を実行するページというように2つの画面を用意しました。

登録ページ (readOnlyの宣言なし)

f:id:tyoshikawa1106:20150221152435p:plain

件数取得ページ (reaOnlyの宣言あり)

f:id:tyoshikawa1106:20150221152502p:plain


実際に試してみた結果がこちらです。このように無事に表示することできました。
f:id:tyoshikawa1106:20150221152813p:plain


保存処理も正常に実行できます。
f:id:tyoshikawa1106:20150221152935p:plain


apex:iframeとreadOnlyを組み合わせることで登録画面に50,000件を超える件数表示を行えました。ちなみにapex:iframe内のページでreadOnly="true"を宣言しない場合は次のようになります。
f:id:tyoshikawa1106:20150221153918p:plain


iframe内のページと外のページできちんと独立していることが確認できますね。それぞれのページが独立することで、考慮しなくてはならない問題もありそうですが、大量件数表示を行う場合はこのようにapex:iframeを利用することで対応できるようになっています。

今回の検証コード