You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

可行实现方案

方案一:无代码动态审批人配置

  1. 建立审批人映射表
    创建自定义对象(如审批人映射),设置两个核心字段:
  • 复选框标识__c:文本类型,存储复选框名称(如APAC、Footwear)
  • 对应审批人__c:Lookup到User对象,关联该复选框对应的审批人
    将6个复选框的审批人关系全部维护到这个对象中。
  1. 配置审批流程动态步骤
    在标准审批流程中添加单个审批步骤,设置:
  • 审批人:选择基于公式的用户,编写公式动态拼接所有选中复选框对应的审批人。公式示例(假设对象上的复选框字段为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+自定义元数据(低代码)

  1. 自定义元数据配置
    创建审批人配置元数据类型,包含复选框名称和审批人ID字段,维护6个复选框的审批人关系。
  2. 记录触发流设置
  • 触发条件:记录创建/更新且至少一个复选框选中
  • 遍历所有复选框,通过获取记录元素查询对应元数据中的审批人ID,收集到集合中
  • 调用提交审批元素,将收集到的审批人ID列表传入,设置审批规则(并行/串行)

内容的提问来源于stack exchange,提问作者velvizhi R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:18:12