我已经被困在这个顶级课堂上18个小时了。如果你能帮我找出问题所在,我会很感激的。基本上,这段代码应该匹配两个对象之间的字段,我不知道为什么我收到以下错误:
- 缺少返回语句,要求返回类型:String - Line 2
- 期待'}',但结果是:'for' -第26行
输出应该显示,当候选对象的位置和位置标题与位置对象的位置和标题匹配时,它将只显示我在Visual Studio上制作的闪电web组件的数据表上匹配的那些值。
我需要一些帮助来改进这段代码,这样我就可以在开发控制台运行它了。
public class Matchposition {
public static String matchPositionsWithCandidate() {
Set<String> statuses = new Set<String> {'New', 'Open'};
List<Position__c> openPositions = [SELECT Id, Name, Location__c, Status__c FROM Position__c WHERE Status__c IN :statuses];
//system.debug(openPositions);
Set<String> openPositionAndLocation = new Set<String>();
Map<String, Position__c> openPositionMap = new Map<String, Position__c>();
for (Position__c position : openPositions) {
openPositionMap.put(position.Name + '-' + position.Location__c, position);
openPositionAndLocation.add(position.Name + '-' + position.Location__c);
}
}
//for(String key : openPositionMap.keySet()) {
// system.debug('*** Start ***');
// system.debug('key :' + key);
// system.debug('value :' + openPositionMap.get(key));
// system.debug('*** End ***');
//}
Map<String, List<Candidate__c>> candidatesMap = new Map<String, List<Candidate__c>>();
List<Candidate__c> candidates = [SELECT Position__c, Location__c, Mobile__c, First_Name__c, Last_Name__c, Email__c FROM Candidate__c];
for (Candidate__c candidate : candidates) {
if(candidatesMap.containsKey(candidate.Position__c + '-' + candidate.Location__c)) {
candidatesMap.get(candidate.Position__c + '-' + candidate.Location__c).add(candidate);
} else {
candidatesMap.put(candidate.Position__c + '-' + candidate.Location__c, new List<Candidate__c> {candidate});
}
}
system.debug('*************** OPEN POSITIONS ***************');
for (String key : openPositionAndLocation) {
system.debug('====> ' + openPositionMap.get(key).Name);
if(candidatesMap.containsKey(key)) {
system.debug('***** Candidates *****');
for(Candidate__c candidate : candidatesMap.get(key)) {
system.debug('------- Name : ' + candidate.First_Name__c + ' ' + candidate.Last_Name__c);
system.debug('------- Email : ' + candidate.Email__c);
system.debug('------- Mobile : ' + candidate.Mobile__c);
}
} else {
system.debug('********* No Candidates');
}
}
您肯定有一个问题,而不是其他问题,就是整体结构。删除实际的代码行后,您的类现在是这样布局的:
public class Matchposition {
public static String matchPositionsWithCandidate() {
// Code here
}
// more code here - problem!
}
在类的主体中有很多松散的逻辑,这在Apex中是无效的。此外,类主体中的代码引用方法matchPositionsWithCandidate()
内部声明的变量,这些变量作用域(可见)到该方法。
matchPositionsWithCandidate()
也声明返回一个字符串,但实际上什么也不返回。
由于您没有在任何地方返回任何数据,因此您可以采取的一个步骤是确保所有逻辑都在方法matchPositionsWithCandidate()
的范围内(花括号),并声明该方法返回void
,而不是String
。
您也可能有不平衡的大括号-看起来在最后的else
之后缺少一个-如果它不是简单地在复制和粘贴中省略的话。
我不确定为什么这个代码存在。虽然大部分逻辑都是正确的,但是在Candidate__c
和Position__c
之间使用关系对数据进行建模比在两个位置都存储名称更有意义。那么,你就不需要任何"匹配"了。只是一个简单的SOQL关系查询。