AX 2012 X++ 中的多线程

Multi Threading in AX 2012 X++

我们中的许多人都在经历 AX 2012 中的优化问题。在许多情况下,流程相关代码中的优化问题没有解决方案,就像我们在报告中有许多其他解决方法一样。

案例:我有一个案例,我必须在 AX 2012 中单击一个按钮来执行多个销售订单的确认。在确认该销售订单后,我们需要执行一些其他 'Customized' 过程,在遵循代码实践并最大限度地优化编码方法之后,这是一个有点冗长的过程。所以我对如何通过多线程处理这种情况有疑问

我在Ax2012中使用Thread class了解了使用多线程的特性,然后我尝试通过以下方式实现。

您首先需要在 class 的静态方法中实现所有逻辑。该静态方法应包含 Thread Class 作为参数,例如

public static void process(thread _thread)
{
    FG_ConfirmationEngine   confirmationEngine = new FG_ConfirmationEngine();
    salesTable              salesTable;
    container               _con;;
    _con = _thread.getInputParm();
    info(conPeek(_thread.getInputParm(),1));
    salesTable = salesTable::find(conPeek(_thread.getInputParm(),1));
    confirmationEngine.parmSalesTable(salesTable);
    confirmationEngine.run();// in this method all of my confirmation pre and post logic exist
}

在 class 中创建该静态方法后,您需要编写该方法的调用。 注意:您不能通过 Thread class 发送任何 Args、Object。您只能通过 thread.setInputParm() 方法以容器形式发送参数,例如 _thread.setInputParm([salestable.salesid]) 方法。

通话中:

salesline                   salesline;
ExecutePermission           perm;
Thread                      myThread;
ttsBegin;

perm = new ExecutePermission();

if (!perm)
return;

perm.assert();

while select salesid from salestable
    where salestable.FG_BookingReferenceID == "BRF-0001"
{
    myThread = new Thread();
    myThread.setInputParm([salestable.SalesId]);
    if (myThread)
    {
        myThread.removeOnComplete(true);
        myThread.run(classnum(FG_ConfirmationEngine), staticMethodStr(FG_ConfirmationEngine,process));
    }
}

CodeAccessPermission::revertAssert();

希望对您有所帮助。快乐大兴

不要直接使用multi threading。是客户端技术。

使用 Axatpa 中的 batch processing 框架。它是在服务器上具有多线程的服务器技术。 https://msdn.microsoft.com/en-us/library/gg243235.aspx

这对开​​发人员意味着:创建您的 class 并从 RunBasBatch 扩展它(请参阅 AOT 中的 Tutorial_RunBaseBatch class)或 SysOperation https://msdn.microsoft.com/en-us/library/gg862488.aspx

Introduction to the SysOperation Framework提供了如何在 AX2012 中并行化代码的具体示例(示例计算质数)。

此外,还有一个名为 Batch Parallelism in AX part I, II, III and IV 的优秀系列帖子,分析了如何将 "threads" 与批处理任务最佳匹配。