martes, 27 de septiembre de 2011

Dynamics AX y fieldnum dinámico pasado por parámetro

En Dynamics AX tenemos una función del sistema que se llama "fieldnum" que nos devuelve  el identificador de un campo de una tabla dada:

fieldnum(nombreTabla, nombreCampo)

Por ejemplo, si tenemos la tabla "ProjTable", y el campo de la tabla "ProjId", la siguiente sentencia:

fieldnum(ProjTable, ProjId)

nos devolverá el identificador de dicho campo.

Hay muchas tablas de Dynamics AX que se guardan identificadores de campo de otras tablas, una de ellas es la DocuField, que se guarda los campos de la tabla para la gestión documental de Dynamics AX.

Imaginemos que queremos rellenar la tabla Docufield como sigue:




Aquí estamos suponiendo que la tabla TablaDatosDocumento tiene al menos 20 campos y se llaman Campo1, Campo2, Campo3, ... , Campo20.
Nos tenemos que fijar en la línea 15 en la que se utiliza la función fieldnum, pero en lugar de pasarle la tabla y el nombre del campo, le pasamos la tabla y una variable con el nombre del campo.

Bien, pues esto ¡¡NO FUNCIONA!!, fieldnum no es dinámico y no se le pueden pasar variables, los id's de las tablas los calcula en tiempo de compilación, por eso sólo podemos pasarle nombre de tabla y nombre de campo. Si compilamos el código de arriba nos dará un error de compilación.

Entonces, ¿qué hacemos? Miremos el siguiente código:



Ahora sí que sí, esto es otra cosa, afortunadamente tenemos la función fieldName2Id a la que le pasamos el id de la tabla (con la función tablenum) y una cadena con el nombre del campo.

Espero que os sea útil.
Nos leemos.