2016-08-30 2 views
0

J'ai soql dans le déclencheur Apex où il récupère tous les enregistrements de l'objet de test. SOQl récupère plus de 50000 enregistrements donc quand je mets à jour les enregistrements, je suis confronté à cette erreur de limite de gouverneur. s'il vous plaît laissez-moi savoir comment résoudre cette erreur.System.LimitException: trop de lignes de requête: erreur 50001 dans le déclencheur

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); 
} 

Répondre

2

Il est limitation norme Salesforce

nombre total d'enregistrements récupérés par les requêtes SOQL = 50.000

Avez-vous vraiment besoin de sélectionner tous les enregistrements test__c? Eventuellement, vous pouvez réduire la quantité de données récupérées avec l'aide where ou limit conditions. Sinon, vous pouvez essayer d'utiliser Batch Apex. Il permet les comptages de limite de 50k par exécution de lot.

+0

Merci pour votre information.Existe-t-il un moyen d'augmenter cette limite de 50 000 en utilisant n'importe quelle annotation que certains pensent comme ça.Parce que le déclencheur existe depuis longtemps et pour une nouvelle amélioration, nous obtenons plus d'enregistrements maintenant. la logique n'est pas préférable avec la classe de traitement par lots. – saru

+1

Il y a une annotation '@ReadOnly' qui permet de récupérer jusqu'à 1 million de lignes, mais vous ne pourrez y apporter aucune modification. Cela signifie que vous ne pourrez pas effectuer d'opérations DML lorsque vous exécuterez une transaction. Donc, si vous avez besoin de modifier les données, vous devriez regarder en utilisant Batch Apex. –

+1

J'ajouterais que vous pourriez être autorisé (par votre logique de busines) à filtrer les enregistrements par date, ou Team__c, ou Org__c. Je suggérerais la clause WHERE d'abord. –