Разликата между 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, традиционно бихте направили нещо като:
Това работи добре и в повечето случаи е правилният начин.
Вместо това обаче имате възможност да използвате функцията buf2Buf:
Това също работи добре. И така, каква е разликата?
Разликата е, че buf2Buf не копира системните полета. Системните полета включват полета като RecId, TableId и може би най-важното в този контекст, DataAreaId. Причината, поради която последното е най-важното, е, че най-типичният случай, в който бихте използвали buf2Buf() вместо data(), е при дублиране на записи между фирмени акаунти, обикновено чрез използване на ключовата дума changeCompany.
Например, ако сте в компанията "dat" и имате друга фирма, наречена "com", от която искате да копирате всички записи в CustTable от:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
В този случай ще работи, защото buf2Buf копира всички стойности на полетата, с изключение на системните полета, в новия буфер. Ако вместо това бяхте използвали data(), новият запис щеше да бъде вмъкнат в сметките на компанията "com", защото тази стойност щеше да бъде копирана и в новия буфер.
(Всъщност това би довело до грешка при дублиране на ключа, но това също не е това, което искате).