Expression es un nuevo tipo de dato presente en GeneXus X que evalúa fórmulas y expresiones en tiempo de ejecución, donde las mismas pueden ser construidas por el propio usuario o analista del negocio.
Pasos a seguir en nuestro código para utilizar este tipo de dato:
• Primero se define una variable de tipo Expression (&exp01), indicando la fórmula o expresión que se quiere evaluar, en este caso a*b+c, asignado en la variable de tipo carácter &exp01Expression dicha asignación.
Para definir una Expression se puede utilizar una combinación de operadores aritméticos, relacionales y operandos, así como también se permite el uso de procedimientos GeneXus (siempre que sigan determinada estructura de entrada/salida).
1)
&exp01Expression = "a*b+c" &exp01.Expression = &exp01Expression
|
• Como segundo paso debemos asignar valores a los operandos de dicha formula, en este caso notar que a los operandos a, b y c deberán asignarle el valor correspondiente. Supongamos que los valores que se necesitan evaluar se encuentran en las variables &int1, &int2, &int3:
2)
&int1 = 1.11 &int2 = 2.22 &int3 = 3.33 &exp01.Variables.Set( "a", &int1.ToString() ) &exp01.Variables.Set( "b", &int2.ToString() ) &exp01.Variables.Set( "c", &int3.ToString() )
|
• Se tiene todo lo necesario para poder realizar efectivamente la evaluación, para ello se utiliza el método Evaluate de la siguiente manera:
3)
&Result = &exp01.Evaluate() |
El resultado queda en la variable &Result. Debido a que la expresión se asigna y evalúa en tiempo de ejecución es importante chequear posibles errores utilizando las propiedades ErrCode y ErrDescription. Por ejemplo:
4)
If &exp01.ErrCode = 0 // Execution OK! else // an error occured EndIf
|
Siguiendo con el ejemplo a partir de los operandos a,b,c cargados a la variable Expression se podría asignar cualquier tipo de expresión y evaluar dinámicamente nuevamente la misma ¡Sin tocar ni una línea de código de la aplicación! Algunos ejemplos que podrían evaluarse son:
5)
&exp01Expression = "-a*(-b+c)" &exp01Expression = "a*(b+c)/100" &exp01Expression = "1+2*3+a*(b+c)/4" &exp01Expression = "log( a * b + c)" &exp01Expression = "abs( a * b + c)" &exp01Expression = "iif( a < b , a , c)"
|
También podrá definir expresiones que utilicen diferentes operandos, tenga en cuenta que deberá cargar los valores asociados antes de utilizar el método Evaluate como se detalló en el paso 2.
En términos generales, si necesita evaluar una expresión en tiempo de ejecución tenga en cuenta la existencia del tipo de dato Expression; sólo necesita definir la expresión a evaluarse, cargar sus respectivos operandos y evaluarla.