modificar propiedades formcontrol override eventhandler ax7 dyn365fo

Modificar propiedades de FormControls en #MSDyn365FO

Hola a todos, en este artículo vamos a hablar sobre los pasos que hay que hacer para poder modificar las propiedades de distintos controles de un formulario (FormControls) en tiempo de ejecución para Dynamics 365 for Finance and Operations (aka #D365FO). – ¿De qué estás hablando Juanan? – Pues del típico control que debemos hacer, por ejemplo, sobre un botón de un formulario que debe ser habilitado/deshabilitado en función del registro seleccionado.

Para todos los que tenéis experiencia en Dynamics AX (2012 hacia atrás), sabéis lo fácil que es realizar este control, ya que simplemente necesitamos poner la propiedad AutoDeclaration del control (botón, tab, group…) a Yes, para, posteriormente, añadir la línea de código necesaria (formContro.enabled(true/false)) en el método que consideremos (normalmente el active() del DataSource).

¿Quiero decir con este artículo que esto ha cambiado en esta nueva versión? Sí. (En realidad no, bueno, en parte 🙂 ) ¿Entonces, que es lo que ha cambiado? Pues la principal diferencia la encontramos en si estoy trabajando sobre un formulario estándar o si, por el contrario, estoy trabajando sobre un formulario creado por nosotros, y estos dos casos son los que vamos a ver:

1. – Formulario creado por nosotros (nuevo)

Partimos de un nuevo formulario en el que damos de alta todos los libros de una biblioteca por un lado, y estos libros pueden ser alquilados, gestión que se realiza desde otro formulario. En el formulario de maestro de libros, contamos con un botón que nos lleva al segundo formulario filtrando el resultado por todos los alquileres que ha tenido ese libro concreto a lo largo del tiempo. Pues bien, lo que necesitamos es que ese botón esté habilitado o deshabilitado dependiendo de si ha sido alquilado alguna vez o no.

Para llevarlo a cabo, primero nos posicionaremos sobre el botón en cuestión, para poner su propiedad AutoDeclarationYes (Declarar el control de forma global)Autodeclaration formcontrol

Seguidamente, sobrescribiremos el método active()

Override active method

Y añadimos el código necesario dejándolo de la siguiente manera:

Una vez añadido el código, solo nos queda compilar y ejecutar para ver que el resultado es satisfactorio. En el siguiente ejemplo podemos ver como para el libro «L0001», el cual ha sido alquilado varias veces, tenemos el botón Habilitado, mientras que el libro «L0002» lo tiene deshabilitado debido a que nunca fue alquilado.Form control enabled disabled

2. – Formulario estándar (extensión)

En este caso, lo que haremos es crear una extensión del formulario de clientes para añadir un nuevo botón. Este botón abrirá el formulario de alquileres, filtrando el resultado por los alquileres realizados por un cliente concreto, y la idea es que, si un cliente no ha realizado ningún alquiler, este botón esté deshabilitado.Create extension

 

Como imagino que sabéis (y si no, os lo cuento 😉 ), en las extensiones de los formularios (y tablas, queries, etc…) no podemos añadir código directamente ni hacer override de métodos estándar como hemos estado haciendo toda la vida. Por lo tanto, si queremos añadir código a objetos estándar, lo que debemos hacer es crear manejadores de eventos o clases que extiendan el código de estos objetos. En este caso, crearemos un nuevo manejador de eventos en el que escribiremos el código necesario para que, cuando el evento OnActivated salte (se ejecuta después del método active(), algo así como el «después del super()»), podamos introducir el código necesario para habilitar o deshabilitar nuestro botón. Para ello, nos vamos al evento OnActivated del DataSource CustTable, y dando botón derecho sobre el podemos copiar la definición del manejador de eventos que necesitamos.Copy event handler

 

Otro aspecto a tener en cuenta, es que no podremos modificar las propiedades del control aunque lo «Autodeclaremos», por lo que tenemos que ver la forma de obtener dicho control para modificarlas.

Ahora, creamos una nueva clase para gestionar los EventHandlers que tengan que ver con el formulario CustTable, y pegamos el código que hemos copiado, añadiendo posteriormente la parte necesaria para que quede de la siguiente manera.

Como podéis ver en el código, desde los parámetros recibidos en el método (sender == DataSource CustTable) somos capaces de navegar a los distintos elementos que forman el formulario (DataSource, design, registro activo, controles…) y modificar sus propiedades directamente sobre ellos, obteniendo el resultado que estábamos esperando.FormControl enabled

En resumen, ya hemos visto las distintas formas que tenemos de modificar el comportamiento de distintos controles del formulario, y, de igual manera, podemos utilizarlo para ocultar o hacer visible distintos controles, hacer un campo mandatory, etc.

Espero que os sea útil, y cualquier sugerencia no dudéis en comentar! 🙂

2 comments / Add your comment below

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies