Error
AddAccountTeamMember: System.LimitException: Too many DML rows: 10001
Code
public class AccountTeamMemberExample{
public static void accountTeamAssignInsert(List<Account> newList){
List<AccountTeamMember> latm = new List<AccountTeamMember>();
List<AccountShare> las = new List<AccountShare>();
set<id> setids = new set<id>();
set<id> accids = new set<id>();
set<string> listEmails = new set<string>();
Id uid;
for (Account acc : newList) {
uid = acc.ownerId;
for(CustomSettings__c s : CustomSettings__c.getAll().values()){
if(acc.Territory_ID__c == s.Territory_ID__c){
listEmails.add(s.User_Email_Address__c);
system.debug('listemails:::::'+listemails);
}
}
}
list<User> usr = [SELECT id,name,email,username,profile.name from user where username in : listEmails AND isActive = true];
system.debug('user:::::'+usr);
for(Account acc : newList){
for(CustomSettings s : CustomSettings__c.getAll().values()){
for(User u : usr){
system.debug('Acc.ownerId:::'+Acc.ownerId);
AccountTeamMember atm = new AccountTeamMember();
AccountShare nas = new AccountShare();
atm.AccountId = acc.id;
atm.TeamMemberRole = s.TeamMemberRole__c;
atm.UserId= u.id;
latm.add(atm);
if(u.profile.name != 'System Administrator' && u.id != acc.ownerid){
nas.AccountId =acc.id;
nas.UserOrGroupId =u.id;
nas.AccountAccessLevel ='Edit';
nas.OpportunityAccessLevel = 'Edit';
nas.CaseAccessLevel = 'Edit';
las.add(nas);
}
}
}
}
try{
insert(las);
insert(latm);
}catch(DMLException e){
system.debug('error on insert team members ' + e.getMessage());
}
}
//===UPDATE===
public static void accountTeamAssignUpdate(List<Account> newList,List<Account> oldList){
List<AccountTeamMember> latm = new List<AccountTeamMember>();
List<AccountShare> las = new List<AccountShare>();
set<id> setids = new set<id>();
set<id> accids = new set<id>();
set<string> listEmails = new set<string>();
Id uid;
String oldterritory_id;
String newterritory_id;
for(Account a : oldList){
oldterritory_id = a.Territory_ID__c;
}
for(Account a : newList){
newterritory_id = a.Territory_ID__c;
}
if(oldterritory_id != newterritory_id){
for (Account acc : newList) {
setids.add(acc.id);
}
List<AccountTeamMember> oldatm = [select id from AccountTeamMember where AccountId in : setids];
if(oldatm != null){
delete(oldatm);
}
}
for (Account acc : newList) {
uid = acc.ownerId;
for(CustomSettings__c s : CustomSettings__c.getAll().values()){
if(acc.Territory_ID__c == s.Territory_ID__c){
listEmails.add(s.User_Email_Address__c);
system.debug('listemails:::::'+listemails);
}
}
}
list<User> usr = [SELECT id,name,email,username,profile.name from user where username in : listEmails AND isActive = true];
system.debug('user:::::'+usr);
for(Account acc : newList){
for(CustomSettings__c s : CustomSettings__c.getAll().values()){
for(User u : usr){
system.debug('Acc.ownerId:::'+Acc.ownerId);
AccountTeamMember atm = new AccountTeamMember();
AccountShare nas = new AccountShare();
atm.AccountId = acc.id;
atm.TeamMemberRole = s.TeamMemberRole__c;
atm.UserId= u.id;
latm.add(atm);
if(u.profile.name != 'System Administrator' && u.id != acc.ownerid){
nas.AccountId =acc.id;
nas.UserOrGroupId =u.id;
nas.AccountAccessLevel ='Edit';
nas.OpportunityAccessLevel = 'Edit';
nas.CaseAccessLevel = 'Edit';
las.add(nas);
}
}
}
}
try{
insert(las);
insert(latm);
}catch(DMLException e){
system.debug('error on insert team members ' + e.getMessage());
}
}
}
and Trigger is:
trigger AccountTeam on Account (after insert,after update) {
if(Trigger.isInsert){
AccountTeamMemberExample.accountTeamAssignInsert(trigger.new);
}
if(Trigger.isUpdate){
AccountTeamMemberExample.accountTeamAssignUpdate(trigger.new,trigger.old);
}
}
Turned the Trigger off and records loaded as expected. I turned the Trigger back on and then tried an Update operation and that too failed with the above-referenced error, so it seems that there is still a problem with the bulk operations and the Trigger.