我正在创建一个类,它最终将使用批处理APEX按计划更新记录。我在编写内部类时遇到了麻烦,并尝试了我能想到的所有可能的语法组合。
public with sharing class AddendumsExpired {
public List<Id> opportunityIds{get;set;}
public List<Id> addendumIds{get;set;}
public List<Id> OppIds(){
for(Opportunity thisOpp :[SELECT Id,StageName,Name,Addendum_Amount__c,Addendum_Amount_No_Discounts__c,Agreement_Balance__c FROM Opportunity WHERE (NOT StageName LIKE '%Proposed%') AND (NOT StageName LIKE '%Accepted%')]){
opportunityIds.add(thisOpp.Id);
}
return opportunityIds;
}
public List<Id> AddIds(){
for(Addendum__c thisAdd :[SELECT Id FROM Addendum__c WHERE Opportunity__c IN :opportunityIds AND Expiration__c < TODAY]){
addendumIds.add(thisAdd.Id);
}
return addendumIds;
}
public class debugging {
system.debug('opportunityIds :: '+opportunityIds);
system.debug('addendumIds :: '+addendumIds);
system.debug('OppIds() :: '+OppIds());
system.debug('AddIds() :: '+AddIds());
}
}
我仍处于测试阶段,debugging
类正在抛出错误。我需要为最终的生产部署提供多个内部类。
我之前使用过上面的语法(public class classname {
)没有任何问题。但是,当我执行匿名此代码块时,我收到错误:
Compile error at line 24 column 8
unexpected token: 'class'
如果有人能对这种情况有所了解,我将非常感激!我很困惑,并想知道为什么这个语法可以在十几个其他类中工作,但不是这个。
答案 0 :(得分:2)
班上的代码:
public class debugging {
system.debug('opportunityIds :: '+opportunityIds);
system.debug('addendumIds :: '+addendumIds);
system.debug('OppIds() :: '+OppIds());
system.debug('AddIds() :: '+AddIds());
}
错误地放在声明部分中,而不是放在任何实际代码的位置(不包括静态,getter和setter)。
将system.debug代码放在内部类(可能是构造函数)内的方法中,它将编译并运行得很好。当然,您需要首先实例化您的调试类,以便它有一个实例来执行它包含的代码。
像这样:
public class Debugging
{
public Debugging(List<Id> opportunityIds)
{
system.debug('opportunityIds :: '+opportunityIds);
}
}
然后你可以创建一个实例来执行这些调试语句,将你的opportunityIds列表传递给你的内部类的构造函数:
Debugging d = new Debugging(opportunityIds);
编辑:
将您的getter和setter更改为以下内容。这些包含适当的列表初始化代码(使用retVal在每个列表中声明一个新的List):
public List<Id> opportunityIds
{
get
{
List<Id> retVal = new List<Id>();
for(Opportunity thisOpp :[SELECT Id,StageName,Name FROM Opportunity WHERE (NOT StageName LIKE '%Proposed%') AND (NOT StageName LIKE '%Accepted%')])
{
opportunityIds.add(thisOpp.Id);
}
return retVal;
}
private set;
}
public List<Id> addendumIds
{
get
{
List<Id> retVal = new List<Id>();
for(Addendum__c thisAdd :[SELECT Id FROM Addendum__c WHERE Opportunity__c IN :opportunityIds AND Expiration__c < TODAY])
{
addendumIds.add(thisAdd.Id);
}
return retVal;
}
private set;
}