viernes, 8 de mayo de 2009

Bloques de reglas en transacciones GeneXus

Una cosa que me gustaría tener en GeneXus, son bloques de reglas.

Muchas veces pasa que tenemos varias reglas en una transacción que se ejecutan con las mismas condiciones.

Un ejemplo sencillo:
msg('Atención: el atributo Att queda con valor "valor"') If [condiciones] on AfterValidate;
Att = "valor" If [condiciones] on AfterValidate;
Me gustaría poder escribir estas líneas como:

{
msg('Atención: el atributo Att queda con valor "valor"');
Att = "valor";
}
If [condiciones] on AfterValidate;
El inicio y fin de bloque no tienen por que ser con { y }, es solo un ejemplo.

Me parece que el código quedaría mucho más fácil de leer, sobre todo teniendo en cuenta que ahora las reglas pueden estar separadas por otras reglas en el código.

Otra cosa que estaría bueno es poder decirle a GeneXus que las reglas de un determinado bloque se ejecuten en el orden que están escritas, pero eso ya me parece más difícil de conseguir.

4 comentarios:

  1. Muy buena idea Marcos, si, realmente es necesario algo así (Hay algunas TRN's que realmente son desquiciantes)

    Una de las cosas que veo "incomodo" es el tema de que el IF esté siempre al final, cuando la reglas es muy extensa hay un costo "visual" de tener que leer las condiciones al final.

    Una buena opción que ayudaría con el tema de los bloques y el if al final sería algo como

    If [condiciones] on AfterValidate
    {
       msg('Atención: el atributo Att queda con valor "valor"');
       Att = "valor";
    };

    Lo otro que puede ayudar es que a si existen bloques, es posible reutilizar y hacer "cascada" (Cosa que hoy se hace repitiendo muchas condiciones en varias rules).

    Algo como:

    If [condiciones] on AfterValidate
    {
       msg('Atención: el atributo Att queda con valor "valor"');
       Att = "valor";
       If [otrascondiciones]
       {
          ....
       };
    };

    Algunos lo que hacen para simplificar las reglas hoy en día es setear "Flags" en base a condiciones y luego ejecutar reglas en base a los valores de las Flags (con lo que se ahorran el tener que escribir N veces las condiciones).
    Con el manejo de los Bloques la verdad que se podría reducir la cantidad de código y sería mucho mas visual la "descripción funcional" de la regla.

    ResponderEliminar
  2. David:

    Lo de poner el if arriba, no me molesta. Lo puse abajo porque es como se leen las reglas ahora, pero de cualquier forma me sirve.

    Lo de hacer bloques en cascada también está bueno. En realidad lo había pensado más por el lado de poder ponerle a cada regla un if adicional y que haga el AND con los ifs de la regla más el global...

    En todo caso, si implementan lo de los bloques después ya pediremos los demás cambios :)

    ResponderEliminar
  3. Muy buenas tardes;

    el presente correo es para saver si me pueden ayudar con un caso que tengo.
    uso: Genexus 9.0 , Genexus D.E U7, Genexus VFP U3, win, Visual foxpro 7, Sql server 2005 expres

    Soy novato estoy aprendiendo solo pero ai voy adelante poco a poco, el proglema es tengo una trn que se llama Invoice y otra que se llama Product todo funcion bien todo el procedimeinto de salida por factura.
    pero en product cree 2 campos IVA., %Desc. para poder facturas por linea los producto quienen tienen IVA, %desc. todo funciona la formula todo y en Worpanel uso botones con mode DSP para visualisar las facturas hechas todo bien tambien.
    pero si yo cambien en algun producto el iva o el %desc. se cambien todo bien los precios se miran bien pero si uno consulta una factura ya guardada me sale todo lso precions bien con los descuento y IVA pero en la columna no me sle % desc. me salen como lo modifique..
    pero internamente en la base de datos del sql server 2005 express esta bueno yo cambio en producto y no pasa nada esta bueno internamente solo es en la visualizacion.. entonces cree una Data View para que visualizada la trn Invoice lo puse todo bien cree otro wordpanel para acer la consulta de la facturas(invoice de la base de datos) cuando apreto el boton con call para la nueva opciones que puse me sale el formulario de conulta pero me sale vacio pero si doy un clic en la Grid me aparece todo la informacion correcta pero tengo que dar clic en la grid si no lo ago no sale nada.

    les subi un video en Youtube de lo que ago y lo que ise para que me digan que es lo que tengo malo van a ver como ago los cambio en product descuento y en invoice ya la facuta guardada se cambi pero solo eso los precios y el descuten total y iva total eso quedan bien solo es en la vista de %desc. y les voy a mostrar el area del facturacion va aver una boton que se llama gggggg es la que tenia anterion mente pero van a ver cundo se ase lso cambio se modifica tambien y no deve de ser asi y va a ver otro boton a la par del modifivar ese es el que eyo aseindo con Dataa View y van a ver que cuando lo ejecuto aparece el word panel consulta facuracion pero vacia pero si le doy clic a la grid ai sale toda la inofmracion correcta..

    el video dura 8 minutos con 39 segundos yse todo el procediento del agregado del data view al wordpanel pero estuve viendo que si le quito la grid del wordpanel consulta factura ai si me carla el encabesado del nombre del cliente etc, y en la parte de abajo me carla las cantidad del dinero pero si buelvo a poner la grid no me sale nada solo si le doy clic

    este es el link :

    http://www.youtube.com/watch?v=ScPyYmCImgA&feature=youtu.be

    espero me puedan ayudar y me tengan paciencia cuando me expliquen por que casi no se tanto

    ResponderEliminar
  4. HOLA, ALGUIEN SABE COMO COLOCARLE UN COLOR A UN BOTON GENEXUS USANDO .NET.

    ALGUIEN QUE ME AYUDE.

    ResponderEliminar