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

Apex类匹配两个自定义对象字段报错,求代码优化修复方案

问题原因说明
  • 第2行报错:你声明的matchPositionsWithCandidate()方法返回类型为String,但方法内没有对应return语句;同时方法结束的}位置错误,把后续候选人匹配逻辑直接暴露在类作用域下,直接触发了第二个语法报错。
  • 第26行报错:除了上述方法提前闭合的问题外,原代码最后两层循环少写了一个结束},语法结构不闭合。
优化后可运行代码

为了适配LWC数据表格的展示需求,代码新增了Aura注解和前端友好的返回包装结构,可直接在开发者控制台运行,也可直接被LWC调用:

public class MatchPosition {
    // 岗位匹配结果包装类,适配LWC数据表格渲染
    public class PositionMatchResult {
        @AuraEnabled
        public String positionName {get; set;}
        @AuraEnabled
        public String positionLocation {get; set;}
        @AuraEnabled
        public List<CandidateInfo> matchedCandidates {get; set;}
    }

    // 候选人信息包装类
    public class CandidateInfo {
        @AuraEnabled
        public String fullName {get; set;}
        @AuraEnabled
        public String email {get; set;}
        @AuraEnabled
        public String mobile {get; set;}
    }

    @AuraEnabled(cacheable=true)
    public static List<PositionMatchResult> matchPositionsWithCandidate() {
        Set<String> validStatus = new Set<String>{'New', 'Open'};
        List<Position__c> openPositions = [
            SELECT Id, Name, Location__c, Status__c 
            FROM Position__c 
            WHERE Status__c IN :validStatus
        ];
        
        // 按「岗位名称-地点」生成岗位映射
        Map<String, Position__c> positionKeyMap = new Map<String, Position__c>();
        for (Position__c pos : openPositions) {
            if(pos.Name != null && pos.Location__c != null) {
                String key = pos.Name + '-' + pos.Location__c;
                positionKeyMap.put(key, pos);
            }
        }

        // 按「意向岗位-所在地点」分组候选人
        Map<String, List<Candidate__c>> candidateGroupMap = new Map<String, List<Candidate__c>>();
        List<Candidate__c> allCandidates = [
            SELECT Position__c, Location__c, Mobile__c, First_Name__c, Last_Name__c, Email__c 
            FROM Candidate__c
        ];
        for (Candidate__c can : allCandidates) {
            if(can.Position__c == null || can.Location__c == null) {
                continue;
            }
            String key = can.Position__c + '-' + can.Location__c;
            if(!candidateGroupMap.containsKey(key)) {
                candidateGroupMap.put(key, new List<Candidate__c>());
            }
            candidateGroupMap.get(key).add(can);
        }

        // 组装匹配结果
        List<PositionMatchResult> matchResult = new List<PositionMatchResult>();
        for(String key : positionKeyMap.keySet()) {
            Position__c currentPos = positionKeyMap.get(key);
            PositionMatchResult resultItem = new PositionMatchResult();
            resultItem.positionName = currentPos.Name;
            resultItem.positionLocation = currentPos.Location__c;
            resultItem.matchedCandidates = new List<CandidateInfo>();

            // 匹配到候选人则填充信息
            if(candidateGroupMap.containsKey(key)) {
                for(Candidate__c matchedCan : candidateGroupMap.get(key)) {
                    CandidateInfo canInfo = new CandidateInfo();
                    canInfo.fullName = matchedCan.First_Name__c + ' ' + matchedCan.Last_Name__c;
                    canInfo.email = matchedCan.Email__c;
                    canInfo.mobile = matchedCan.Mobile__c;
                    resultItem.matchedCandidates.add(canInfo);
                }
            }
            matchResult.add(resultItem);
        }
        return matchResult;
    }
}
验证方式

在开发者控制台匿名执行窗口运行如下代码即可查看匹配结果:

System.debug(MatchPosition.matchPositionsWithCandidate());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:54:02