• kushagra gupta 23
  • NEWBIE
  • 0 Points
  • Member since 2020

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 2
    Questions
  • 1
    Replies
-------Getting this issue:Please guide:::I have started with some basics----------
"System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, countcontatcs: execution of BeforeInsert

caused by: System.DmlException: Update failed. First exception on row 0; first error: MISSING_ARGUMENT, Id not specified in an update call: []

Trigger.countcontatcs: line 10, column 1: []"


--------------Trigger:-----------------------------------
trigger countcontatcs on Contact (before insert) {
    
    for (contact c : trigger.new)
    { integer i =0;
        account a = new account();
        if (c.accountid == a.id)
        { i++;
        a.contactcounter__c=i;
        }
        update a;
    }

}


--------------test clsss----------------------
@isTest
public class countcontactstest {
    static testmethod  void validatecountcontacts()
    { list<account> acclist = new list<account>();
     list<contact> conlist= new list<contact>();
     
        for (integer i = 0 ; i<2; i++)
        {
            account a = new account (name ='test' + i, First_Name__c= 'testfirstname'+i, Last_Name__c='testlastname'+i);
            
            for (integer j = 0 ; j<1 ; j++)
            {
                contact c = new contact();
                c.LastName= 'lastcontactname'+i;
                c.AccountId = a.id;
            conlist.add(c); 
            }
        acclist.add(a);
        }
     test.startTest();
     insert acclist;
     insert conlist;
        test.stoptest();
     
    }

}
User-added image

HELPER CLASS:

public with sharing class MaintenanceRequestHelper {
public static void updateWorkOrders(List<Case> caseList) {
    List<case> newCases = new List<Case>();
    Map<String,Integer> result=getDueDate(caseList);
    for(Case c : caseList){
        if(c.status=='closed')
            if(c.type=='Repair' || c.type=='Routine Maintenance'){
                Case newCase = new Case();
                newCase.Status='New';
                newCase.Origin='web';
                newCase.Type='Routine Maintenance';
                newCase.Subject='Routine Maintenance of Vehicle';
                newCase.Vehicle__c=c.Vehicle__c;
                newCase.Equipment__c=c.Equipment__c;
                newCase.Date_Reported__c=Date.today();
                if(result.get(c.Id)!=null)
                 newCase.Date_Due__c=Date.today()+result.get(c.Id);
                else
                    newCase.Date_Due__c=Date.today();
                newCases.add(newCase);
            }
    }        
    insert newCases;   
}
//
public static  Map<String,Integer> getDueDate(List<case> CaseIDs){       
   Map<String,Integer> result = new Map<String,Integer>();
    Map<Id, case> caseKeys = new Map<Id, case> (CaseIDs);        
   List<AggregateResult> wpc=[select Maintenance_Request__r.ID cID,min(Equipment__r.Maintenance_Cycle__c)cycle
                  from Work_Part__c where  Maintenance_Request__r.ID in :caseKeys.keySet() group by             Maintenance_Request__r.ID ];
    for(AggregateResult res :wpc){
        Integer addDays=0;
        if(res.get('cycle')!=null)
            addDays+=Integer.valueOf(res.get('cycle'));
        result.put((String)res.get('cID'),addDays);
    }
        return result;
    }

 }

TRIGGER CLASS:
trigger MaintenanceRequest on Case (before update, after update) {
// ToDo: Call MaintenanceRequestHelper.updateWorkOrders
   if(Trigger.isAfter)
             MaintenanceRequestHelper.updateWorkOrders(Trigger.New);


}


TEST
@isTest
private class MaintenanceRequestTest {
    
    @isTest static void TestWithCycleDays() {

        
             Account acct = new Account(Name= 'testAcct');
             insert acct;
             Contact cont = new Contact(LastName = 'contactTest', AccountID = acct.id, email = 'testcont@test.com');
             insert cont;
             Product2 prd1 = new Product2(Name = 'ProductTest1', Maintenance_Cycle__c = 2, Replacement_Part__c = true);
             insert prd1;
             Vehicle__c vhcl1 = new Vehicle__c(Name = 'VehicleTest1');
             insert vhcl1;
             
        Case MntRequest = new Case(description = 'test123',
                                Subject = 'Other',
                                Type = 'Repair',
                                Status = 'Closed',
                                origin = 'Web',
                                Date_Reported__c = date.today(),
                                Date_Due__c = date.today(),
                                Vehicle__c = vhcl1.id,
                                Equipment__c = prd1.id);
            
        insert MntRequest;
        
        Work_Part__c wp1 = new Work_Part__c(Equipment__c = prd1.Id, Maintenance_Request__c = MntRequest.id);
        
        insert wp1;
        
        MntRequest.Status = 'Closed';
          
        update MntRequest; 
           
        }
    
    @isTest static void testCaseBulkInsert(){
    List<Case> testCaseList = new List<Case>();
        For(Integer i=1 ;i<=300 ; i++) {

            Case MntRequest = new Case(
                                type = 'Routine Maintenance',
                                status = 'Closed',
                                origin = 'Web',
                                Subject = null,
                                Date_Reported__c = date.today(),
                                Vehicle__c = null,
                                Equipment__c = null,
                                Date_Due__c = date.today());
            testCaseList.add(MntRequest);
        }
            system.assertEquals(testCaseList.size(), 300);                   
    } 
    
}
Hi All,

I want to display number of contacts associated with an account using triggers.

for this I had created a lookup field like noofcontacts__c in account  object. and Wrote code as

trigger numberofcontacts on contact(after insert, after update, after delete) {
    Map<Id, List<Contact>> AcctContactList = new Map<Id, List<Contact>>();
    Set<Id> AcctIds = new Set<Id>();   
    List<schema.Account> AcctList = new List<schema.Account>();
    List<schema.Contact> ConList = new List<schema.Contact>();
   
    if(trigger.isInsert || trigger.isUPdate) {
        for(Contact Con : trigger.New) {
            if(String.isNotBlank(Con.AccountId)){
                AcctIds.add(Con.AccountId); 
            }  
        } 
    }
   
    if(trigger.isDelete) {
        for(Contact Con : trigger.Old) {
            AcctIds.add(Con.AccountId);    
        } 
    }          
   
    if(AcctIds.size() > 0){
        ConList = [SELECT Id, AccountId FROM Contact WHERE AccountId IN : AcctIds];
       
        for(Contact Con : ConList) {
            if(!AcctContactList.containsKey(Con.AccountId)){
                AcctContactList.put(Con.AccountId, new List<Contact>());
            }
            AcctContactList.get(Con.AccountId).add(Con);     
        }                          
      
           
        AcctList = [SELECT noofContacts__c FROM Account WHERE Id IN : AcctIds];
        for(Account Acc : AcctList) {
            List<schema.Contact> ContList = new List<schema.Contact>();
            ContList = AcctContactList.get(Acc.Id);
            Acc.Number_of_Contacts__c = ContList.size();
        }   
       
      
        update AcctList;   
    }

}
 I am   getting an error as "Variable doesnot exist:id".

Kindly support and suggest.

Thanks