2014-11-08 37 views
1

我有一個客戶同步內置的AX客戶與外部系統的客戶同步。如何確定何時從AIF插入/更新記錄?

在外部系統上執行更新/插入操作時,會轉儲處理的AIF文件。

我想在表方法CustTable.insert()CustTable.update()中加入一些邏輯,這樣當插入/更新任何東西時,它將推高外部系統,這可以正常工作。

問題是,當用戶在外部系統中進行更改時,它會生成AIF文件,然後在AX中插入/更新,然後將更改推回到外部系統。

如何確定何時從AIF進程執行custTable插入/更新?我在尋找僞代碼會是這樣的Tables\CustTable\Methods\insert()

// Pseudo code 
if (this.isFromAIF() == false) 
{ 
    this.syncRecordToExternalSystem(); 
} 
+1

兩點建議: *檢查誰創造了該領域的用戶(CreatedBy)是商務用戶的連接。 http://msdn.microsoft.com/en-us/library/aa871620.aspx *在CustTable中創建一個新的布爾型字段,並修改AX

類以始終向該字段寫入「true」。 http://technet.microsoft.com/en-us/library/bb496530.aspx – 2014-11-10 08:18:20

+0

雖然AIF根據設置進行模擬,所以CreatedBy可能不起作用。 – 2014-12-01 23:04:28

回答

1

這是一個非常棘手的問題。由於@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 
} 
相關問題