You need to sign in to do that
Don't have an account?
Bulk Trigger: Too Many SOQL
Good day,
first sorry for my english.
I am a newbie and ask the council for writing bulk trigger.
I created a trigger, which should create a contact, account and assets for imports through the Data Loader.
Now I get an error: Too Many SOQL queries.
I know that all queries need to move out of for.
I request your assistance in this matter.
Here is my trigger code:
trigger ImportAsset on Asset (before insert) {
List<Asset> asset = Trigger.new;
String accId;
for (Asset a : asset){
if (a.Import_AccountName__c != null){
List<Account> acc = [Select Id from Account where Name = :a.Import_AccountName__c];
for (Account account: acc) {
if (acc.size() == 0){
Account accnew;
accnew = new Account();
accnew.Name = a.Import_AccountName__c;
accnew.BillingCity = a.Import_AccountCity__c;
accnew.BillingStreet = a.Import_AccountAddress__c;
accnew.Phone = a.Import_AccountPhone__c;
accnew.Tel2__c = a.Import_AccountPhone2__c;
accnew.Website = a.Import_AccountUrl__c;
insert accnew;
accId = accnew.Id;
} else {
accId = account.Id;
}
}
List<Contact> contactLines = new List<Contact>();
if (a.Import_FirstName1__c != null){
Contact cnt1 = new Contact();
cnt1.FirstName = a.Import_FirstName1__c;
cnt1.LastName = a.Import_LastName1__c;
cnt1.Title = a.Import_Title1__c;
cnt1.Phone = a.Import_MobilePhone1__c;
cnt1.AccountId = accId;
contactLines.add(cnt1);
}
if (a.Import_FirstName2__c != null){
Contact cnt2 = new Contact();
cnt2.FirstName = a.Import_FirstName2__c;
cnt2.LastName = a.Import_LastName2__c;
cnt2.Title = a.Import_Title2__c;
cnt2.Phone = a.Import_MobilePhone2__c;
cnt2.AccountId = accId;
contactLines.add(cnt2);
}
if (a.Import_FirstName3__c != null){
Contact cnt3 = new Contact();
cnt3.FirstName = a.Import_FirstName3__c;
cnt3.LastName = a.Import_LastName3__c;
cnt3.Title = a.Import_Title3__c;
cnt3.Phone = a.Import_MobilePhone3__c;
cnt3.AccountId = accId;
contactLines.add(cnt3);
}
insert contactLines;
}
if (a.Import_ProductCode__c != null){
List<Product2> prod = [Select Id, Name from Product2 where ProductCode = :a.Import_ProductCode__c];
for (Product2 p: prod){
a.Name = p.Name;
a.Product2Id = p.Id;
a.AccountId = accId;
a.Status = 'Setup';
}
}
}
}
I'm grateful for any help..
You can use MAP and List object for bulk insert. if you don't know about it, let me know, I can write the code behalf of you.
Thanks,
Kamlesh
Thanks for your reply,
I tried to use MAP, but without success.
And your code example would be a great way
Take a look at my blog post below. It should help you out. It references your error specifically with examples on how to prevent the error along with test cases.
Writing Bulk Triggers for Salesforce.com
Jeff Douglas
Appirio
http://blog.jeffdouglas.com