调试apex salesforce中的可调度作业

时间:2013-02-17 12:47:21

标签: salesforce apex-code visualforce

我正在尝试运行可调度的工作,我从未在salesforce中使用过可调度的工作

这是我的代码

global class scheduledMerge implements Schedulable{
   global void execute(SchedulableContext SC) {
      System.debug('Hello World'); 
   }
}

          created a cusom controller
public class schedulableMerge{

public schedulableMerge(){

}
public PageReference Hello(){
scheduledMerge m = new scheduledMerge();
        String sch = '0 10 * * 1-12 ? *';
        system.schedule('Merge Job', sch, m);
        return null;
}

}

和visualforce页面是

<apex:page controller="schedulableMerge">
  <!-- Begin Default Content REMOVE THIS -->
    <h1>Congratulations</h1>
  This is your new Page
  <!-- End Default Content REMOVE THIS -->
  <apex:form >
  <apex:commandButton value="Press it" action="{! Hello}" />
</apex:form>

</apex:page>

当我按下按钮按下它时,所有可调度作业中都有一个作业,但只有一个选项删除它。没有管理选项。我认为这个工作应该每10分钟运行一次。我看到来自Monitoring&gt; Debug Log的调试日志显示没有日志。你能告诉我每一分钟运行工作的表达方式是什么,以及在哪里看到调试日志?我的目标是看到可调度工作的工作

3 个答案:

答案 0 :(得分:4)

好消息 - 您不需要visualforce页面和控制器。坏消息 - 你不能以1分钟的间隔安排工作。我认为5分钟是最小的(但我不确定,你必须尝试它)。

如何按需运行(一次)?从Developer Console或Eclipse的“Execute Anonymous”块。

确保将您的用户添加到调试日志中,并简单地强制运行您必须在接口中实现的execute方法:

scheduledMerge sm = new scheduledMerge();
sm.execute(null);

在您确信一次运行成功完成后,尝试使用cron表达式。如果您每天使用一次频率很好 - 根本不需要这些表达式,请转到设置 - &gt;开发 - &gt;单击并单击[Schedule Apex]。只有当您每天需要多次运行时,才使用代码来安排课程。

最后但并非最不重要 - 转到设置并在搜索中输入“Apex jobs”。您应该看到最近执行的所有异步任务的信息(预定作业,批次,@future方法等)

答案 1 :(得分:2)

  

请告诉我每分钟运行作业的表达式是什么,以及在哪里查看调试日志?

你不能每分钟都运行它。最短为一小时 - Apex Scheduler。 有一个人 - 尽可能频繁地开始工作以开始大量工作。

您可以尝试在当前正在运行的作业中安排新作业(如果可能的话)运行每个Datetime.now()。minute()+ 1.这个想法在我脑海中浮现。我没试过。所以同一个班级将在一分钟内开始。但是不要忘记在这个课程中杀死当前的工作,这样你就不会创建大量的预定工作并且没有州长限制。

答案 2 :(得分:0)

我为Scheduled Apex做了类似的事情,运行时间为15,30,45,60分钟(即每15分钟)

缺点是,我们需要为此执行4个不同的预定Apex作业。

System.schedule('Every 0th min', '0 0 * * * ?', new scheduledMerge());
System.schedule('Every 15th min', '0 15 * * * ?', new scheduledMerge());
System.schedule('Every 30th min', '0 30 * * * ?', new scheduledMerge());
System.schedule('Every 45th min', '0 45 * * * ?', new scheduledMerge());