1

我正在创建一个类,该类最终将使用批处理 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'

如果有人能对这种情况有所了解,我将不胜感激!我很困惑,想知道为什么这种语法可以在其他十几个类中工作,但不是这个。

4

1 回答 1

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);
   }
}

然后你可以创建一个实例来执行这些调试语句,将你的机会ID列表传递给你的内部类的构造函数:

Debugging d = new Debugging(opportunityIds);

编辑:

将您的 getter 和 setter 更改为以下内容。这些包含列表的正确初始化代码(使用 retVal 在每个列表中声明一个新列表):

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;
}
于 2012-08-01T17:07:06.647 回答