我建立了客户同步,可以将AX客户与外部系统的客户同步。
在外部系统上执行更新/插入时,它会转储要处理的AIF文件。
我想在表方法CustTable.insert()
和CustTable.update()
中添加一些逻辑,这样当插入/更新任何内容时,它会推高外部系统,这样可以正常工作。
问题是当用户在外部系统中进行更改时,它会生成AIF文件,然后在AX中插入/更新,然后将更改推回到外部系统。
如何确定何时从AIF进程执行custTable插入/更新?我想要的伪代码在Tables\CustTable\Methods\insert()
:
// Pseudo code
if (this.isFromAIF() == false)
{
this.syncRecordToExternalSystem();
}
答案 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
}