2011-03-23 27 views
0

我有一個要求,我已創建客戶到外部系統,當我在AX中創建它。我首先想到的第一個解決方案就是將外部方Web服務用於AX。AX與其他應用程序的集成

但它將如何實現分佈式事務?

回答

0

您沒有完全寫出所有要求。所以這就是我的想法。

我會爲此使用Message Queue。當用戶在AX中創建客戶(停機時間或其他)時,外部系統可能無法保存客戶。我不會讓外部系統在我的應用程序方面表現出太多...

0

它將如何實現分佈式事務?

它不會!

但它有關係嗎? 客戶數據變化很少,很少需要事務範圍。

0

您可以創建Linked Server和使用分佈式事務的直接SQL(類ODBCConnection)

+0

在AX表中直接插入SQL並不是最佳實踐。 – 2011-03-24 15:26:01

+0

是的,我知道,但有時候沒有其他選擇。爲此可以保留recId。 – demas 2011-03-24 18:52:34

1

你的集成選項很多,但我不建議直接插入SQL。這是一個非常糟糕的解決方案。顯而易見的原因是,在AOT之外插入記錄會打破AOT中的業務邏輯。數據庫僅用於持久化數據並優化數據的讀寫。 AOT中的業務邏輯負責在創建和更新記錄時保存所有邏輯。

在我看來,唯一的選擇是通過x ++代碼。標準AX爲此目的有一個特殊的類別「AxCustTable」。您希望使用此類來確保您的客戶數據在整個生命週期中處於最佳形狀,如果您的集成。 至於系統之間數據的交通,你的選擇有很多: * TEXTFILES * XML文件,從不同的SQL數據庫 * web服務 *讀取數據 *等

只要確保當你寫數據到您的CustTable所有當前和未來的業務邏輯仍然有效。將數據直接插入數據庫級別的CustTable將有效地打破該依賴關係。

祝你好運!

+0

外部應用程序不寫入AX。這是另一種方式。 AX將寫入其他應用程序。我希望他們在同一筆交易 – Gainster 2011-03-26 11:15:20

+0

好吧。然後你可以使用MMQ,或者你可以使用AxCustTable-class創建一個新客戶而不需要保存它,然後在外部系統中創建客戶。如果外部系統確認創建,則運行axCustTable.save(),否則再次嘗試或丟棄。 Jan B Kjeldsen是對的。您將無法實現本地分佈式事務。你最好的選擇是僞裝並採取預防措施。 :-) – Skaue 2011-03-26 11:48:53