Dynamics AX 2012 中 data() 和 buf2Buf() 之间的区别
已出版: 2025年2月15日 UTC 22:54:08
本文介绍了 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”公司帐户中,因为该值也会复制到新缓冲区中。
(实际上,这会导致重复键错误,但这也不是您想要的)。