Dynamics AX 2012 中 data() 和 buf2Buf() 之间的区别
已出版: 2025年2月15日 UTC 22:54:08
最后更新 2026年1月12日 UTC 08:41:13
本文解释了 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”公司帐户中,因为该值也会被复制到新的缓冲区。
(实际上,这会导致密钥重复错误,但这也不是你想要的结果)。
进一步阅读
如果您喜欢这篇文章,您可能还会喜欢这些建议:
- Dynamics AX 2012 SysOperation Framework 快速概览
- 在 Dynamics AX 2012 中直接从 X++ 调用 AIF 文档服务
- 在 Dynamics AX 2012 中使用宏和 strFmt 进行字符串格式化
