Formulas de genexus

Embed Size (px)

DESCRIPTION

Formulas de genexus

Citation preview

  • 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.