适当的方法是什么,包括顶点的内部类?

时间:2012-08-01 16:46:02

标签: class salesforce apex-code

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

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

1 个答案:

答案 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;
}