Data Base Update Procedures Sp

download Data Base Update Procedures Sp

of 16

Transcript of Data Base Update Procedures Sp

  • 8/17/2019 Data Base Update Procedures Sp

    1/16

  • 8/17/2019 Data Base Update Procedures Sp

    2/16

    Hasta el momento, para actualizar los datos de la base de datos, hemos empleado lastransacciones en sus 2 formas de uso:

    •   Ejecutando su pantalla e ingresando datos en forma interactiva•   Y ejecutadas como Business Component, a través de una variable, sin usar la pantalla

  • 8/17/2019 Data Base Update Procedures Sp

    3/16

    Conoceremos ahora una alternativa más para realizar inserciones, modificaciones yeliminaciones en la base de datos.

    Debemos saber, que lo que veremos solamente puede ser usado en objetos de tipoprocedimiento, a diferencia de la alternativa que vimos usando BC, que podía usarsedesde cualquier objeto

  • 8/17/2019 Data Base Update Procedures Sp

    4/16

    En los procedimientos contamos con un comando llamado New, para insertar registrosen una tabla.

    Utilizando este comando, podemos asignarle valores a los atributos  de una tablafísica.

    Hablamos de una tabla y no de una transacción, porque no todos los atributos queestán en la estructura de una transacción, están presentes en la tabla física.

    Por ejemplo, si queremos insertar un vuelo, en la transacción Flight hay muchosatributos declarados en la estructura que no están físicamente en la tabla FLIGHT sinoque estan  en la tabla extendida de la tabla FLIGHT. Los hemos incluído en laestructura para mostrarlos en el form o bien para usarlos en las reglas.

  • 8/17/2019 Data Base Update Procedures Sp

    5/16

    Si vamos al nodo Tables y ubicamos a la tabla FLIGHT, vemos estrictamente losatributos pertenecientes a la tabla FLIGHT.

    A estos atributos, los podemos incluir dentro de un comando New, y asignarlevalores.

  • 8/17/2019 Data Base Update Procedures Sp

    6/16

    GeneXus determinará cuál es la tabla física donde insertará el registro, analizando losatributos que están   a la izquierda del signo de igual

    Si pertenecen todos a una misma tabla física, se realizará la inserción del registro endicha tabla y si no, se nos informará que no es posible determinar la tabla en la cualrealizar la inserción.

    La tabla que encuentra GeneXus se llama  tabla base del New.  En este caso es:FLIGHT.

  • 8/17/2019 Data Base Update Procedures Sp

    7/16

    Vamos a ver ahora cómo podemos actualizar un valor existente en la base de datos.

    Para cambiar un valor almacenado en un atributo, por otro valor, navegamos su tablabase mediante un For each y mediante una asignación, damos el nuevo valor.

  • 8/17/2019 Data Base Update Procedures Sp

    8/16

  • 8/17/2019 Data Base Update Procedures Sp

    9/16

    Resolveremos la misma funcionalidad que habíamos implementado, empleando elconcepto de business component y podremos comparar ambas soluciones.

    Recordemos que teníamos un web panel de nombre: “EnterPercentage” en el cual elusuario de la agencia de viajes podía digitar un porcentaje y al presionar el botónconfirmar, se ejecutaba el código que vemos aquí, para navegar todos los vuelos eincrementar el precio de cada vuelo.

    Presionamos el botón derecho del mouse sobre la solapa con el nombre del objetoEnterPercentage y elegimos “Save As” para obtener una copia del objeto con otro nombre.Le damos el nombre “EnterPercentage2”

    Vamos al evento asociado al botón Confirmar. Si bien en este evento hay un For each, laposibilidad de utilizar el mismo para actualizar atributos asignándole valores, solamente

    se permite en objetos procedimientos. Así que borramos este código y en el evento Entersolamente incluímos una llamada a un procedimiento, que es el que va a actualizar labase de datos.

    Creamos el objeto procedimiento de nombre “IncreaseFlightPrices” y en el source leasignamos al atributo FlightPrice, el valor que tenía el atributo multiplicado por 1.10. Latabla base de este For each es FLIGHT, se navegan todos los vuelos y para cada uno deellos estamos incrementando su precio en un 10%.

    Llamamos a este procedimiento desde el web panel “EnterPercentage2”.

    ¿Cómo hacemos para que el procedimiento conozca el valor digitado en el web panel?

  • 8/17/2019 Data Base Update Procedures Sp

    10/16

    En el web panel se conoce el valor de la variable &Percentage que digitó el usuario, perono en el procedimiento.

    Lo que haremos es enviarle el valor guardado en la variable, al momento de llamar alprocedimiento.

    Para lograr esto, dentro del paréntesis del call, incluimos a la variable &Percentage.

    Ahora en el procedimiento, debemos recibirla. En el procedimiento y en la sección rulesescribimos parm seguido de paréntesis.

    Dentro del paréntesis tenemos que recibir a la variable, pero la variable aquí no estádefinida. Podemos definirla con el mismo nombre que está definida en el web panel o conotro nombre. Lo importante es que el tipo de datos sea idéntico al tipo de datos de la

    variable enviada desde el web panel al procedimiento.

    Vemos que el tipo de datos de la variable &percentage en el web panel es: Numeric(3),así que en el procedimiento, la definimos así.

    Ahora en la sección de rules del procedimiento, dentro del paréntesis de la regla Parm,incluimos a la variable que recibimos. Todas las reglas deben finalizar con punto y comaen todo objeto, así que lo ponemos y salvamos.

    Por último en el source del procedimiento utilizamos la variable &Percentage en el cálculo.

    Presionamos F5.

  • 8/17/2019 Data Base Update Procedures Sp

    11/16

    Revisamos el precio actual de los vuelos, ejecutamos el web panelEnterPercentage2, ingresamos 50% de aumento y confirmamos. Luego vamos a ver

    los precios de los vuelos y vemos que se incrementaron en un 50%.

  • 8/17/2019 Data Base Update Procedures Sp

    12/16

    Comparemos las 2 alternativas que utilizamos para actualizar la base de datos.

    En la primera alternativa que implementamos, en el evento enter del web panelEnterPercentage, escribimos el For each y actualizamos la base de datos empleando ala transacción Flight como Business Component.

    En la 2da solución, el evento enter del webpanel EnterPercentage2, solamentecontiene una llamada a un procedimiento, el cual recibe el valor del porcentaje,navega con For each todos los vuelos y a cada uno de ellos, le calcula y asigna elnuevo precio.

    ¿Cuáles son las diferencias, ventajas y desventajas entre resolverlo de unamanera u otra?

  • 8/17/2019 Data Base Update Procedures Sp

    13/16

    Cuando empleamos business components se valida la consistencia de los datos que seintentan actualizar en la base de datos y se ejecutan las reglas definidas en la transacción

    que se está ejecutando como business component.

    Las reglas que generan mensajes como msg y error, también se disparan y los mensajescorrespondientes quedan guardados en una colección que se puede recorrer e imprimir.

    En un procedimiento, ninguna de estas cosas se realiza.

    Algo que hemos visto y es oportuno repasar, es que si bien el comando For each puedeser usado en un web panel, no es posible utilizarlo para modificar la base de datosdirectamente asignándole valores a los atributos, y que esto solamente puede llevarse a acabo desde un objeto procedimiento. Tampoco es posible codificar un comando New en unweb panel, ni incluir un comando delete dentro del For each.  Esto sólo es válido en

    procedimientos.

    Sí en cambio es posible, en cualquier objeto, modificar la base de datos con businesscomponents.

  • 8/17/2019 Data Base Update Procedures Sp

    14/16

    Algo importante que hay que saber, es que los procedimientos no controlan que losdatos que asignamos sean consistentes.

  • 8/17/2019 Data Base Update Procedures Sp

    15/16

    Es nuestra responsabilidad al usar procedimientos, asignar o insertar datos que seancoherentes con el resto de la información almacenada.

    En el ejemplo que vimos con New, al precio del vuelo (FlightPrice) y al descuento(FlightDiscountPercentage) les podemos asignar cualquier valor, ya que no son datosrelacionados con otras tablas.

    Sin embargo, el resto de las asignaciones que hay dentro del New, las estamos haciendo aidentificadores de aeropuertos y al identificador de una aerolínea, por lo que debemos sercuidadosos de asignarles valores que existan en las tablas que almacenan los aeropuertosy aerolíneas respectivamente.

    Si hubiéramos asignado un valor de identificador de aeropuerto o aerolínea no registradoen su correspondiente tabla el procedimiento no lo validaría, por lo que podríamos

    estar ingresando datos inconsistentes.

    Como las bases de datos controlan la consistencia de los datos interrelacionados, cuandoel usuario ejecuta la aplicación y se intenta asignar un valor no consistente, la base dedatos rechazará la operación y la grabación inconsistente no se llevará a cabo.

    Sin embargo el programa cancelará su ejecución y esto no es muy amigable para elusuario.

    Por lo tanto, si usamos procedimientos para actualizar la base de datos,  será nuestraresponsabilidad asignar datos válidos y bien relacionados.

    Lo mismo hay que tener en cuenta al actualizar datos, o eliminar registros.

  • 8/17/2019 Data Base Update Procedures Sp

    16/16

    Ya hemos visto cómo los procedimientos nos permiten insertar y actualizar registros en labase de datos. Vamos a ver ahora cómo eliminar registros.

    Para eliminar registros, contamos con el comando Delete que se usa dentro de uncomando For each.

    Básicamente hay que navegar la tabla en la cual queremos eliminar uno o varios registros,e incluir dentro del For each el comando delete.

    En el ejemplo vemos que estamos navegando la tabla Country, filtrando por el valor deun determinado país y por lo tanto eliminando puntualmente 1 registro, con el comandoDelete.

    Pero también podríamos haber eliminado a todos los países ingresados en la tabla

    Country.

    Dado que no necesitábamos filtrar determinados registros, ni ordenar, ni imprimir, el Foreach con la indicación de la transacción base elimina  todos   los países, al ejecutarsepodría dejar atracciones turísticas almacenadas referenciando países que han sidoborrados. Como la base de datos controlará la consistencia de los datos interrelacionados,de encontrar atracciones que referencian a un país que se está intentando eliminar,rechazará la operación y el programa cancelará su ejecución.