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