Miklix

Разликата между data() и buf2Buf() в Dynamics AX 2012

Публикувано: 15 февруари 2025 г. в 22:53:05 ч. UTC
Последна актуализация: 12 януари 2026 г. в 8:40:56 ч. UTC

Тази статия обяснява разликите между методите buf2Buf() и data() в Dynamics AX 2012, включително кога е подходящо да се използва всеки от тях и примерен 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Закачи в Пинтерест

Микел Кристенсен

За автора

Микел Кристенсен
Микел е създател и собственик на сайта miklix.com. Той има над 20 години опит като професионален компютърен програмист/разработчик на софтуер и в момента работи на пълен работен ден в голяма европейска ИТ корпорация. Когато не пише в блога, той прекарва свободното си време в широк спектър от интереси, хобита и дейности, които до известна степен могат да бъдат отразени в разнообразието от теми, обхванати в този уебсайт.