[AX]AX2012 创建批处理任务

要运行批处理任务必须有一台batch server,在system administration->Setup->Server configuration下选择一台AOS服务器,选中Is batch server,这台AOS服务器就成为一台batch server的服务器。

和Axapta 3.0一样,要运行批处理任务需要从RunBaseBatch扩展一个类:

class Batch4DemoClass extends RunBaseBatch
{

}


public void run()
{
    // The purpose of your job.
    info(strFmt("Hello from Batch4DemoClass .run at %1"
        ,DateTimeUtil ::toStr(
        DateTimeUtil ::utcNow())
        ));
}

public container pack()
{
    return conNull();
}

public boolean unpack(container packedClass)
{
    return true;
}

这里定义了一个最简单的批处理任务,pack和unpack是必须重载的。下面创建一个job来schedule这个批处理:

static void Job_ScheduleBatch2(Args _args)
{
    BatchHeader batHeader;
    BatchInfo batInfo;
    RunBaseBatch rbbTask;
    str sParmCaption = "My Demonstration (b351)";

    ;
    rbbTask = new Batch4DemoClass();
    batInfo = rbbTask.batchInfo();
    batInfo.parmCaption(sParmCaption);
    batInfo.parmGroupId(""); // The "Empty batch group".
    batHeader = BatchHeader::construct();
    batHeader.addTask(rbbTask);
    batHeader.save();
    info(strFmt("'%1' batch has been scheduled.", sParmCaption));
}

运行这个job,在System administration->Inquries->Batch jobs下就能看到名为“My Demonstration (b351)”的批处理任务,任务的预定运行时间就是当前的时间,很快这个任务就会得到执行,执行完后可以从Batch job history看到run()中显示在infolog里的信息。记得需要在AOT中执行下Incremental CIL generation form X++,因为批处理任务需要在.net下运行。如果要设定任务的排程时间信息,可以使用BatchInfo.parmRecurrenceData()方法。如果我们只希望这个batch job只在相应用户从客户端登陆时在客户端运行,还需要重载Batch4DemoClass的方法runsImpersonated返回false:

public boolean runsImpersonated()
{
    // false means that the batch must run on a client.
    return false;
}

更多内容详见http://msdn.microsoft.com/EN-US/library/cc636647

posted @ 2012-08-27 14:12  断水流  阅读(1049)  评论(0编辑  收藏  举报