我有一个客户同步构建,使AX客户与外部系统的客户同步。
在外部系统上执行update/insert时,它会转储要处理的AIF文件。
我想在表方法CustTable.insert()和CustTable.update()中加入一些逻辑,这样当插入/更新任何东西时,它就会推高外部系统,这样就可以正常工作。
问题是,当用户在外部系统中进行更改时,它会生成AIF文件,该文件随后在AX中插入/更新,然后将更改推送回外部系统。
如何确定何时从AIF进程执行custTable插入/更新?我正在寻找的伪代码在Tables\CustTable\Methods\insert()中应该是这样的
// Pseudo code
if (this.isFromAIF() == false)
{
this.syncRecordToExternalSystem();
}发布于 2014-12-03 04:53:21
这是一个非常困难的问题。正如@ian_socho所说,您可以创建一个仅由AIF设置的自定义标志。"createdby“用户无法工作,因为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
}https://stackoverflow.com/questions/26821904
复制相似问题