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

APEX开发双变量条件场景下如何避免多层if/else语句冗余

APEX多动态条件分支优化方案

核心逻辑是将可变的「国家+行业-所有者ID」映射关系与业务代码解耦,避免大量硬编码的if/else分支,后续新增组合无需修改业务逻辑。

方案1:自定义元数据类型实现(生产环境首选)

该方案完全剥离配置和代码,后续扩展零代码修改,是Salesforce平台的标准最佳实践:

  • 第一步:新建自定义元数据类型Lead_Owner_Mapping__mdt,新增3个字段:Country__c(文本类型,存国家名称)、Industry__c(文本类型,存行业名称)、Owner_Id__c(文本类型,存对应队列/用户的ID)
  • 第二步:在自定义元数据中维护所有国家+行业组合对应的OwnerID记录,后续新增国家/行业组合仅需新增一条元数据记录即可
  • 第三步:改造原有代码,实现逻辑如下:
public static void changeOwnerToQueue(List<String> DeactivatedUserIds){
    // 预查询自定义元数据生成映射Map,key为国家|行业拼接值
    Map<String, Id> countryIndustryToOwnerMap = new Map<String, Id>();
    for(Lead_Owner_Mapping__mdt mapping : [SELECT Country__c, Industry__c, Owner_Id__c FROM Lead_Owner_Mapping__mdt]){
        countryIndustryToOwnerMap.put(mapping.Country__c + '|' + mapping.Industry__c, mapping.Owner_Id__c);
    }
    List<Lead> updatedQueue = new List<Lead>();
    // 固定条件直接写在SOQL中,减少返回的无效数据量
    List<Lead> leadList = [SELECT Id, Countryy__c, Industry__c 
                           FROM Lead 
                           WHERE OwnerId IN :DeactivatedUserIds 
                           AND Lead_Type__c = 'Outbound' 
                           AND Status = 'Open'];
    for(Lead l : leadList){
        String mapKey = l.Countryy__c + '|' + l.Industry__c;
        if(countryIndustryToOwnerMap.containsKey(mapKey)){
            l.OwnerId = countryIndustryToOwnerMap.get(mapKey);
            updatedQueue.add(l);
        }
    }
    update updatedQueue;
}

方案2:静态Map实现(临时快速改造)

如果暂时不需要配置化,可先用静态Map存储映射关系,相比多if分支更易维护:

public static void changeOwnerToQueue(List<String> DeactivatedUserIds){
    // 初始化映射Map,新增组合直接加新的key-value即可
    Map<String, Id> countryIndustryToOwnerMap = new Map<String, Id>{
        'France|Accounting' => '00G5J000000pX41',
        'France|Medical' => '对应OwnerID',
        'UK|Accounting' => '对应OwnerID'
        // 其余组合直接在此追加
    };
    List<Lead> updatedQueue = new List<Lead>();
    List<Lead> leadList = [SELECT Id, Countryy__c, Industry__c 
                           FROM Lead 
                           WHERE OwnerId IN :DeactivatedUserIds 
                           AND Lead_Type__c = 'Outbound' 
                           AND Status = 'Open'];
    for(Lead l : leadList){
        String mapKey = l.Countryy__c + '|' + l.Industry__c;
        if(countryIndustryToOwnerMap.containsKey(mapKey)){
            l.OwnerId = countryIndustryToOwnerMap.get(mapKey);
            updatedQueue.add(l);
        }
    }
    update updatedQueue;
}

核心优化点

  • 固定筛选条件前置到SOQL层,大幅减少循环处理的记录数,提升执行性能
  • 映射关系与业务逻辑分离,后续新增国家/行业组合无需修改业务处理代码,可维护性大幅提升
  • 自定义元数据方案支持跨环境部署,无需单独调整硬编码ID,适配生产、沙箱等多环境场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:27:02