Miklix

Різниця між data() та buf2Buf() у Dynamics AX 2012

Опубліковано: 15 лютого 2025 р. о 22:54:06 UTC
Останнє оновлення: 12 січня 2026 р. о 08:41:12 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 років досвіду роботи професійним програмістом/розробником програмного забезпечення і наразі працює на повну ставку у великій європейській ІТ-корпорації. У вільний від ведення блогу час він присвячує різноманітним інтересам, хобі та захопленням, що певною мірою відображається на різноманітності тем, які висвітлюються на цьому сайті.