Het verschil tussen data() en buf2Buf() in Dynamics AX 2012
Gepubliceerd: 15 februari 2025 om 22:53:55 UTC
In dit artikel worden de verschillen tussen de methoden buf2Buf() en data() in Dynamics AX 2012 uitgelegd. Ook wordt uitgelegd wanneer het het beste is om beide te gebruiken en wordt een X++-codevoorbeeld gegeven.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
De informatie in dit bericht is gebaseerd op Dynamics AX 2012 R3. Het kan wel of niet geldig zijn voor andere versies.
Wanneer u de waarde van alle velden van de ene tabelbuffer naar de andere in Dynamics AX moet kopiƫren, doet u doorgaans het volgende:
Dit werkt goed en is in de meeste gevallen de juiste oplossing.
U kunt er echter ook voor kiezen om de buf2Buf-functie te gebruiken:
Dit werkt ook goed. Wat is dan het verschil?
Het verschil is dat buf2Buf geen systeemvelden kopieert. Systeemvelden omvatten velden zoals RecId, TableId en misschien wel het belangrijkste in deze context, DataAreaId. De reden dat de laatste het belangrijkst is, is dat het meest typische geval waarin u buf2Buf() zou gebruiken in plaats van data() is bij het dupliceren van records tussen bedrijfsaccounts, meestal door gebruik te maken van het sleutelwoord changeCompany.
Stel dat u bijvoorbeeld bij het bedrijf "dat" zit en een ander bedrijf met de naam "com" hebt waarvan u alle records in CustTable wilt kopiƫren:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
In dit geval zal het werken omdat buf2Buf alle veldwaarden kopieert, behalve systeemvelden naar de nieuwe buffer. Als u in plaats daarvan data() had gebruikt, zou de nieuwe record in de "com"-bedrijfsaccounts zijn ingevoegd, omdat die waarde ook naar de nieuwe buffer zou zijn gekopieerd.
(Eigenlijk zou dit hebben geresulteerd in een fout met betrekking tot de dubbele sleutel, maar dat is ook niet wat u wilt.)