function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Megumi FukuiMegumi Fukui 

Apexクラス保存時、「スケジュール可能なクラスに待機中または処理中のジョブがあります」エラー

Apexクラス保存時に、
Error    Error: コンパイルエラー: 行 9、列 24 でスケジュール可能なクラスに待機中または処理中のジョブがあります    
とのエラーにより、保存ができません。

該当のApexクラスは、BatchableやSchedulableは、implementsで指定していない普通のロジッククラスですので、ジョブ設定はしていません。
念のため、「スケジュール済ジョブ」や「Apexジョブ」で該当するジョブがないことは確認しています。

上記のエラーを回避し、Apexクラスが保存できるようにするためには、どのようにしたらよいでしょうか?
Shingo YamazakiShingo Yamazaki
Fukuiさん

エラーが発生している原因はわかりませんが、該当のメッセージは
-------------
設定 > リリース > リリース設定

対応する Apex ジョブが待機中か処理中の場合、コンポーネントのリリースを許可します。
注意: このオプションを有効化すると Apex ジョブがエラーになる場合があります。
------------
を有効にしていただくと回避できませんでしょうか?
Megumi FukuiMegumi Fukui
Shingo Yamazakiさん
ありがとうございます。

-------------
設定 > リリース > リリース設定

対応する Apex ジョブが待機中か処理中の場合、コンポーネントのリリースを許可します。
注意: このオプションを有効化すると Apex ジョブがエラーになる場合があります。
------------
を有効にして、試したのですが、状況は変わりませんでした。
こちらの設定はリリースを受信するときのものと理解しています。

Apexクラス単位で、ファイルの保存時でも、このような設定があるといいのですが。。。
 
Shingo YamazakiShingo Yamazaki
Fukui さん

ご確認ありがとうございます。
解決しませんでしたか。。。

何点か追加でご質問させていただきたいのですが、

1. ソースコードの保存はブラウザで行っているという理解でよろしいでしょうか?
2. エラーはすべてのApexクラスで発生しますか?特定のクラスのみでしょうか?
3. エラーが発生しているコードを貼り付けていただくことは可能でしょうか?
 (難しい場合、エラーが発生している行9だけでも結構です)

 
Megumi FukuiMegumi Fukui
Shingo Yamazakiさん
ありがとうございます。

頂いたご質問につきまして、下記の通り回答させていただきます。

1. ソースコードの保存はブラウザで行っているという理解でよろしいでしょうか?
→はい。設定>アプリケーションの設定>開発>Apexクラス>FAQRegController
 「編集」より編集&保存をおこなっています。

2. エラーはすべてのApexクラスで発生しますか?特定のクラスのみでしょうか?
→発生するクラスとしないクラスがあります。
 テストクラスは発生しません。

3. エラーが発生しているコードを貼り付けていただくことは可能でしょうか?
 (難しい場合、エラーが発生している行9だけでも結構です)
→すべては難しいので、エラー行のみとさせていただきます。
 
