私はApexに比較的慣れていませんが、作成しているバッチジョブについていくつか質問があります。サブクエリでクエリを作成したい(コードを参照してください)。すべてのPortal_cは、200を超えるExporte_rを持つことができます。
global Database.QueryLocator start(Database.BatchableContext BC) {
String query = 'SELECT Id, Name, (SELECT Id FROM Exporte__r) FROM Portal__c';
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC, List<Portal__c> scope) {
for (Portal__c portal : scope) {
// doesn't work -> First error: Aggregate query has too many rows for direct assignment, use FOR loop
// when using FOR loop -> System.QueryException: invalid query locator
//List<Export__c> relatedExports = portal.Exporte__r;
// grab all the related Export__c records using 'getSObjects' to avoid errors described above
Export__c[] relatedExports = portal.getSObjects('Exporte__r');
if (relatedExports != null) {
for (Export__c exp : relatedExports) {
// do something
}
}
}
}
次の質問があります。
- (コメントアウトした)を使用
List<Export__c> relatedExports = portal.Exporte__r
してサブクエリレコードを取得すると、「集計クエリの行数が多すぎて直接割り当てることができません。FORループを使用してください」というエラーメッセージが表示されます。SOQLはすでに実行されているため、エラーメッセージは私には意味がありません。説明はありますか? - 上記のソリューションでは、サブクエリでPortal _cごとに受信したタイプExporte_rからのレコードの最大量は199ですが、Portal__cの一部のレコードには200を超えていますが、なぜその数に制限されるのですか?この場合、199を超えるすべてのレコードが無視されるようです。
- サブクエリから199を超えるレコードを受信する可能性はありますか?バッチサイズを変更しようとしましたが、サブクエリで受信できるレコード数とは無関係のようです。何か案が?
どうもありがとう!