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

Axapta 如何确定何时从AIF插入/更新记录?,axapta,x++,dynamics-ax-2012,dynamics-ax-2012-r2,aif,Axapta,X++,Dynamics Ax 2012,Dynamics Ax 2012 R2,Aif,我构建了一个客户同步,将AX客户与外部系统的客户同步 在外部系统上执行更新/插入时,会转储一个已处理的AIF文件 我想在table方法CustTable.insert()和CustTable.update()中加入一些逻辑,这样当插入/更新任何内容时,它都会向上推外部系统,这很好 问题是,当用户在外部系统中进行更改时,它会生成AIF文件,然后AIF文件在AX中插入/更新,然后将更改推回到外部系统 如何确定何时从AIF流程执行custTable插入/更新?我正在查找的伪代码类似于Tables\cu

我构建了一个客户同步,将AX客户与外部系统的客户同步

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

我想在table方法
CustTable.insert()
CustTable.update()
中加入一些逻辑,这样当插入/更新任何内容时,它都会向上推外部系统,这很好

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

如何确定何时从AIF流程执行custTable插入/更新?我正在查找的伪代码类似于
Tables\custable\Methods\insert()


这是一个非常困难的问题。正如@ian_socho所说,您可以创建一个只有AIF设置的自定义标志。“createdby”用户无法工作,因为AIF进行模拟

我做了实验,发现了一些有趣的性质。似乎AIF操作在CIL中作为工作线程执行,但工作线程似乎是由AOS旋转起来的,因此我无法判断
masterSessionId

这段代码将告诉您是否从AIF调用了某些内容。我使用SysOpFramework进行了测试,它可以增加工作线程,并且它们都有一个主线程。我用一个VisualStudio项目进行了测试,它有一个主会话

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
}

我有两个建议:*检查创建字段(CreatedBy)的用户是否是Business Connector用户。*在CustTable中创建一个新的布尔字段,并修改AX类以始终将“true”写入该字段。AIF根据设置进行模拟,因此CreatedBy可能无法工作。
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
}