确定作业是否在X ++代码中运行

时间:2014-07-15 17:00:50

标签: x++ dynamics-ax-2012-r2 sysoperationframework

我有一个服务传递的方案是数据到AX,然后我们使用SysOperationFramework来处理该数据,而不会让服务客户端等待处理完成。

如果用户在处理过程中仍尝试打开外部应用程序中的记录,则会出现问题。

有没有办法,在X ++中,所以看看当前正在执行哪些作业(并且进一步查看传入的参数),以便我们可以发送一个我们可以处理给用户的错误?

1 个答案:

答案 0 :(得分:2)

有一种方法,是的。您要查找的数据存储在Batch表中。 您会找到ClassNumber和状态字段。只需选择与您的类具有状态执行匹配的记录。如果存在记录,则正在执行。

参数存储在容器的Parameters字段中。您可以解压缩容器,创建类的实例并将其解压缩,就像这样(快速代码无法编译,但您明白了):

Batch batch;
SysOperationServiceController sysOperationServiceController;
YourDataContract yourDataContract;

select batch 
    where batch.ClassNumber = YourClassNumber
    && batch.Status == BatchStatus::Executing;

// todo: you might have to check the type of the object before assignment
// todo: also check if batch record has been found
sysOperationServiceController = batch.object();

if (sysOperationServiceController.unpack(batch.Parameters))
{
    // todo: you might have to check the type of the object before assignment
    yourDataContract = sysOperationServiceController.getDataContractObject('_theParemterNameOfyourDataContract');

    // todo: here you can read the parameters from your contract
}
else
{
    throw error("Unpack failed");
}