• Outsider
  • NEWBIE
  • 0 Points
  • Member since 2010

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 4
    Questions
  • 8
    Replies

I got error "too many rows" when I run below trigger.  May I know how to make this trigger insert more than 1000 records

 

    List<CampaignMember> NewCampaignMemberList = new List<CampaignMember>();//New Added
    if(ReadyFlag){
        Map<Id, Contact> ContactById = new Map<Id, Contact>([SELECT Id, AccountId FROM Contact
                     WHERE (Account.Member_Status__c = 'Opt-in' AND Account.Is_Member_Created_Last_Week__c = 'Y')]);
        Map<Id, CampaignMember> CampaignMemberById = new Map<Id, CampaignMember>([SELECT Id, CampaignId, ContactId FROM CampaignMember WHERE ContactId in :ContactById.keySet()]);
        for(Id conId : ContactById.keyset()){
            Boolean newflag = true;
            for(id cmId : CampaignMemberById.keyset()){
               if(CampaignMemberById.get(cmid).Campaign.Name == 'Welcome Message' &&
                  CampaignMemberById.get(cmid).Member__c == ContactById.get(conid).AccountId){
                  newflag = false;
               }//end if
            }//end for
            if (newflag){
            NewCampaignMemberList .add(new CampaignMember(CampaignId='70190000000DRhy', ContactId=ContactById.get(conid).Id, Status = 'Selected',
                            Contact_Tool__c='Email', Member__c=ContactById.get(conid).AccountId));

            }//end if
        }//end for
    }//end if
    insert NewCampaignMemberList;//New Added
}

Hi Friends,

 

Anyone can tell me how to make a trigger work for bulk update and online update?  I code below to update contact from Campaign Member.  It only works if less than 10 records are added to Campaign Member, no matter is from Add to Campaign function or dataloader.

 

