I need some help
Aim- To create a basic approval process.
I have created the following trigger “AutomateApprove” on the campaign object, however I am keep getting error messages when populating fields “Next Step” And “Next Approver”. “Next Step” and “Next Approver” are both Custom fields and both of these fields have the data type as “Text(255)
When I populate the field “Next Step” with “Submit” And “Next Approver” as “Daniel Hotmail mason” I get the following error
Error:Invalid id: Daniel Hotmail Mason.
User : Daniel Hotmail Mason User iD : 00520000003Cznv
When I put the user id into ““Next Approver” field I get this error message “Error:Process failed. First exception on row 0; first error: NO_APPLICABLE_PROCESS, No applicable approval process found.: []
trigger AutomateApprove on Campaign(After insert, After update)
{
for (Integer i = 0; i < Trigger.new.size(); i++)
{
try
{
//Insure that previous value not equal to current, else if there is any field update on approval process action
//there will be recurrence of the trigger.
if(Trigger.new[i].Next_Step__c == 'Submit' && Trigger.old[i].Next_Step__c != 'Submit')
{
submitForApproval(Trigger.new[i]);
}
else if(Trigger.new[i].Next_Step__c == 'Approve' && Trigger.old[i].Next_Step__c != 'Approve')
{
approveRecord(Trigger.new[i]);
}
else if(Trigger.new[i].Next_Step__c == 'Reject' && Trigger.old[i].Next_Step__c != 'Reject')
{
rejectRecord(Trigger.new[i]);
}
}catch(Exception e)
{
Trigger.new[i].addError(e.getMessage());
}
}
// This method will submit the Campaign automatically
public void submitForApproval(Campaign opp)
{
// Create an approval request for the Campaign
Approval.ProcessSubmitRequest req1 = new Approval.ProcessSubmitRequest();
req1.setComments('Submitting request for approval automatically using Trigger');
req1.setObjectId(opp.id);
req1.setNextApproverIds(new Id[] {opp.Next_Approver__c});
// Submit the approval request for the Campaign
Approval.ProcessResult result = Approval.process(req1);
}
//Get ProcessInstanceWorkItemId using SOQL
public Id getWorkItemId(Id targetObjectId)
{
Id retVal = null;
for(ProcessInstanceWorkitem workItem : [Select p.Id from ProcessInstanceWorkitem p
where p.ProcessInstance.TargetObjectId =: targetObjectId])
{
retVal = workItem.Id;
}
return retVal;
}
// This method will Approve the Campaign
public void approveRecord(Campaign opp)
{
Approval.ProcessWorkitemRequest req = new Approval.ProcessWorkitemRequest();
req.setComments('Approving request using Trigger');
req.setAction('Approve');
req.setNextApproverIds(new Id[] {opp.Next_Approver__c});
Id workItemId = getWorkItemId(opp.id);
//opp.addError(workItemId);
if(workItemId == null)
{
opp.addError('Error Occured in Trigger');
//opp.addError(workItemId);
}
else
{
req.setWorkitemId(workItemId);
// Submit the request for approval
Approval.ProcessResult result = Approval.process(req);
}
}
// This method will Reject the Campaign
public void rejectRecord(Campaign opp)
{
Approval.ProcessWorkitemRequest req = new Approval.ProcessWorkitemRequest();
req.setComments('Rejected request using Trigger');
req.setAction('Reject');
//req.setNextApproverIds(new Id[] {UserInfo.getUserId()});
Id workItemId = getWorkItemId(opp.id);
//opp.addError(workItemId);
if(workItemId == null)
{
opp.addError('Error Occured in Trigger');
//opp.addError(workItemId);
}
else
{
req.setWorkitemId(workItemId);
// Submit the request for approval
Approval.ProcessResult result = Approval.process(req);
}
}
}