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;Me gustaría poder escribir estas líneas como:
Att = "valor" If [condiciones] on AfterValidate;
{El inicio y fin de bloque no tienen por que ser con { y }, es solo un ejemplo.
msg('Atención: el atributo Att queda con valor "valor"');
Att = "valor";
}
If [condiciones] on AfterValidate;
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.
2 comentarios:
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.
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 :)
Publicar un comentario en la entrada