1

Schedulable Interface を実装する多くのクラスがあります。別の Apex クラスを使用して、一度に複数の Apex クラスをスケジュールしたいと考えています。そのため、Schedulable インターフェースを実装するすべてのクラスを照会する必要があります。

これを実現するために次のコード スニペットを使用していますが、次のようなコンパイラ エラーが発生します。

エラー: 「Schedulable インターフェースを実装する Apex クラスを選択する必要があります。127 行目、13 列目」

コード:

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() メソッドに直接渡すことができるようにします。

別の試行: このエラーが発生した後、スケジュール可能なインターフェイスを実装する頂点クラス (既知のクラス) を 1 つだけクエリしようとしました。また駄目。別の試みについては、以下のスニペットを参照してください

コード:

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 列目」

前もって感謝します

サティースクマール

4

1 に答える 1

5

エラーメッセージはかなり明確だと思いますか?

System.schedule に渡す最後のパラメーターは、新しいオブジェクトでなければなりません。クラスの新しいインスタンス。あなたが渡しているのは、クラスに関するメタデータ情報、それは本体などです...このようなものはそのように「実行」することはできません。

私はそれがうまくいくと確信していsystem.schedule('SchedulerTest AutoScheduler', input, new SchedulerTest());ますか?そうでない場合は、クラスが正常にコンパイルされていることを確認し、有効としてマークされているかどうかも確認してください。

見る?データベース内の行/ディスク上のファイルを表すものが、クラスのオブジェクトのように「機能する」ことをどのように期待しますか?

このクラスの名前のみを持つ特定のクラスの新しいオブジェクトを作成する必要がある場合は、Typeメソッドを確認することをお勧めします。

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

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

これにより、新しいオブジェクト (実際には汎用オブジェクト) が作成され、メソッドで受け入れられるものにキャストされます。クラスがインターフェースを実装していない場合、実行時エラーが発生します。

System.TypeException: ランタイム型 SchedulerTest から system.Schedulable への変換が無効です

于 2013-02-25T17:07:25.250 に答える