I have the workflow, which updates the field Case: On Hold Time
when status=On Hold changes to any other value.
PRIORVALUE(On_Hold_Time__c)+ NOW()- DATETIMEVALUE(On_Hold_Start_Time__c)
where
1) On_Hold_Time__c Number(12, 6)
2) On_Hold_Start_Time__c Date/Time
The same formula looking to implement using the trigger logic, but getting the below error.
Arithmetic expressions must use numeric arguments for line-22
Here is the trigger logic
Set<Id> caseIds = new Set<Id>();
for(Case c : newCases){
if(c.Status == 'On Hold'){
caseIds.add(c.Id);
}
else if(c.Status != 'On Hold'){
caseIds.add(c.Id);
}
}
List<Case> cases = [SELECT Id, IsStopped, Status FROM Case WHERE Id IN :caseIds];
List<Case> lstCase = new List<Case>();
for(Case ca : cases){
Case c = new Case(Id = ca.Id);
if(ca.Status == 'On Hold'){
c.IsStopped = true;
c.On_Hold_Start_Time__c = System.now();
}
else if(ca.Status != 'On Hold'){
c.IsStopped = false;
c.On_Hold_Time__c = (ca.On_Hold_Time__c + System.now()) - ca.On_Hold_Start_Time__c; //line-22
}
lstCase.add(c);
}
update lstCase;
Best Answer
First of all, leverage
Stopped Since
(API nameStopStartDate
) attribute of Case object when you are makingisStopped=true
. This will return when the case is stopped calculating milestones.Replace the line 22 with this:
On_Hold_Time__c
will store values in seconds.Be sure to first query
StopStartDate
in SOQL.