public without sharing class FAQRegController {

何かわかりましたら、ご連絡いただけますと幸いです。
どうぞ、よろしくお願いいたします。
 
Shingo YamazakiShingo Yamazaki
Fukui さん

詳細なご回答ありがとうございます。
クラス宣言の時点で発生しているんですね。

解決につながるかわかりませんが、引き続き検証できることがあるとすると以下の点をお試しいただけないでしょうか?

1. 質問2の回答に関して、
> →発生するクラスとしないクラスがあります。
>  テストクラスは発生しません。
→これは、「テストクラスではないApexクラスであれば、FAQRegController以外でも保存時にエラーが発生する」と理解しました。
もしそうでなければ、他のApexクラスは保存可能かお試しいただけないでしょうか。

2. 「スケジュール済みジョブ」や「Apexジョブ」には何も表示されていないものという認識でいますが、いかがでしょうか?
(FAQRegController内で呼び出しているクラスがスケジュール登録されている、等)

3. FAQRegControllerの内容をコピーし、クラス名だけ変更したクラスを新規に作成しようとした場合、保存は可能でしょうか?

4. FAQRegControllerのコードをローカルにコピーなどした上で、クラスを削除することは可能かお試しいただけますでしょうか。
Megumi FukuiMegumi Fukui
Shingo Yamazakiさん
いろいろ、ありがとうございます。
いくつか試してみました。

1. 質問2の回答に関して、
> > →発生するクラスとしないクラスがあります。
> >  テストクラスは発生しません。
> →これは、「テストクラスではないApexクラスであれば、FAQRegController以外でも保存時にエラーが発生する」と理解しました。
> もしそうでなければ、他のApexクラスは保存可能かお試しいただけないでしょうか。
→テストクラス以外で、保存できるクラスもあります。
 ただ、他にも同様エラーで保存できないクラスもあります。

2. 「スケジュール済みジョブ」や「Apexジョブ」には何も表示されていないものという認識でいますが、いかがでしょうか?
(FAQRegController内で呼び出しているクラスがスケジュール登録されている、等)
→はい、何も表示されていません。
 FAQRegController内で呼び出しているクラスにも、スケジュールのクラスはありません。

3. FAQRegControllerの内容をコピーし、クラス名だけ変更したクラスを新規に作成しようとした場合、保存は可能でしょうか?
→こちら、できました。
 クラス名さえ違えば、同等の処理を実装可能なことはわかりました。

4. FAQRegControllerのコードをローカルにコピーなどした上で、クラスを削除することは可能かお試しいただけますでしょうか。
→Visualforceから参照しているので、削除ができないことはわかった上で「削除」ボタンを押したところ、
 ・このApex クラスは、Salesforce の他の場所で参照されています。それを削除してから、もう一度やり直してください。 Visualforce ページリンク
 ・この Schedulable クラスは使用中です。 Apex クラス
 前者は想定範囲内ですが、後者はやはりスケジュールとしてなんらかの参照がされていそうだということが判明しました。

また何かわかりましたら、ご連絡いただけますと幸いです。
どうぞ、よろしくお願いいたします。
 
Shingo YamazakiShingo Yamazaki
Fukuiさん

コメントが遅れてしまいすみません。
4. のエラーメッセージが発生する条件として、Apexをスケジュール登録している場合以外にもないか調べてみたのですが
それらしい情報が見つからず、原因がわかりませんでした。

お役に立てず大変申し訳ないのですが、一度サポートに問い合わせてみることをお勧めいたします。
 
Megumi FukuiMegumi Fukui
Shingo Yamazakiさん

現象をサポートに問い合わせてみます。
こちらこそ、いろいろありがとうございました。

 
Megumi FukuiMegumi Fukui
Shingo Yamazakiさん

時間があきましたが、本件解決しました。
結局のところ、
バッチクラスからコールされる処理クラスで、Utilの共通クラスをコールしている状況で
ただのコントロールクラス(FAQRegController等)からもUtilの共通クラスを利用していたので、

========================================
Error: コンパイルエラー: 行 9、列 24 でスケジュール可能なクラスに待機中または処理中のジョブがあります    
========================================

保存できなかった、というコトでした。

「バッチクラスを作成するときは、独立したロジックにしないと、他に影響する」
という教訓となりました。

いろいろヘルプして頂きまして、誠にありがとうございました。
Shingo YamazakiShingo Yamazaki
Fukui さん

共有いただきありがとうございます!
なるほど、私も知らないケースで勉強になりました。
(これは気づきにくいですね。。。)

後学のために教えていただきたいのですが、今回の場合
バッチクラス自体はスケジュール登録されていたということでしょうか?

つまり、
 
// ただのコントロールクラス
public class FAQRegController {
  public void run() {
    // Util クラスを使用
    Util.foo();
  }
}


// バッチクラス
global class MyBatch implements Database.Batchable<sObject> {

  ...
  global void execute(Database.BatchableContext BC, List<sObject> scope){
    // ここでも Util クラスを使用
    Util.foo();
  }
}

のような構成になっていたという理解なのですが、この例においてMyBatchクラスはスケジュール登録されていたということでしょうか?
それとも、スケジュール登録されていないのに今回のエラーが再現したということでしょうか?
Megumi FukuiMegumi Fukui
Shingo Yamazakiさん

ご確認いただき、ありがとうございます。

コードの構成については、ご理解されている通りです。
MyBatchクラスがスケジュールされているときは、
FAQRegControllerの保存でできませんでした。
MyBatchクラスのスケジュールを削除すると
FAQRegControllerの保存ができるようになったという状況です。

よろしくお願いいたします。
 
Shingo YamazakiShingo Yamazaki
Fukui さん

なるほど、一見関係なさそうなバッチでもスケジュールから削除を試してみた方がいいということですね。
ご教示いただきありがとうございました。