La diferencia entre data() y buf2Buf() en Dynamics AX 2012
Publicado: 15 de febrero de 2025, 22:53:19 UTC
Este artículo explica las diferencias entre los métodos buf2Buf() y data() en Dynamics AX 2012, incluido cuándo es apropiado utilizar cada uno y un ejemplo de código X++.
The Difference Between data() and buf2Buf() in Dynamics AX 2012
La información de este artículo se basa en Dynamics AX 2012 R3. Puede que sea válida o no para otras versiones.
Cuando necesita copiar el valor de todos los campos de un búfer de tabla a otro en Dynamics AX, tradicionalmente haría algo como:
Esto funciona bien y en la mayoría de los casos es el camino a seguir.
Sin embargo, también tienes la opción de utilizar la función buf2Buf:
Esto también funciona bien. ¿Cuál es la diferencia?
La diferencia es que buf2Buf no copia campos del sistema. Los campos del sistema incluyen campos como RecId, TableId y, quizás lo más importante en este contexto, DataAreaId. La razón por la que este último es el más importante es que el caso más típico en el que se usaría buf2Buf() en lugar de data() es cuando se duplican registros entre cuentas de la empresa, normalmente mediante el uso de la palabra clave changeCompany.
Por ejemplo, si está en la empresa "dat" y tiene otra empresa llamada "com" de la que desea copiar todos los registros en CustTable:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
En este caso, funcionará porque buf2Buf copia todos los valores de los campos, excepto los campos del sistema, en el nuevo búfer. Si hubiera utilizado data() en su lugar, el nuevo registro se habría insertado en las cuentas de la empresa "com", porque ese valor también se habría copiado en el nuevo búfer.
(En realidad, habría resultado en un error de clave duplicada, pero eso tampoco es lo que quieres).