Miklix

Разница между data() и buf2Buf() в Dynamics AX 2012

Опубликовано: 15 февраля 2025 г. в 22:54:00 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Закрепить на Pinterest

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

Об авторе

Миккель Кристенсен
Миккель - создатель и владелец сайта miklix.com. Он имеет более чем 20-летний опыт работы в качестве профессионального программиста/разработчика программного обеспечения и в настоящее время работает на полную ставку в крупной европейской IT-корпорации. Когда он не ведет блог, то тратит свое свободное время на огромное количество интересов, хобби и занятий, что в некоторой степени отражается в разнообразии тем, освещаемых на этом сайте.