Miklix

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

Публикувано: 15 февруари 2025 г. в 22:53:05 ч. 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 години опит като професионален компютърен програмист/разработчик на софтуер и в момента работи на пълен работен ден в голяма европейска ИТ корпорация. Когато не пише в блога, той прекарва свободното си време в широк спектър от интереси, хобита и дейности, които до известна степен могат да бъдат отразени в разнообразието от теми, обхванати в този уебсайт.