【Salesforce】コレクションサイズ は、1,000 の最大サイズを超えています。
Visualforceの開発をしていると、ページを開いた際にこのようなエラーが出ました。
コレクションサイズ 1,001 は、1,000 の最大サイズを超えています。
コレクションサイズは1,000までだそうです。
コレクションサイズとは、「apex:repeat」タグなんかで設定するvalueのリストサイズのことですね。
つまり、「apex:repeat」に設定するリストのサイズが1,000件を超えていたということですね。
Visualforceページです。
<apex:repeat value="{!valueList}" var="value" > <apex:outputText value="{!value}" /><br/> </apex:repeat>
こちらはコントローラです。
/** * 1001件のレコード */ public List<Integer> getValueList(){ List<Integer> intList; // リストを作成する intList = new List<Integer>(); for(Integer i = 0; i < 1001; i++){ intList .add(i); } return intList; }
修正方法としてはいくつかあります。
リストをそのまま使いたい場合は、リスト内にリストを作ることで解決することができます。
<apex:repeat value="{!valueList}" var="innerList" > <apex:repeat value="{!innerList}" var="value" > <apex:outputText value="{!value}" /><br/> </apex:repeat> </apex:repeat>
/** * 1001件のレコード */ public List<Integer> getValueList(){ List<List<Integer>> wrapList; Integer index; // リストを作成する wrapList = new List<List<Integer>>(); wrapList.add(new List<Integer>()); index = 0; for(Integer i = 0; i < 1001; i++){ List<Integer> intList; // 最後のリストを取得する intList = wrapList[index]; // リストに値を追加する intList .add(i); // 1000件ごとにリストを追加する if(intList.size() >= 1000){ wrapList.add(new List<Integer>()); index++; } } return intList; }
PageタグにreadOnly=”true”を追加することで、10,000件のリストまで表示可能になります。
しかし、この場合はレコードの更新等ができなくなるため、注意が必要ですね。
<apex:page readOnly="true" controller="ControllerName" > <apex:repeat value="{!valueList}" var="value" > <apex:outputText value="{!value}" /><br/> </apex:repeat> </apex:page>
SObjectのリストであれば、StandardSetControllerを使用してページングを行うのも良いですね。
こちらはページング処理の実装がちょっと面倒ですが、便利な方法です。
Visualforceに合わせて適切な方法で実装したいですね。
No comments.