如何获得实现Schedulable接口的Apex类?

时间:2013-02-25 15:39:01

标签: salesforce apex-code

我有许多实现可调度接口的类。我想通过另一个顶级课程一次编写多个Apex类。所以我需要查询所有实现Schedulable接口的类。

我正在使用以下代码snipet来实现此目的,但我收到的编译器错误如下

错误: “您必须选择一个实现Schedulable接口的Apex类。在第127行第13列”

CODE:

list<ApexClass> listClasses; 

String input='0 0 8 13 2 ?';

listClasses=[Select Id, Name,body from ApexClass]   
for(ApexClass a:listClasses){            
        system.schedule(a.Name+' AutoScheduler', input, a);    
}

问题: 如何查询实现可调度接口的所有apex类?这样我就可以直接将它传递给system.schedule()方法。

不同尝试: 在收到此错误后,我尝试仅查询实现可调度接口的一个顶点类(已知类)。再没有用。请参阅下面的snipet了解不同的尝试

CODE:

list<ApexClass> listClasses; 

String input='0 0 8 13 2 ?';

//Retriving only one class of Name='SchedularTest' 

listClasses=[Select Id, Name,body from ApexClass where Name ='SchedularTest']   
for(ApexClass a:listClasses){            
        system.schedule(a.Name+' AutoScheduler', input, a);    
}

错误: “您必须选择一个实现Schedulable接口的Apex类。在第127行第13列”

提前致谢

Satheeskumar

1 个答案:

答案 0 :(得分:5)

我说错误信息很清楚?

您传递给System.schedule的最后一个参数必须是一个新对象。类的新实例。你传递的是关于类的元数据信息,它的正文等...这些东西不能像那样“运行”。

我敢打赌system.schedule('SchedulerTest AutoScheduler', input, new SchedulerTest());能正常工作吗?如果没有 - 确保该类编译正常,也可能是否标记为有效。

请参阅?你怎么看待代表磁盘上数据库/文件中一行的东西像工作类一样对象“工作”?

如果您需要创建仅具有此类名称的给定类的新对象,您可能需要检查Type methods

String className = 'SchedulerTest';
Type t = Type.forName(className);

System.schedule(className, '0 0 8 13 2 ?', (Schedulable)t.newInstance());

这会生成一个新对象(它实际上是一个通用对象),然后将其转换为该方法可接受的内容。如果类没有实现接口,你将会遇到运行时失败:

  

System.TypeException:运行时类型的转换无效   SchedulerTest到system.Schedulable