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-корпорации. Когда он не ведет блог, то тратит свое свободное время на огромное количество интересов, хобби и занятий, что в некоторой степени отражается в разнообразии тем, освещаемых на этом сайте.