Miklix

Dynamics AX 2012 中 data() 與 buf2Buf() 之間的差異

已發佈: 2025年2月15日 晚上10:54:10 [UTC]
最後更新: 2026年1月12日 上午8:41:13 [UTC]

本文解釋了 Dynamics AX 2012 中的 buf2Buf() 和 data() 方法之間的區別,包括何時適合使用每種方法以及 X++ 程式碼範例。


該頁面是由英語機器翻譯而來的,以便盡可能多的人可以訪問。不幸的是,機器翻譯還不是一項完善的技術,因此可能會出現錯誤。如果您願意,可以在這裡查看原始英文版本:

The Difference Between data() and buf2Buf() in Dynamics AX 2012

本文中的資訊是基於 Dynamics AX 2012 R3 版本,可能不適用於其他版本。

在 Dynamics AX 中,當需要將一個表格緩衝區中所有欄位的值複製到另一個表格緩衝區時,傳統做法是:

toTable.data(fromTable);

這種方法效果很好,在大多數情況下都是最佳選擇。

不過,您也可以選擇使用 buf2Buf 函數:

buf2Buf(fromTable, toTable);

這種方法也行得通。那麼差別在哪呢?

差別在於 buf2Buf 不會複製系統欄位。系統字段包括 RecId、TableId 等字段,以及在此上下文中可能最重要的 DataAreaId。之所以後者最為重要,是因為使用 buf2Buf() 而不是 data() 最典型的情況是在公司帳戶之間複製記錄時,通常是透過 changeCompany 關鍵字來實現的。

例如,如果您在名為「dat」的公司,並且您希望將另一家名為「com」的公司中的所有 CustTable 記錄複製到該公司:

while select crossCompany : ['com'] custTableFrom
{
    buf2Buf(custTableFrom, custTableTo);
    custTableTo.insert();
}

在這種情況下,之所以能成功,是因為 buf2Buf 會將系統欄位以外的所有欄位值複製到新的緩衝區。如果您使用的是 data() 函數,則新記錄將插入到「com」公司帳戶中,因為該值也會複製到新的緩衝區。

(實際上,這會導緻密鑰重複錯誤,但這也不是你想要的結果)。

進一步閱讀

如果您喜歡這篇文章,您可能也會喜歡這些建議:


分享至 Bluesky在 Facebook 分享在 LinkedIn 分享在 Tumblr 上分享分享至 X在 LinkedIn 分享固定在 Pinterest 上

Mikkel Christensen

關於作者

Mikkel Christensen
麥可 是 miklix.com 的創建者和所有者。他有超過 20 年的專業電腦程式設計師/軟體開發人員經驗,目前全職受僱於一家歐洲大型 IT 公司。不寫部落格時,他會將業餘時間花在各種各樣的興趣、愛好和活動上,這在一定程度上反映在本網站所涵蓋的主題的多樣性上。