Miklix

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

本文中的信息基于 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上固定

米克尔·邦·克里斯滕森

关于作者

米克尔·邦·克里斯滕森
迈克尔 是 miklix.com 的创建者和所有者。他拥有 20 多年的专业计算机程序员/软件开发人员经验,目前全职受雇于一家大型欧洲 IT 公司。不写博客时,他把业余时间花在各种兴趣、爱好和活动上,这在一定程度上反映在本网站涵盖的各种主题上。