La différence entre data() et buf2Buf() dans Dynamics AX 2012
Publié : 15 février 2025 à 22:53:44 UTC
Cet article explique les différences entre les méthodes buf2Buf() et data() dans Dynamics AX 2012, notamment quand il est approprié d'utiliser chacune d'elles et un exemple de code X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
Les informations contenues dans cet article sont basées sur Dynamics AX 2012 R3. Elles peuvent ou non être valables pour d'autres versions.
Lorsque vous devez copier la valeur de tous les champs d'un tampon de table vers un autre dans Dynamics AX, vous procédez traditionnellement comme suit :
Cela fonctionne bien et dans la plupart des cas, c’est la voie à suivre.
Cependant, vous avez également la possibilité d'utiliser la fonction buf2Buf à la place :
Cela fonctionne bien aussi. Alors, quelle est la différence ?
La différence est que buf2Buf ne copie pas les champs système. Les champs système incluent des champs tels que RecId, TableId et peut-être plus important dans ce contexte, DataAreaId. La raison pour laquelle ce dernier est le plus important est que le cas le plus courant où vous utiliseriez buf2Buf() au lieu de data() est lors de la duplication d'enregistrements entre des comptes d'entreprise, généralement en utilisant le mot-clé changeCompany.
Par exemple, si vous êtes dans la société « dat » et que vous avez une autre société appelée « com » à partir de laquelle vous souhaitez copier tous les enregistrements de CustTable :
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
Dans ce cas, cela fonctionnera car buf2Buf copie toutes les valeurs de champ, à l'exception des champs système, dans le nouveau tampon. Si vous aviez utilisé data() à la place, le nouvel enregistrement aurait été inséré dans les comptes de la société « com » car cette valeur aurait également été copiée dans le nouveau tampon.
(En fait, cela aurait entraîné une erreur de clé en double, mais ce n'est pas non plus ce que vous souhaitez).