En el siguiente post vamos a validar como podemos crear un campo en el que vemos los valores seleccionados de una lista separados por comas, y tendrá un menú desplegable en el que podemos chequear para seleccionar cada una de las opciones, estos valores se guardaran en una tabla aparte. El ejemplo que vamos a utilizar sera para seleccionar uno o mas usuarios de Dynamics AX y guardar esta información como usuarios autorizados a realizar un proceso, igual podemos hacer esto con clientes, proveedores o según la tabla que se necesite.
Para realizar esto vamos a usar una clase estándar que se encarga de realizar todo el proceso y nos mostrara un lookup como se muestra a continuación :
Para comenzar lo primero que debemos hacer es crear la tabla donde vamos a guardar nuestra informacion, la creamos común y corriente agregando dos campos un id que va a ser el identificador de la tabla y un campo de tipo RefRecId para guardar el Recid del usuario seleccionado.
Ahora tenemos que crear un query que va ser la información que vamos a mostrar en el lookup, en este caso relacionamos la tabla de los usuarios de AX (SysUserInfo), y agregamos el Id, Email y el Recid para mostrar en la consulta.
Luego de esto vamos a agregar un campo que va a mostrar las opciones seleccionadas separadas por comas y mostrara el lookup para capturar la información, en este caso lo vamos a agregar a los parámetros de producción (ProdParameters), debemos agregar la siguiente linea en el método classDeclaration del formulario, vamos a usar la clase estándar SysLookupMultiSelectCtrl que nos permite hacer este funcionamiento de Selección Múltiple en Lookup en Microsoft Dynamics AX.
Ahora debemos crear el campo que va a servir para mostrar y guardar la información, lo creamos como un campo StringEdit y en las propiedades cambiamos la autodeclaration a Yes para usar este campo. También debemos reescribir los métodos jumpRef y modified del campo creado como se muestra a continuación.
El método jumpRef debe ser algo como esto, donde llamamos al menú ítem SysUserInfoDetail que abre el maestro de los usuarios de Ax, debemos cambiarlo y usar el menú según el que vayamos a usar.
El método modified también debemos reescribirlo y usar el datasource principal que en este caso es ProdParameters.
Ahora debemos ir al método init si no esta creado debemos crearlo e inicializar la variable que vamos a usar, después de element el parametros APUsersAutor corresponde al nombre del campo que autodeclaramos.
Ahora vamos a crear un método para que guarde y mantenga la información de lo que hemos seleccionado en la tabla que creamos, se aconseja crear este método dentro de la tabla donde vamos a relacionar la información para este caso son los parámetros de producción es decir la ProdTable. Este método debemos pasarle un container que es un arreglo de datos con los RecId de los registros seleccionados luego de esto el método recorre los registros de la tabla que creamos y valida si esta seleccionado si no esta se elimina de la tabla y del container, los valores que queden en el container deberán ser ingresados en tabla que creamos para tal fin. Este método debemos llamarlo al momento de guardar que se vera el código mas adelante.
Ahora debemos reescribir el método write del datasource principal y agregar la linea como se muestra, esto permite que se guarde la información de los registros seleccionados en el lookup
Ahora debemos crear un método para leer los valores de la tabla con los registros seleccionados este método debe retornar un container con los id como se muestra a continuación, se recomienda al igual que el método usado para guardar la selección crearlo en la tabla principal que para este caso es la ProdParameters.
Finalmente debemos reescribir el método updateControls del formulario debe quedar como se muestra a continuación, esto nos sirve para cargar la información de los registros que seleccionamos en el lookup, aquí llamados al método que carga la información de la tabla y retorna el container.
Cualquier duda o comentario no olvides en usar los comentarios, si te gusto comparte.