Dynamics AX 2012 中 data() 與 buf2Buf() 之間的差異
已發佈: 2025年2月15日 晚上10:54:10 [UTC]
本文介紹了 Dynamics AX 2012 中 buf2Buf() 和 data() 方法之間的區別,包括何時適合使用每個方法以及 X++ 程式碼範例。
該頁面是由英語機器翻譯而來的,以便盡可能多的人可以訪問。不幸的是,機器翻譯還不是一項完善的技術,因此可能會出現錯誤。如果您願意,可以在這裡查看原始英文版本:
The Difference Between data() and buf2Buf() in Dynamics AX 2012
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(custTableFrom, custTableTo);
custTableTo.insert();
}
在這種情況下,它會起作用,因為 buf2Buf 將除系統欄位之外的所有欄位值複製到新緩衝區。如果您使用了 data(),新記錄就會插入到「com」公司帳戶中,因為該值也會複製到新的緩衝區中。
(實際上,這會導致重複鍵錯誤,但這也不是您想要的)。