6个复选框组合触发Approval Process的Apex实现方案咨询
问题说明
我们有6个复选框,用户选择任意组合时需触发审批流程,每个复选框对应一位审批人。目前梳理出50种复选框组合(如下),手动添加审批步骤不可行,求可行实现思路(含Apex解决方案)。
APAC + Footwear APAC + Garments APAC + Gloves EMEA + Footwear EMEA + Garments EMEA + Gloves Americas + Footwear Americas + Garments Americas + Gloves APAC + EMEA + Footwear APAC + EMEA + Garments APAC + EMEA + Gloves APAC + Americas + Footwear APAC + Americas + Garments APAC + Americas + Gloves APAC + Footwear + Garments APAC + Footwear + Gloves APAC + Garments + Gloves EMEA + Americas + Footwear EMEA + Americas + Garments EMEA + Americas + Gloves EMEA + Footwear + Garments EMEA + Footwear + Gloves EMEA + Garments + Gloves Americas + Footwear + Garments Americas + Footwear + Gloves Americas + Garments + Gloves APAC + EMEA + Americas + Footwear APAC + EMEA + Americas + Garments APAC + EMEA + Americas + Gloves APAC + EMEA + Footwear + Garments APAC + EMEA + Footwear + Gloves APAC + EMEA + Garments + Gloves APAC + Americas + Footwear + Garments APAC + Americas + Footwear + Gloves APAC + Americas + Garments + Gloves APAC + Footwear + Garments + Gloves EMEA + Americas + Footwear + Garments EMEA + Americas + Footwear + Gloves EMEA + Americas + Garments + Gloves EMEA + Footwear + Garments + Gloves Americas + Footwear + Garments + Gloves APAC + EMEA + Americas + Footwear + Garments APAC + EMEA + Americas + Footwear + Gloves APAC + EMEA + Americas + Garments + Gloves APAC + EMEA + Footwear + Garments + Gloves APAC + Americas + Footwear + Garments + Gloves EMEA + Americas + Footwear + Garments + Gloves APAC + EMEA + Americas + Footwear + Garments + Gloves
可行实现方案
方案一:无代码动态审批人配置
- 建立审批人映射表
创建自定义对象(如审批人映射),设置两个核心字段:
复选框标识__c:文本类型,存储复选框名称(如APAC、Footwear)对应审批人__c:Lookup到User对象,关联该复选框对应的审批人
将6个复选框的审批人关系全部维护到这个对象中。
- 配置审批流程动态步骤
在标准审批流程中添加单个审批步骤,设置:
- 审批人:选择
基于公式的用户,编写公式动态拼接所有选中复选框对应的审批人。公式示例(假设对象上的复选框字段为APAC__c、Footwear__c等):
BLANKVALUE(IF(APAC__c, $User.APAC_审批人__c, NULL), "") & BLANKVALUE(IF(Footwear__c, $User.Footwear_审批人__c, NULL), "") & BLANKVALUE(IF(Garments__c, $User.Garments_审批人__c, NULL), "") & BLANKVALUE(IF(Gloves__c, $User.Gloves_审批人__c, NULL), "") & BLANKVALUE(IF(EMEA__c, $User.EMEA_审批人__c, NULL), "") & BLANKVALUE(IF(Americas__c, $User.Americas_审批人__c, NULL), "")
- 审批规则:根据业务需求选择
需要所有指定审批人批准(并行)或需要任意指定审批人批准。 - 触发条件:设置为
至少有一个复选框被选中,确保仅当用户选择组合时触发审批。
方案二:Apex代码自定义审批
通过Apex触发器或自定义按钮触发审批,动态收集选中复选框对应的审批人,调用Salesforce审批API创建请求。
触发器实现示例
trigger CustomObjectApproval on Custom_Object__c (after insert, after update) { List<Id> approverIds = new List<Id>(); // 可替换为从自定义对象查询的映射,避免硬编码 Map<String, Id> checkboxToApprover = new Map<String, Id>{ 'APAC' => '005XXXXXXXXXXXX', 'Footwear' => '005XXXXXXXXXXXX', 'Garments' => '005XXXXXXXXXXXX', 'Gloves' => '005XXXXXXXXXXXX', 'EMEA' => '005XXXXXXXXXXXX', 'Americas' => '005XXXXXXXXXXXX' }; for(Custom_Object__c record : Trigger.new) { // 逐个判断复选框是否选中,收集对应审批人ID if(record.APAC__c) approverIds.add(checkboxToApprover.get('APAC')); if(record.Footwear__c) approverIds.add(checkboxToApprover.get('Footwear')); if(record.Garments__c) approverIds.add(checkboxToApprover.get('Garments')); if(record.Gloves__c) approverIds.add(checkboxToApprover.get('Gloves')); if(record.EMEA__c) approverIds.add(checkboxToApprover.get('EMEA')); if(record.Americas__c) approverIds.add(checkboxToApprover.get('Americas')); } if(!approverIds.isEmpty()) { Approval.ProcessSubmitRequest submitReq = new Approval.ProcessSubmitRequest(); submitReq.setObjectId(Trigger.new[0].Id); submitReq.setApproverIds(approverIds); submitReq.setSubmitterId(UserInfo.getUserId()); // 如需串行审批,可构建ProcessStep列表传入setProcessSteps() Approval.ProcessResult result = Approval.process(submitReq); // 错误处理 if(!result.isSuccess()) { for(Database.Error err : result.getErrors()) { System.debug('审批提交失败:' + err.getMessage()); // 可添加抛出异常或记录错误日志的逻辑 } } } }
优化:从自定义对象动态获取审批人
避免硬编码审批人ID,从之前创建的审批人映射对象中查询:
Map<String, Id> checkboxToApprover = new Map<String, Id>(); for(Approver_Mapping__c mapping : [SELECT Checkbox_Name__c, Approver__c FROM Approver_Mapping__c]) { checkboxToApprover.put(mapping.Checkbox_Name__c, mapping.Approver__c); }
方案三:Flow+自定义元数据(低代码)
- 自定义元数据配置
创建审批人配置元数据类型,包含复选框名称和审批人ID字段,维护6个复选框的审批人关系。 - 记录触发流设置
- 触发条件:记录创建/更新且至少一个复选框选中
- 遍历所有复选框,通过
获取记录元素查询对应元数据中的审批人ID,收集到集合中 - 调用
提交审批元素,将收集到的审批人ID列表传入,设置审批规则(并行/串行)
内容的提问来源于stack exchange,提问作者velvizhi R
相关产品推荐
相关产品推荐

