Miklix

Різниця між 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, ви традиційно робите щось на кшталт:

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 років досвіду роботи професійним програмістом/розробником програмного забезпечення і наразі працює на повну ставку у великій європейській ІТ-корпорації. У вільний від ведення блогу час він присвячує різноманітним інтересам, хобі та захопленням, що певною мірою відображається на різноманітності тем, які висвітлюються на цьому сайті.