El control chosen permite básicamente es una lista desplegable multi-selección.
En el caso de uso sobre transacciones es muy práctico para simplificar la delcaración de segundos niveles que solo hacen referencia foránea a otras tablas. En el ejemplo de la imagen inferior se pueden visualizar los Roles asociados a un usuario.
Se puede definir un chosen sobre una variable basada en un tipo de dato básico de GeneXus (Numéric o Character o basadas en dominios o atributos de esos tipos de datos) y que esté definida con la propiedad Collection en True.
Sobre el nodo ControlInfo PXTools habilitará la el valor Chosen en ese caso, habilitándose las propiedades de Dynamic Controls al igual que se define una Dynamic Combo o un Dynamic Radio Button.
En el caso de seleccionar un DataProvider como referencia de carga, el dataprovider deberá devolver los valores basados en el SDT "SdtChosen".
En el caso de uso de este tipo de variables en una Transacción o en cualquier objeto que requiera precarga inicial de valores seleccionados se contempla en forma automática que la carga de los valores reales del UserControl Chosen se realizarán al finalizar el evento Start. En el mismo sentido y en caso de Transacciones se contempla que el procesamiento de los valores resultantes del UserControl Chosen se pasarán a la variable declarada al inicio del Evento After Trn. Esto lo realiza automáticamente PXTools para:
Dado los valores de la colección de la variable instanciar los valores que el User Control requiere.
Dado los valores resultantes del UserControl cargar los mismos en la variable de tipo collection.
El programador deberá encargarse solamente de trabajar con esa variable de tipo collection:
Para cuando se entra en modo Update en una Transacción se deberá precargar la variable con los datos que se encuentren en la base de datos por lo que en el nodo Codes -> Evento Start de la transacción deberá quedar instanciada esa variable con los valores correspondientes.
Una vez confirmada la transacción deberá guardarse los datos resultantes de la variable en la base de datos. Para ello se deberá utilizar el nodo Codes -> AfterTrn para trabajar con los valores de la colección para actualizar, borrar o crear los registros en la tabla subordinada.
Métodos Virtuales
En algunas casos tanto el pasaje de los valores de la variable colección al User Control como el pasaje de los valores del User Control a la variable colección no serán en los eventos predefinidos que PXTools considera. En esos casos estamos previendo que a nivel del nodo Codes en cualquier tipo de programación se puedan utilizar métodos "virtuales" (porque no son realmente métodos dentro de GeneXus) que soliciten el pasaje de datos de la variable al User Control o que soliciten el pasaje del User Control a la variable. Estos métodos virtuales son:
&<Variable Name>.Repaint(): Fuerza la carga del User Control a partir de los datos de la variable. <Variable Name> es el nombre de la variable la cual se está asociando el Chosen.
&<Variable Name>.GetData(): Fuerza la carga de la variable a partir del User Control. <Variable Name> es el nombre de la variable la cual se está asociando el Chosen.