Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

スケジュール済み Apex ジョブを一度だけ実行

公開日: May 3, 2026
説明

UI でスケジュールされた Apex を使用するとき、スケジュールされたクラスを 1 回だけ実行するように設定できません。常に繰り返されます。これを回避するには、システムログ経由で System.scheduled を使用する必要があります。

解決策

注意: ここで示しているコードは、毎時の最後の 10 分間は機能しません。


今から 10 分後に 1 回だけジョブを実行するコードの例

String hour = String.valueOf(Datetime.now().hour());
String min = String.valueOf(Datetime.now().minute() + 10); 
String ss = String.valueOf(Datetime.now().second());

//parse to cron expression
String nextFireTime = ss + ' ' + min + ' ' + hour + ' * * ?';

MyScheduledJob s = new MyScheduledJob(); 
System.schedule('Job Started At ' + String.valueOf(Datetime.now()), nextFireTime, s);

Schedulable インターフェースを実装する終了メソッドをクラスに追加して、ジョブを中止します。これにより、ジョブが 2 回以上実行されなくなります。

ジョブを中止するコードの例

global void finish(Database.BatchableContext BC)
{
// Get the ID of the AsyncApexJob representing this batch job from Database.BatchableContext.
// Query the AsyncApexJob object to retrieve the current job's information.
AsyncApexJob a = [SELECT Id, Status, NumberOfErrors, JobItemsProcessed, TotalJobItems, CreatedBy.Email ..... FROM AsyncApexJob WHERE Id = 
:BC.getJobId()];

//then use the active job id and abort it
system.abortJob(a.id);
}
ナレッジ記事番号

000382128

 
読み込み中
Salesforce Help | Article