Trabajando con recordRefs y fieldRefs

El uso de los tipos recordRef y fieldRef no es muy común en el código de NAV y su uso se reduce prácticamente a funcionalidades que afectan de forma muy globalizada en todo el sistema como por ejemplo la funcionalidad de Log de Cambios.

A mi, personalmente, me gusta utilizarlas cuando veo que una sección de código puede ser útil en varias entidades distintas de la base de datos. Recuerdo un desarrollo que hice ya hace un tiempo en que una función construía el XML necesario para la exportación de facturas, albaranes, abonos, etc. Enseguida detecté que la mayoría de campos eran los mismos y que estaba a punto de cuadriplicar mucho código que realmente hacía lo mismo. En este caso utilicé fieldRefs y recordRefs para apuntar a los registros y campos necesarios dado que estas tablas comparten prácticamente los mismos campos y que, además, están dispuestos con el mismo ID (núm. de campo) fue muy rápido y muy sencillo.

En el siguiente ejemplo os voy a mostrar un ejemplo documentado de una función que utiliza este tipo de variables para hacer de otra forma el acceso a las dimensiones que hace NAV desde los distintos documentos de venta:

Si os fijáis bien, en el Form 132, 130, 134, etc. se utiliza un valor constante en la propiedad RunFormLink del botón dimensiones indicando el número de la tabla asociada. A su vez, en el caso de las líneas, existe una función copiada y pegada que muestra las dimensiones relacionadas.

En este caso vamos a utilizar una función para la visualización de las dimensiones asociadas a documentos de forma que pueda ser invocada sin prestar atención al número de la tabla. Esta función podría incorporarse a la Codeunit 408 y sería ella misma la que determinaría el tipo de dato que la llama y pasaría los datos al formulario. Veréis que esta forma no es mejor y quizás no sea necesario el uso de recordRefs y fieldRefs pero pienso que es un ejemplo bastante didáctico para entender correctamente el uso de este tipo de variables. La función necesaria tendría este aspecto:

Una vez hecho esto procederemos a modificar la función ShowDimensions de la tabla 111, de forma que apunte a la nueva función que acabamos de desarrollar en el anterior punto:

Después de esto, modificaremos el Form 130 dónde añadiremos una nueva opción para mostrar las dimensiones del documento asociadas a la cabecera a través de nuestro nuevo método:

En su interior, escribiremos el siguiente código:

Como podemos ver, tanto el acceso desde las líneas como desde la cabecera funciona correctamente. Ahora sólo queda hacer lo mismo con el resto de documentos de venta:

Espero que os haga gustado y que os sirva de mucha ayuda. Podéis descargar este ejemplo a través del siguiente enlace: Descarga (Cuidado: la importación de éste objeto puede sobreescribir desarrollos. Se recomienda importar en una base de datos de pruebas).