场景:在做招投标站点时,供应商通过站点注册,录入公司相关信息,包括组织代码,公司资质,营业执照后,需要专员对其信用及真实性进行审核,由于某一注册类型的供应商的审核人是与注册类型相关的专员审核的,比如注册类型为品牌类,那可能需要品牌类专员审核,物料制作类需要物料制作类的专员审核。这时我们使用代码来实现就显得尤为关键了。
代码片段:
public class AccountTriggerFunction {
/**
功能名称:自动提交审批
描述:自动根据注册类型将供应商信息提交给相应专员审核
作者:Wilson
日期:2017-07-17
**/
public static void autoSubmitRecord(List<Account> accts){
for(Account acc : accts){
if(acc.Register_Type__c == '品牌类'){
submitApproval(acc.Id, getApproverIdList('Brand_Specialist'));
}else if(acc.Register_Type__c == '事件行销') {
submitApproval(acc.Id, getApproverIdList('Activity_Specialist'));
}else if(acc.Register_Type__c == '展览展示') {
submitApproval(acc.Id, getApproverIdList('Show_Specialist'));
}else if(acc.Register_Type__c == '物料制作') {
submitApproval(acc.Id, getApproverIdList('Material_Specialist'));
}else if(acc.Register_Type__c == '线上媒介') {
submitApproval(acc.Id, getApproverIdList('Online_Specialist'));
}else {
submitApproval(acc.Id, getApproverIdList('Offline_Specialist'));
}
}
}
/**
功能名称:提交审批
描述:自定义审批
参数:供应商记录id和审批人Id集合
作者:Wilson
日期:2017-07-17
**/
public static void submitApproval(Id accId, List<Id> approverIdList){
Approval.ProcessSubmitRequest req1 = new Approval.ProcessSubmitRequest();
req1.setComments('新供应商注册信息已提交,请审核!');
req1.setObjectId(accId);// 供应商id
req1.setSubmitterId(UserInfo.getUserId());// 初始提交人id
req1.setProcessDefinitionNameOrId('AdsRigistrationInfoApproval');// 批准进程api Name
req1.setNextApproverIds(approverIdList);// 下一步审批人,传入参数必须为List,注意是队列类型小组Id,而不是用户Id
req1.setSkipEntryCriteria(true);// 是否跳过标准
Approval.ProcessResult result = Approval.process(req1);
}
//
/**
功能名称:获取审批人Id集合
描述:根据队列名称获取审批人Id集合
参数:队列名称
返回值:队列Id
作者:Wilson
日期:2017-07-17
**/
public static List<Id> getApproverIdList(String queueName){
List<Id> approverIdList = new List<Id>();
List<Group> groups = [SELECT Id
FROM Group
WHERE Type = 'Queue' and DeveloperName = :queueName];// 查出来的Id只有一个
for(Group g : groups) {
approverIdList.add(g.Id);
}
return approverIdList;
}
}
批准进程:
注意:假如将approvalIdList视作User Id,那么会出现如下异常:
“System.DmlException: Process failed. First exception on row 0; first error: REQUIRED_FIELD_MISSING, missing required field:[]”
技巧:如果想了解一个对象包含哪些字段,在sfdc自带IDE中,使用ctr+shift+o后点开具体对象即可。
Bulk Approval Processing from List View in Salesforce
见链接:https://www.xgeek.net/salesforce/bulk-approval-processing-from-list-view-in-salesforce/
如何测试批量提交审批类:
见链接:https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_process_example.htm