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