2016-08-30 1 views
0

テストオブジェクトのすべてのレコードをフェッチするApexトリガーにはsoqlがあります。 SOQlは50000以上のレコードをフェッチしていますので、私はこのガバナーがエラーに直面しているレコードを更新しています。 このエラーを解決する方法を教えてください。System.LimitException:クエリの行が多すぎます:トリガーで50001のエラーが発生しました。

List<test__c> ocrInformation = new List<test__c>(); 
Map<String,String> Opporgcode=new Map<String,String>(); 
ocrInformation= [select id,Team__c,Org__c from test__c];//facing an error here 
for(test__c oct: ocrInformation){ 
    Opporgcode.put(oct.Org__c,oct.Team__c); 
} 

答えて

2

それは= SOQLクエリによって取得したレコードの

総数標準のSalesforce制限にです50,000

あなたが本当にすべてtest__cのレコードを選択する必要がありますか?可能であれば、助けを受けてwhereまたはlimitの条件で検索したデータの量を減らすことができます。そうでない場合は、Batch Apexを使用してみてください。バッチ実行ごとに50kのリミットカウントが可能です。

+0

ありがとうございます。注釈を使用してこの50,000の制限を増やす方法はありますか?これは長い間存在していたトリガーであり、新しい機能強化のために今ではさらに多くのレコードを取得しています。ロジックはバッチクラスでは好ましくありません。 – saru

+1

「@ReadOnly」という注釈があり、100万行に取得できますが、変更はできません。つまり、トランザクションの実行時にDML操作を実行することはできません。したがって、データを変更する必要がある場合は、Batch Apexを使用して調べる必要があります。 –

+1

私は、(あなたのビジネスロジックによって)日付、またはTeam__c、Org__cでレコードをフィルタすることが許可されているかもしれないと付け加えます。私は最初にWHERE句を提案します。 –

関連する問題