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
相关产品推荐
相关产品推荐

