Різниця між data() та buf2Buf() у Dynamics AX 2012
Опубліковано: 15 лютого 2025 р. о 22:54:06 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", оскільки це значення також було б скопійовано до нового буфера.
(Насправді, це призвело б до помилки дублювання ключа, але це теж не те, чого ви хочете).