我有许多实现可调度接口的类。我想通过另一个顶级课程一次编写多个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
答案 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