0

私は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
                    }
              }
        }
}

次の質問があります。

  1. (コメントアウトした)を使用List<Export__c> relatedExports = portal.Exporte__rしてサブクエリレコードを取得すると、「集計クエリの行数が多すぎて直接割り当てることができません。FORループを使用してください」というエラーメッセージが表示されます。SOQLはすでに実行されているため、エラーメッセージは私には意味がありません。説明はありますか?
  2. 上記のソリューションでは、サブクエリでPortal _cごとに受信したタイプExporte_rからのレコードの最大量は199ですが、Portal__cの一部のレコードには200を超えていますが、なぜその数に制限されるのですか?この場合、199を超えるすべてのレコードが無視されるようです。
  3. サブクエリから199を超えるレコードを受信する可能性はありますか?バッチサイズを変更しようとしましたが、サブクエリで受信できるレコード数とは無関係のようです。何か案が?

どうもありがとう!

4

1 に答える 1