batch-processing - 在运行时向批处理任务添加依赖项

标签 batch-processing axapta dynamics-ax-2012

我在 AX 2012 R2 中运行一个批处理作业,本质上是迭代一个表并创建一个类的实例(扩展 RunBaseBatch),并将其添加为任务。

在所有任务完成后,我还需要做一些后期处理项目。

到目前为止,以下内容正在运行:

while select stagingTable where stagingTable.OperationNo == params.paramOperationNo()
{
    batchHeader = this.getCurrentBatchHeader();
    batchTask = OperationTask::construct();
    batchHeader.addRuntimeTask(batchTask,this.getCurrentBatchTask().RecId);

}

batchHeader.save();
postTask = PostProcessingTask::construct();
batchHeader.addRuntimeTask(postTask,this.getCurrentBatchTask().RecId);
batchHeader.addDependency(postTask,batchTask,BatchDependencyStatus::FinishedOrError);
batchHeader.save();

我的想法是,这将添加对后处理任务的依赖关系,直到循环中添加的最后一个任务完成或出现错误后才开始。我得到的是一个异常“无法创建依赖项,因为任务''不存在。”

我不确定我错过了什么,因为所有添加的任务都已成功执行,似乎只是依赖项不想工作。

最佳答案

有几件事,这段代码被调用的地方很重要。代码已经批量了吗? doBatch() 中的代码是在 super 之前/之后调用的吗?等等

您有一个 while-select,这会创建多个批处理任务吗?如果是,那么您需要创建对每个批处理任务对象的依赖关系。这是我看到的一个问题。如果您的 while-select 语句仅选择 1 条记录并添加一项任务,那么问题是其他问题,但您不应该执行 while-select 来选择一条记录。

此外,您还调用了两次batchHeader.save();。我可能会删除第一个电话。我需要看看是什么在实例化您的代码。

如果您有 this.getCurrentBatchTask().RecId,具体取决于您的代码是否处于批处理状态,请尝试将其替换为 BatchHeader::getCurrentBatchTask().RecId >

batchHeader = this.getCurrentBatchHeader(); 替换为 batchHeader = BatchHeader::getCurrentBatchHeader();

EDIT Try this code (fix whatever to make it compile)

BatchHeader     batchHeader = BatchHeader::getCurrentBatchHeader();
Set             set         = new Set(Types::Class);
SetEnumerator   se;
BatchTask       batchTask;
PostTask        postTask;

while select stagingTable where stagingTable.OperationNo == params.paramOperationNo()
{
    batchTask = OperationTask::construct();
    set.add(batchTask);
    batchHeader.addRuntimeTask(batchTask,BatchHeader::getCurrentBatchTask().RecId);
}

// Create post task
postTask = PostProcessingTask::construct();
batchHeader.addRuntimeTask(postTask,BatchHeader::getCurrentBatchTask().RecId);

// Create dependencies
se = set.getEnumerator();
while (se.moveNext())
{
    batchTask = se.current(); // Task to make dependent on    
    batchHeader.addDependency(postTask,batchTask,BatchDependencyStatus::FinishedOrError);
}

batchHeader.save();

关于batch-processing - 在运行时向批处理任务添加依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32212629/

相关文章:

c# - DynamicsAX - 按表名获取 SQL 语句

python - GCP 中的 AWS Batch 模拟?

windows - 如何在 Windows 命令提示符下对变量进行字符串替换?

axapta - 异常原因/消息。我在这里重新发明轮子吗?

axapta - 如何在 Axapta 3.0 中创建 X++ 批处理作业?

azure - Azure 上的 Axe - 与本地客户端的连接

axapta - 谁在执行这个特定的查询?

java - 在 hibernate 中插入大量记录的最佳方法

node.js - API 调用后需要在 firebase 函数中启动批处理

x++ - 高级查询范围