複数の Salesforce カスタム オブジェクトに移動する必要があるフィールドを含む CSV があります。解析を処理する APEX クラスを作成しました。ただし、VisualForce ページからクラスを呼び出すと、次のメッセージが表示されます。
Collection size 3,511 exceeds maximum size of 1,000.
私の APEX クラスは次のとおりです (このトピックに関する 2 つのブログ投稿からまとめたものです)。
public class parseCSV{
public Blob contentFile { get; set; }
public String nameFile { get; set; }
public Integer rowCount { get; set; }
public Integer colCount { get; set; }
public List<List<String>> getResults() {
List<List<String>> parsedCSV = new List<List<String>>();
rowCount = 0;
colCount = 0;
if (contentFile != null){
String fileString = contentFile.toString();
parsedCSV = parseCSV(fileString, false);
rowCount = parsedCSV.size();
for (List<String> row : parsedCSV){
if (row.size() > colCount){
colCount = row.size();
}
}
}
return parsedCSV;
}
public static List<List<String>> parseCSV(String contents,Boolean skipHeaders) {
List<List<String>> allFields = new List<List<String>>();
// replace instances where a double quote begins a field containing a comma
// in this case you get a double quote followed by a doubled double quote
// do this for beginning and end of a field
contents = contents.replaceAll(',"""',',"DBLQT').replaceall('""",','DBLQT",');
// now replace all remaining double quotes - we do this so that we can reconstruct
// fields with commas inside assuming they begin and end with a double quote
contents = contents.replaceAll('""','DBLQT');
// we are not attempting to handle fields with a newline inside of them
// so, split on newline to get the spreadsheet rows
List<String> lines = new List<String>();
try {
lines = contents.split('\n');
}
catch (System.ListException e) {
System.debug('Limits exceeded?' + e.getMessage());
}
Integer num = 0;
for(String line : lines) {
// check for blank CSV lines (only commas)
if (line.replaceAll(',','').trim().length() == 0) break;
List<String> fields = line.split(',');
List<String> cleanFields = new List<String>();
String compositeField;
Boolean makeCompositeField = false;
for(String field : fields) {
if (field.startsWith('"') && field.endsWith('"'))
{
cleanFields.add(field.replaceAll('DBLQT','"'));
}
else if (field.startsWith('"')) {
makeCompositeField = true;
compositeField = field;
}
else if (field.endsWith('"')) {
compositeField += ',' + field;
cleanFields.add(compositeField.replaceAll('DBLQT','"'));
makeCompositeField = false;
}
else if (makeCompositeField) {
compositeField += ',' + field;
}
else {
cleanFields.add(field.replaceAll('DBLQT','"'));
}
}
allFields.add(cleanFields);
}
if (skipHeaders) allFields.remove(0);
return allFields;
}
}
上記のクラスが CSV から適切なカスタム オブジェクトに正しい列を挿入するようにするにはどうすればよいですか?
一部のオブジェクトには他のオブジェクトへのルックアップが含まれているため、データが最初にルックアップ フィールドにロードされ、次に子テーブルにロードされるようにするにはどうすればよいですか?
最後に、上記のエラー メッセージを回避するにはどうすればよいですか? VisualForce ページの使用以外に提案されていることはありますか?
あなたの助けと指導に感謝します。