2013-02-25 89 views
1

我有很多類實現Schedulable接口。我想通過另一個頂點類同時調度多個Apex類。所以我需要查詢所有實現Schedulable接口的類。如何獲得實現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);  
} 

問題: 如何查詢所有這些實現調度接口頂點類?這樣我可以直接將它傳遞給system.schedule()方法。

不同的嘗試: 當得到這個錯誤後,我試着只查詢一個實現可調度接口的apex類(Known Class)。再次沒有用處。請參閱下面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);  
} 

ERROR: 「你必須選擇一個實現了可調度接口頂點類的行127列13。」

謝謝提前

Satheeskumar

+0

您知道我們有一個專門用於salesforce的stackexchange站點嗎?隨時檢查一下http://salesforce.stackexchange.com – Prady 2013-02-26 07:10:56

回答

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: Invalid conversion from runtime type SchedulerTest to system.Schedulable

+0

非常感謝你,先生。它現在有效。 – 2013-02-26 04:32:28

+0

嗨,主席先生,你能否給我提供解決方案來檢索實現Schedulable類的類,或者是否有任何選項來檢查特定類實現可調度類或不是。在此先感謝 – 2013-02-26 05:18:51

+0

棘手。 Apex沒有反射能力,可以幫助你的情況。您無法輕鬆瞭解哪些類實現了哪個接口。嘗試閱讀他們的身體尋找「可調度」的發生?但是這是一個巨大的內存管理,它不能從託管包中掃描類......或者爲每個類創建一個type-> newinstance,然後使用「instanceof」運算符。它甚至不會拋出任何異常,即使是像'System.debug('test string'instanceof Schedulable)這樣的愚蠢比較;'你可以在一些自定義設置中緩存這個結果以節省自己循環所有類的時間? – eyescream 2013-02-26 07:31:38

相關問題