Data() ja buf2Buf() erinevus rakenduses Dynamics AX 2012
Avaldatud: 15. veebruar 2025, kell 22:53:40 UTC
Viimati uuendatud: 12. jaanuar 2026, kell 08:41:00 UTC
See artikkel selgitab Dynamics AX 2012 meetodite buf2Buf() ja data() erinevusi, sh millal on mõlema kasutamine asjakohane, ning toob näite X++ koodist.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Selle postituse teave põhineb Dynamics AX 2012 R3-l. See ei pruugi kehtida teiste versioonide puhul.
Kui teil on vaja Dynamics AX-is kõigi väljade väärtused ühest tabelipuhvrist teise kopeerida, teeksite traditsiooniliselt midagi sellist:
See toimib hästi ja enamikul juhtudel on see õige tee.
Siiski on teil ka võimalus kasutada funktsiooni buf2Buf:
See toimib ka hästi. Mis vahet siis on?
Erinevus seisneb selles, et buf2Buf ei kopeeri süsteemivälju. Süsteemiväljade hulka kuuluvad sellised väljad nagu RecId, TableId ja ehk kõige olulisem selles kontekstis DataAreaId. Viimane on kõige olulisem seetõttu, et kõige tüüpilisem juhtum, kus buf2Buf() funktsiooni kasutatakse data() funktsiooni asemel, on kirjete dubleerimine ettevõtte kontode vahel, tavaliselt märksõna changeCompany abil.
Näiteks kui olete ettevõttes "dat" ja teil on teine ettevõte nimega "com", kust soovite kõik CustTable'i kirjed kopeerida:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
Sel juhul see toimib, kuna buf2Buf kopeerib kõik väljaväärtused, välja arvatud süsteemiväljad, uude puhvrisse. Kui oleksite selle asemel kasutanud data(), oleks uus kirje lisatud ettevõtte "com" kontodele, kuna see väärtus oleks samuti uude puhvrisse kopeeritud.
(Tegelikult oleks see toonud kaasa duplikaatvõtme vea, aga see pole ka see, mida sa tahad).
Lisalugemist
Kui see postitus teile meeldis, võivad teile meeldida ka need soovitused:
- Viga "Andmelepingu objekti jaoks pole metaandmete klass määratletud" rakenduses Dynamics AX 2012
- Kuidas itereerida X++ koodi enumi elemente rakenduses Dynamics AX 2012
- Päringu kasutamine SysOperationi andmelepinguklassis Dynamics AX-i 2012-s
