You need to sign in to do that
Don't have an account?
Tamojita Guhasarkar
Doubt Clear on SFDC Governor limit - bulkfy DML
Hello Folks ,
Please help me to clear few bacis doubts related to Governor limit - bulkfy DML
Case 1: My code is like below
List<Account> act = [ some query and it retrns 5000 records ];
for ( account a : act)
{
a.description =' updated by script';
}
update act;
Case 2: My code is like below
List<Account> act = [ some query and it retrns 5000 records ];
List<Account> new_act = new List<Account>();
for ( account a: act)
{
a.description =' updated by script ';
new_act.add(a);
}
update new_act;
================================
Ok so my question is as my quesry is retriving 5000 records and I want to update these records ,so I needto Bultyfly my dml so it will not breach the govornor limit . so in to achive this , as per my understading , both of these approches should do the same work , i.e , as I worte the Update outside the loop, hence it will execute only once ( though the for loop goes for 5000 times ) and update all these 5000 records.
So is this correct ? can someone clafiry please .
Thanks,
Tanoy
Please help me to clear few bacis doubts related to Governor limit - bulkfy DML
Case 1: My code is like below
List<Account> act = [ some query and it retrns 5000 records ];
for ( account a : act)
{
a.description =' updated by script';
}
update act;
Case 2: My code is like below
List<Account> act = [ some query and it retrns 5000 records ];
List<Account> new_act = new List<Account>();
for ( account a: act)
{
a.description =' updated by script ';
new_act.add(a);
}
update new_act;
================================
Ok so my question is as my quesry is retriving 5000 records and I want to update these records ,so I needto Bultyfly my dml so it will not breach the govornor limit . so in to achive this , as per my understading , both of these approches should do the same work , i.e , as I worte the Update outside the loop, hence it will execute only once ( though the for loop goes for 5000 times ) and update all these 5000 records.
So is this correct ? can someone clafiry please .
Thanks,
Tanoy
Hi,
Your example does not explain Bulkification.
Because,
Case 1: Updates all accounts even if does not enter into for loop.
Case 2: Here you used the collection and the update operation will be performed only on the records which are in the List.
Both cases will do the same job. It is not an example of Bulkifyng.
Bulkifying Apex code refers to the concept of making sure the code properly handles more than one record at a time. When a batch of records initiates Apex, a single instance of that Apex code is executed, but it needs to handle all of the records in that given batch. For example, a trigger could be invoked by an Force.com SOAP API call that inserted a batch of records. So if a batch of records invokes the same Apex code, all of those records need to be processed as a bulk, in order to write scalable code and avoid hitting governor limits.
Check this link for more details:
https://developer.salesforce.com/page/Apex_Code_Best_Practices
Hope it helps !!
Thanks
Brahma
All Answers
Yes you are correct that, both the code would do the same.
As a best practice, the list used to get the records is not altered.
In your case List act, as you might need to query the accounts later.
Just imagine the query returns 5000 records.
1. If you have nothing else to do the code one would be fine. But eventually the code grows, triggers are added and in a single transaction only 100 dmls are allowed. Hence for making the code "future proof" the query result is kept, then again depends on the requirement.
2. If you are query result is 5000, but then there is a condition and only 10 of the records satisfy.
a) In code 1 : update runs for 5000 records
b) In code 2 : update runs only for 10 records as the new list would only have records which satisfy the condition,
3. Say you are using differernt "Record types", then each record type might have different fields.
a) We would end up using different Database calls. Note: Best approach is to always reduce the calls to the database
b) Say there are 5 records types, 5 database calls would be needed. Instead do one call and get the result.
c) Next create 5 list variable of the object type. and use if else condition to sort them into the list by comparing the record types.
d) Thus reducing the DML operations.
Hope it helps to give a picture
Rd
Hi,
Your example does not explain Bulkification.
Because,
Case 1: Updates all accounts even if does not enter into for loop.
Case 2: Here you used the collection and the update operation will be performed only on the records which are in the List.
Both cases will do the same job. It is not an example of Bulkifyng.
Bulkifying Apex code refers to the concept of making sure the code properly handles more than one record at a time. When a batch of records initiates Apex, a single instance of that Apex code is executed, but it needs to handle all of the records in that given batch. For example, a trigger could be invoked by an Force.com SOAP API call that inserted a batch of records. So if a batch of records invokes the same Apex code, all of those records need to be processed as a bulk, in order to write scalable code and avoid hitting governor limits.
Check this link for more details:
https://developer.salesforce.com/page/Apex_Code_Best_Practices
Hope it helps !!
Thanks
Brahma
Both are from same purpose