Download - Formulas de genexus
-
7/18/2019 Formulas de genexus
1/38
Video filmado con GeneXus X Evolution 2
Frmulas Globales
Muchas veces necesitamos que la aplicacin efecte un clculo, que involucra valores de determinados
atributos, constantes, y/o funciones.
Para estos casos, GeneXus nos provee las Frmulas
-
7/18/2019 Formulas de genexus
2/38
Video filmado con GeneXus X Evolution 2
Contamos con 2 formas posibles de definir frmulas:
Frmulas Globales que se conocen en toda la Base de Conocimiento,
YFrmulas Locales, que se conocen solamente en el objeto en el que se han definido.
Empecemos por aprender qu es una frmula globaly cmo se define.
-
7/18/2019 Formulas de genexus
3/38
Video filmado con GeneXus X Evolution 2
Una frmula global es un clculo que definimos asociado a un atributo.
Observemos que las estructuras de las transacciones, contienen una columna de ttulo Formula.
Si a un atributo, se le define un clculo en esta columna,
-
7/18/2019 Formulas de genexus
4/38
Video filmado con GeneXus X Evolution 2
le estaremos diciendo a GeneXus que dicho atributo es virtual, es decir que no deber crearse fsicamente
como campo en la tabla asociada, ya que el valor del atributo se obtendr efectuando el clculo que indicamos.
Veamos esto con un ejemplo.
Vamos a definir un nuevo atributo en la transaccin Flight, para almacenar el descuento actual que tiene cada
vuelo.
Ingresamos el atributo de nombre FlightDiscountPercentage su tipo de datos ser de un dominio Percentage
que lo definimos ahora, como un numrico de largo 3.
Vamos a definir otro atributo ms, de nombre FlightFinalPrice, que lo definiremos como frmula para que se
calcule automticamente el precio actual del vuelo en este atributo.
-
7/18/2019 Formulas de genexus
5/38
Video filmado con GeneXus X Evolution 2
En la columna frmula, procedemos a definir el clculo: FlightPrice * (1 FlightDiscountPercentage/100)
Y presionamos F5 para ver lo que sucede..
Vemos que en la tabla fsica Flight se est creando 1 slo campo, a pesar de que hemos definido2 atributos
nuevos en la estructura de la transaccin Flight.
-
7/18/2019 Formulas de genexus
6/38
Video filmado con GeneXus X Evolution 2
Por el hecho de tener una definicin en la columna frmula, este atributo no se agrega en la tabla fsica.
Debido a que el atributo est definido en la base de conocimiento con una frmula asociada, GeneXus sabe
calcular su valor y en todo objeto en el cual el atributo est presente, se efectuar el clculo y se mostrar el
resultado.
Procedamos a reorganizar
-
7/18/2019 Formulas de genexus
7/38
Video filmado con GeneXus X Evolution 2
Se generaron los programas y aqu vemos a la aplicacin en ejecucin
Ejecutamos a la transaccin Flight, consultamos el vuelo #1
y vemos en el form de la transaccin, los 2 nuevos atributos que definimos:
-
7/18/2019 Formulas de genexus
8/38
Video filmado con GeneXus X Evolution 2
el porcentaje de descuento, habilitado para que lo ingresemos
y el precio final, deshabilitado porque es el atributo que definimos frmula, y su valor no se ingresa,
sino que se calcular y desplegar.
Todo atributo que definamos como frmula global, ser un dato de lectura y no ser posible digitar valor
para l. Esto se debe a que el atributo obtiene su valor del clculo asociado, el cual se ejecuta cada vez que el
atributo se utiliza.
Adems no hay un campo en la tabla fsica para almacenar el valor de este atributo, as que no tiene sentido
que sea editable.
Ingresemos un porcentaje de descuento para este vuelo, de un 10 %
-
7/18/2019 Formulas de genexus
9/38
Video filmado con GeneXus X Evolution 2
Al salir del campo, vemos que inmediatamente se ejecuta la frmula
mostrndose el precio final del vuelo con el descuento aplicado.
Volvamos a GeneXus .
Hemos definido as un atributo frmula global.
-
7/18/2019 Formulas de genexus
10/38
Video filmado con GeneXus X Evolution 2
Solamente los atributospueden ser definidos como frmulas globales de la forma que vimos, haciendo uso de
la columna Frmula en la transaccin.
Algo importante a saber, es que si bien en el clculo del ejemplo, hemos involucrado solamente atributos de la
propia transaccin, es posible involucrar tambin atributos de la tabla extendida.
Vamos a verlo.
Crearemos un transaccin de nombre Airline para registrar las aerolneas.
Le definimos 3 atributos:
AirlineId
AirlineName y..
AirlineDiscountPercentage, del dominio Percentage, para registrar el descuento que realiza la aerolneapara todos sus vuelos.
Salvamos. Y ahora vamos a la transaccin Flight, para asignarle a cada vuelo la aerolnea que lo opera.
-
7/18/2019 Formulas de genexus
11/38
Video filmado con GeneXus X Evolution 2
Agregamos al atributo AirlineId, el cual tendr aqu rol de llave fornea.y cambiamos el valor de su propiedad
Nullable, al valor Yes,
para que podamos no especificar en esta primera etapa, la aerolnea del vuelo, ya que an no tenemos
aerolneas registradas. Ms adelante podemos volver a cambiar el valor de la propiedad Nullable a No, para que
sea obligatorio especificar la aerolnea en el momento de ingresar o modificar un vuelo.
Agregamos los atributos AirlineName y AirlineDiscountPercentage para visualizar estos datos en el form:
-
7/18/2019 Formulas de genexus
12/38
Video filmado con GeneXus X Evolution 2
Ahora vamos a modificar la definicin de nuestra frmula, para que calcule el precio final del vuelo, aplicndole
el descuento genrico de la aerolnea, en vez de aplicarle el descuento propio del vuelo.
Presionamos F5..
-
7/18/2019 Formulas de genexus
13/38
Video filmado con GeneXus X Evolution 2
Vemos la propuesta de creacin de la tabla fsica Airline con los 3 atributos que definimos y que en la tabla
Flight, se agregar la llave fornea AirlineId
Procedamos a reorganizar y a ejecutar
-
7/18/2019 Formulas de genexus
14/38
Video filmado con GeneXus X Evolution 2
Abrimos la transaccin Airline y agregamos una aerolnea, de nombre TAM y con un descuento del 30%:
Ahora vamos a asignar esta aerolnea a un vuelo. Al vuelo N1 le asignamos la aerolnea 1
-
7/18/2019 Formulas de genexus
15/38
Video filmado con GeneXus X Evolution 2
y vemos que se calcul el nuevo precio final del vuelo
que es un atributo frmula global
-
7/18/2019 Formulas de genexus
16/38
Video filmado con GeneXus X Evolution 2
el cual involucra al porcentaje de descuento de la aerolnea
que es un atributo de la tabla extendida de la tabla base Flight.
Algo que no hemos dicho an, es que las frmulas pueden evaluar condiciones y que el resultado puede
calcularse de diferentes formas dependiendo si dichas condiciones son verdaderas o falsas.
Veamos esto.
-
7/18/2019 Formulas de genexus
17/38
Video filmado con GeneXus X Evolution 2
Hacemos clic en este botn con 3 puntos, para editar la frmula ms cmodamente
Vamos a definir que se tenga en cuenta el porcentaje de descuento ms alto para calcular el precio final del
vuelo, as hacemos el mejor descuento posible.
-
7/18/2019 Formulas de genexus
18/38
Video filmado con GeneXus X Evolution 2
Con esta definicin, si la aerolnea tiene un descuento ms alto para todos sus vuelos que el porcentaje de
descuento que tiene el vuelo en s, consideramos para el clculo el descuento de la aerolnea.
Y en caso contrario
empleamos en el clculo al porcentaje de descuento propio del vuelo.
Presionamos F5.
Ejecutamos la transaccin Flight y al primer vuelo, le asignamos que su porcentaje de descuento propio, sea
mayor al porcentaje de descuento general de la aerolnea, por ejemplo un 50%.
-
7/18/2019 Formulas de genexus
19/38
Video filmado con GeneXus X Evolution 2
Vemos que el precio final del vuelo
se calcul teniendo en cuenta el mayor descuento.
Volvamos a GeneXus.
-
7/18/2019 Formulas de genexus
20/38
Video filmado con GeneXus X Evolution 2
Las frmulas pueden contener varias lneas seguidas de IF
y contener o no una ltima lnea con el OTHERWISE
-
7/18/2019 Formulas de genexus
21/38
Video filmado con GeneXus X Evolution 2
para el caso que no se hayan cumplido ninguna de las condiciones anteriores.
A su vez, si bien en este ejemplo la forma de obtener cada resultado fue mediante un clculo, tambin se
pueden emplear funciones aplicadas a atributos o clculos, como Round, para obtener un resultado
redondeado
o Month, para extraer el mes de una fecha,
-
7/18/2019 Formulas de genexus
22/38
Video filmado con GeneXus X Evolution 2
etc... e incluso se puede llamar a un procedimiento definido por nosotros, que retorne un valor.
Veremos ahora otro tipo de frmulas, que definiremos tambin como globales.
Vamos a crear un segundo nivel en la transaccin Flight y lo nombramos: Seat
Tal como el nombre del nivel lo describe, lo utilizaremos para registrar los asientos que ofrece el vuelo y
registraremos para cada asiento, si se encuentran al lado de la ventana, o en el pasillo o est en el medio de
estos. Luego querremos conocer siempre la cantidad de asientos que ofrece el vuelo.
Digitamos punto, y completamos el nombre del atributo: FlightSeatId
-
7/18/2019 Formulas de genexus
23/38
Video filmado con GeneXus X Evolution 2
Creamos otro atributo ms, que lo nombramos FlightSeat Location. Le asignamos un dominio Location de
tipo carcter(1).
Ahora vamos al nodo Domains, para modificar una propiedad del domino que acabamos de crear.
Ubicamos a la propiedad Enum Values
-
7/18/2019 Formulas de genexus
24/38
Video filmado con GeneXus X Evolution 2
y vamos a definir los 3 valores que puede tomar este dominio:
-
7/18/2019 Formulas de genexus
25/38
Video filmado con GeneXus X Evolution 2
Window y el valor que se almacenar si eligen Window, ser el caracter W
Middle y se almacenar una M
y Aisle y se almacenar una A en este caso
Presionamos OK.. y grabemos las definiciones que hicimos en la transaccin Flight.
Observemos el form de esta transaccin:
-
7/18/2019 Formulas de genexus
26/38
Video filmado con GeneXus X Evolution 2
Vemos que se agreg una grilla para poder ingresar los asientos del vuelo, y que para cada asiento se puede
indicar la ubicacin del mismo mediante un control combo
que ofrece los valores window middle o aisle, que son los valores posibles que hemos definido para el
dominio del atributo FlightSeatLocation.
Antes de presionar F5, observemos algo en la definicin del segundo nivel:
-
7/18/2019 Formulas de genexus
27/38
Video filmado con GeneXus X Evolution 2
Si la llave se compone de FlightId ms FlightSeatId, para cada vuelono podremos repetir los nmeros de
asiento. Pero necesitamos poder contemplar que el nmero de asiento se repita, ms una letra que vare, ya
que en general los asientos se identifican 1A, 1B, etc.
As que agregaremos un atributo FlightSeatChar. Su tipo lo definimos de un dominio SeatChar, character(1)
y hacemos que el atributo sea parte de la llave
-
7/18/2019 Formulas de genexus
28/38
Video filmado con GeneXus X Evolution 2
para que se puedan registrar nmeros iguales de asiento, con distinta letra.
Vamos a restringir que las letras posibles sean de la A a la F y para eso vamos a editar el dominio
Ubicamos su propiedad Enum Values y definimos los valores posibles:
-
7/18/2019 Formulas de genexus
29/38
Video filmado con GeneXus X Evolution 2
En este caso coinciden los valores de las descripciones con los valores que se almacenan.
Ahora, a efectos de conocer la capacidad de pasajeros que el vuelo permite, vamos a definir un atributo nuevo
en el primer nivel, como frmula, que contar la cantidad de asientos que ofrece el vuelo..
Creamos el atributo FlightCapacity, como un numrcio de 4:
Y en la columna Formula escribimos: Count, y entre parntesis referenciamos un atributo perteneciente al 2do
nivel, por ejemplo FlightSeatLocation y cerramos el parntesis:
-
7/18/2019 Formulas de genexus
30/38
Video filmado con GeneXus X Evolution 2
13.03
El atributo FlightCapacity no se crear fsicamente en la tabla FLIGHT por ser frmula global y siempre contar
la cantidad de asientos que tiene el vuelo.
Presionemos F5..
Vemos que se va a crear la tabla fsica FLIGHTSEAT
-
7/18/2019 Formulas de genexus
31/38
Video filmado con GeneXus X Evolution 2
asociada al 2do nivel de la transaccin Flight, con los atributos y llave que hemos definido y no se modificar la
estructura de la tabla FLIGHT ya que no se crear fsicamente el atributo FlightCapacity, tal como esperbamos.
Estamos de acuerdo as que procedemos
Ejecutamos la transaccin Flight... consultamos el vuelo #1 y vamos a registrarle algunos asientos:
1A-ventana
1B en el medio
1C pasillo
1D ventana
1E medio
1F pasillo
2A ventana y lo dejamos por ac..
-
7/18/2019 Formulas de genexus
32/38
Video filmado con GeneXus X Evolution 2
Observemos que la cuenta de los asientos, se actualiza cada vez que agregamos un asiento al vuelo
-
7/18/2019 Formulas de genexus
33/38
Video filmado con GeneXus X Evolution 2
Volvamos a GeneXus.
Contamos tambin con otras frmulas del estilo de Count, que realizan operaciones teniendo en cuenta varios
registros, como por ejemplo Sum
-
7/18/2019 Formulas de genexus
34/38
Video filmado con GeneXus X Evolution 2
-
7/18/2019 Formulas de genexus
35/38
Video filmado con GeneXus X Evolution 2
Average
y otras.
El atributo que se referencia dentro del parntesis de la frmula
le da la informacin a GeneXus de la tabla a navegar para realizar el clculo.
Si GeneXus detecta relacin entre la tabla navegada y donde se encuentra definido el atributo frmula,
solamente tendr en cuenta para el clculo los registros relacionados como en este ejemplo, que FlightId
est presente tanto donde est definida la frmula, como donde se navega y por lo tanto, se cuentan
solamente los asientos delvueloen el que estamos y no todos los asientos registrados en la tabla.
-
7/18/2019 Formulas de genexus
36/38
Video filmado con GeneXus X Evolution 2
De no encontrar relacin, GeneXus realizar la operacin teniendo en cuentatodos los registros de la tabla
navegada.
Adems, podremos contar o sumar o promediar determinados registros que cumplan con cierta condicin
explcita indicada por nosotros.
A modo de ejemplo, si queremos contar cuntos asientos con ventana tiene el vuelo, a esta frmula le
agregamos dentro del parntesis, una coma y la condicin correspondiente.
Dado que el atributo FlightSeatLocation es del dominio Location y el mismo tiene definidos estos 3 valores
enumerados la sintaxis para preguntar por el valor que tom el atributo, es sta:
nombre del dominio, punto, y nombre asociado al valor que nos interesa filtrar
-
7/18/2019 Formulas de genexus
37/38
Video filmado con GeneXus X Evolution 2
Presionamos F5, vamos a la transaccin Flight, consultamos el vuelo #1 y vemos que el atributo frmula, cont
y muestra ahora la cantidad: 3, que corresponde a la cantidad de asientos ubicados al lado de la ventana, lo
cual coincide con los ingresos que hicimos en la grilla de asientos.
-
7/18/2019 Formulas de genexus
38/38
Por ltimo debemos saber que al igual que todas las frmulas globales, estas podran tener tambin condicin
de disparo. Es decir que podremos agregar un if al final de la definicin, con alguna evaluacin especfica, paraque la frmula se dispare solamente si da verdadera dicha condicin.