trigger UpdateContact1stSamplingDataafterinsertCampaignMember on CampaignMember (after insert) {   
     Map<Id, List<CampaignMember>> CampaignMembersByContactId = new Map<Id, List<CampaignMember>>();
     for (CampaignMember campmem : trigger.new) {
         if(campmem.Contact_Type__c == 'First Contact'){
               List<CampaignMember> temp = new List<CampaignMember>();            
                temp.add(campmem);            
                CampaignMembersByContactId.put(campmem.ContactId, temp); 
         }//end if
     }//end for
     Map<Id, Contact>  ContactsById = new Map<Id, Contact>([SELECT Id FROM Contact WHERE Id in :CampaignMembersByContactId.keySet()]);
     for(Id ContactId : CampaignMembersByContactId.keyset()) {  
         if(CampaignMembersByContactId.get(contactId).get(0).stage__c == '1' ) {
             ContactsById.get(contactId).Stage_1_Date__c = CampaignMembersByContactId.get(contactId).get(0).Created_Date__c;
              ContactsById.get(contactId).stage_1_Status__c = CampaignMembersByContactId.get(contactId).get(0).Status;
           }//end if

     }//end for
     update(ContactsById.values());

I want to update Contact when Status of Campaign Member is changed.  I code below but got error "Initial term of field expression must be a concrete SObject: LIST<CampaignMember> at line 18 column 114" when compile.  May I know why?

 

trigger UpdateContactafterinsertCampaignMember on CampaignMember (after insert) {   
     Map<Id, List<CampaignMember>> CampaignMembersByContactId = new Map<Id, List<CampaignMember>>();
     for (CampaignMember campmem : trigger.new) {
         if(campmem.Contact_Type__c == 'First Contact'){
             if (CampaignMembersByContactId.containsKey(campmem.ContactId)) {   
                 CampaignMembersByContactId.get(campmem.ContactId).add(campmem);
             }//end if
             else {                
                List<CampaignMember> temp = new List<CampaignMember>();            
                temp.add(campmem);            
                CampaignMembersByContactId.put(campmem.ContactId, temp);
             }//end else
         }//end if
     }//end for
     Map<Id, Contact>  ContactsById = new Map<Id, Contact>([SELECT Id FROM Contact WHERE Id in :CampaignMembersByContactId.keySet()]);
     for(Id ContactId : CampaignMembersByContactId.keyset()) {  
         if(CampaignMembersByContactId.stage__c == '1' ) {
              ContactsById.get(contactId).Stage_1_Date__c = CampaignMembersByContactId.get(contactId).Created_Date__c;
              ContactsById.get(contactId).stage_1_Status__c = CampaignMembersByContactId.get(contactId).Status;
           }//end if

Hi Friends,

 

I have similar code to update no. of contacts in Account for Contacts insert and deletion but only got error message "Attempt to de-reference a null object".  Who can tell me why?  Thanks.

 

Code for update

 

trigger UpdateAccountNoOfBabiesbeforedeleteContact on Contact (before delete) {
    Contact[] tempnew = trigger.new;
    for(integer i =0; i<tempnew.size();i++){
        list<Account> accountList = [Select id,No_of_Contacts__c from Account where id = :tempnew[i].Account.id];
        for(Account c : accountList){
            if(c.No_of_Contacts__c ==NULL){
                c.No_of_Babies__c = 0;}
                else {
                integer tempint = integer.valueof(string.valueof(c.No_of_Contacts__c));
                tempint--;
                c.No_of_Contacts__c = decimal.valueof(tempint);
                update c;
            }//end else
        }//end for
     }//end for
}

I got error "too many rows" when I run below trigger.  May I know how to make this trigger insert more than 1000 records

 

    List<CampaignMember> NewCampaignMemberList = new List<CampaignMember>();//New Added
    if(ReadyFlag){
        Map<Id, Contact> ContactById = new Map<Id, Contact>([SELECT Id, AccountId FROM Contact
                     WHERE (Account.Member_Status__c = 'Opt-in' AND Account.Is_Member_Created_Last_Week__c = 'Y')]);
        Map<Id, CampaignMember> CampaignMemberById = new Map<Id, CampaignMember>([SELECT Id, CampaignId, ContactId FROM CampaignMember WHERE ContactId in :ContactById.keySet()]);
        for(Id conId : ContactById.keyset()){
            Boolean newflag = true;
            for(id cmId : CampaignMemberById.keyset()){
               if(CampaignMemberById.get(cmid).Campaign.Name == 'Welcome Message' &&
                  CampaignMemberById.get(cmid).Member__c == ContactById.get(conid).AccountId){
                  newflag = false;
               }//end if
            }//end for
            if (newflag){
            NewCampaignMemberList .add(new CampaignMember(CampaignId='70190000000DRhy', ContactId=ContactById.get(conid).Id, Status = 'Selected',
                            Contact_Tool__c='Email', Member__c=ContactById.get(conid).AccountId));

            }//end if
        }//end for
    }//end if
    insert NewCampaignMemberList;//New Added
}

I want to update Contact when Status of Campaign Member is changed.  I code below but got error "Initial term of field expression must be a concrete SObject: LIST<CampaignMember> at line 18 column 114" when compile.  May I know why?

 

trigger UpdateContactafterinsertCampaignMember on CampaignMember (after insert) {   
     Map<Id, List<CampaignMember>> CampaignMembersByContactId = new Map<Id, List<CampaignMember>>();
     for (CampaignMember campmem : trigger.new) {
         if(campmem.Contact_Type__c == 'First Contact'){
             if (CampaignMembersByContactId.containsKey(campmem.ContactId)) {   
                 CampaignMembersByContactId.get(campmem.ContactId).add(campmem);
             }//end if
             else {                
                List<CampaignMember> temp = new List<CampaignMember>();            
                temp.add(campmem);            
                CampaignMembersByContactId.put(campmem.ContactId, temp);
             }//end else
         }//end if
     }//end for
     Map<Id, Contact>  ContactsById = new Map<Id, Contact>([SELECT Id FROM Contact WHERE Id in :CampaignMembersByContactId.keySet()]);
     for(Id ContactId : CampaignMembersByContactId.keyset()) {  
         if(CampaignMembersByContactId.stage__c == '1' ) {
              ContactsById.get(contactId).Stage_1_Date__c = CampaignMembersByContactId.get(contactId).Created_Date__c;
              ContactsById.get(contactId).stage_1_Status__c = CampaignMembersByContactId.get(contactId).Status;
           }//end if

Hi Friends,

 

I have similar code to update no. of contacts in Account for Contacts insert and deletion but only got error message "Attempt to de-reference a null object".  Who can tell me why?  Thanks.

 

Code for update

 

trigger UpdateAccountNoOfBabiesbeforedeleteContact on Contact (before delete) {
    Contact[] tempnew = trigger.new;
    for(integer i =0; i<tempnew.size();i++){
        list<Account> accountList = [Select id,No_of_Contacts__c from Account where id = :tempnew[i].Account.id];
        for(Account c : accountList){
            if(c.No_of_Contacts__c ==NULL){
                c.No_of_Babies__c = 0;}
                else {
                integer tempint = integer.valueof(string.valueof(c.No_of_Contacts__c));
                tempint--;
                c.No_of_Contacts__c = decimal.valueof(tempint);
                update c;
            }//end else
        }//end for
     }//end for
}