En busca de un Dynamic Combobox mas polenta.
Muchas veces los Dynamic Combobox de GeneXus me ponen de mal humor.
Quiero que quede claro, en el caso general, funcionan muy bien... Ahorran muchisimo tiempo, son rapidos y faciles de codificar. El caso que me preocupa, que cada vez lo veo con mas frecuencia es el siguiente:
Tengo una tabla de Clientes
*ClienteId
ClienteNombre
ClienteActivo (S=Activo, N=NO Activo).
Los clientes activos son los que me compraron en el ultimo año.
En el 99% de los casos en mi aplicacion me va a interesar mostrar solo los clientes activos, pues es a quienes les vendo y la inmensa mayoria de las consultas que realice van a ser sobre estos clientes. Para lograr esto, puedo definir un Dynamic Combobox, que tenga la condicion
ClienteActivo='S';
De esta forma, me mostrará una cantidad de clientes mucho menor, ayudando a mis usuarios a comenter menos errores y ademas mejorando la performance de la aplicacion que tiene que recuperar menos registros en la base de datos y se reduce el código HTML transmitido.
Problema
Esto parece algo muy bueno y parecen todas ventajas, pero ¿que pasa cuando un usuario quiere facturar a un cliente que no esta activo? o cuando quiere consultar las facturas de un cliente a quien no se ha facturado en el ultimo año?
En estos casos ya no se puede usar dicha condición en el combobox, por lo que hay que poner algun codigo adicional, para mostrar todos los clientes.
Esto se puede resolver, generando un procedimiento que cargue el combo, pero es un trabajo que creo que podria evitarse.
Lo que me gustaria.
Con los Dynamic Combo, me gustaria contar con un valor (a lo ultimo de la lista), que permita elegir entre varias opciones que serian diferentes condiciones especificadas con un when.
En el ejemplo anterior, el combo quedaria
Atributo: ClienteId
Descripcion: ClienteNombre
Default Condition: 'Clientes Activo': ClienteActivo='S'
Optional Condition1: 'Clientes Inactivos': ClienteActivo='N'
Optional Condition2: 'Todos los Clientes':
Y en el combo quedaría:
Al elegir las ultimas filas se permitiria cargar diferentes valores de la tabla de clientes, porque variarían las condiciones y hay que escribir bastante menos código.
Es verdad, tenés razon, yo los dynamic's los uso mucho sobre todo asociándolos a un dominio y luego desde las variables con ese dominio desde patterns, queda muy práctico y me ha sucedido esto que comentas y también estaría bueno lo de poder obtener datos de una formula tan sencillo como por ej. Nombre + Apellido, o algo un cachito mas elaborado.
ResponderBorrarEnrique, entiendo lo que planteas, pero, solo para el ejemplo, no te serviria poner afuera estas opciones, y la condition del dynamic tenerla condicionada?
ResponderBorrarej:
ClienteActivo='S' when &Cuales=TipoClientes.Activos;
ClienteActivo='N' when &Cuales=TipoClientes.Inactivos;
Si bien como dialogo queda mejor lo que planteas, no creo que sea necesario llegar a un proc de carga
Los Cardenales:
ResponderBorrarEs bueno saber que otros han pasado por lo mismo y se ven necesidades similares.
Lo de las formalas, los podrias hacer definiendo un atributo como formula y despues usarlo en el Combo, pero a mi me parece demasiado poner una formula solo para tener esta funcionalidad, aunque alguna vez lo he tenido que hacer.
Gonzalo (Moncho):
A lo mejor no te entendi bien.
Lo que planteas sirve para el control y muchas veces lo uso, pero no para definir el control por defecto de un atributo, pues la variable &Cuales no quedaria definida.
Lo que quiero es poder definir el combobox asociado al dominio/atributo ClienteId, de la forma que contaba (con varias condiciones) y que las mismas se hereden en todos los lugares que use ese dominio/atributo. En particular, me interesan los patterns, donde no voy a tener mucha facilidades para modificar el codigo.