如何确定何时从AIF插入/更新记录?

时间:2014-11-08 20:46:20

标签: axapta x++ dynamics-ax-2012 dynamics-ax-2012-r2 aif

我建立了客户同步,可以将AX客户与外部系统的客户同步。

在外部系统上执行更新/插入时,它会转储要处理的AIF文件。

我想在表方法CustTable.insert()CustTable.update()中添加一些逻辑,这样当插入/更新任何内容时,它会推高外部系统,这样可以正常工作。

问题是当用户在外部系统中进行更改时,它会生成AIF文件,然后在AX中插入/更新,然后将更改推回到外部系统。

如何确定何时从AIF进程执行custTable插入/更新?我想要的伪代码在Tables\CustTable\Methods\insert()

中是这样的
// Pseudo code
if (this.isFromAIF() == false)
{
   this.syncRecordToExternalSystem();
}

1 个答案:

答案 0 :(得分:1)

这是一个非常棘手的问题。正如@ian_socho所说,你可以创建一个只有AIF设置的自定义标志。 "由"创建"用户不会工作,因为AIF会模仿。

我做了实验,发现了一些有趣的属性。似乎AIF操作在CIL中作为工作线程执行,但是工作线程似乎是由AOS驱动的,因此我无法告诉masterSessionId

此代码将告诉您是否可能从AIF调用了某些内容。我使用SysOpFramework测试了旋转工作线程,并且它们都有一个主线程。我测试了一个visual studio项目,它有一个主会话。

xSession    xSession = new xSession(sessionId());

if (xSession.masterSessionId()  == 0        &&
    xSession.isWorkerThread()   == true     &&
    xSession.clientKind()       == ClientType::WorkerThread)
{
    // Appears to have been called from AIF
    return true; // AIF call
}