Hasta ahora hemos visto que por cada objeto transacción se crea una tabla por cada nivel, para almacenar sus datos y luego recuperarlos.

Documentos relacionados
Overview GeneXus - Demo: 2.Cómo obtener el ejecutable de la KB y declaración de algunas reglas del negocio.

Integridad Transaccional

Script For each simple tabla base y cláusula order

En el ejemplo, se procede en este orden:

Acceso a bases de datos externas

Manejo de Bases de Datos Mysql en Lenguaje C

Dos formas de devolver una colección con un Data Provider

Introducción a procedimientos, listados y comando For each

Relaciones entre entidades de la realidad

Sesión No. 10. Contextualización INFORMÁTICA 1. Nombre: Gestor de Base de Datos (Access)

Diseñando la primera transacción

Relaciones entre entidades de la realidad

Cargando los tipos de datos compuestos

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

Transformaciones entre el modelo Relacional y el modelo de Clases.

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

Pais { PaisId * PaisNombre } Pais { PaisId* PaisNombre } Pais. PaisId* PaisNombre

Manual de Usuario/a sobre el uso de firma electrónica avanzada

EJERCICIO 26 DE EXCEL

Uso de Disparadores. Miguel Angel Garduño Cordova Isaac Méndez Hernández

NOMBRE: Elaboración: Lic. Mónica Sánchez Medina. Fecha: 10 de junio de 2014

Aplicaciones de Bases de Datos con Delphi - II

El propósito de este material es brindar las explicaciones más importantes sobre bases de datos, relevantes para el uso de GeneXus.

Tipos de datos estructurados

PARAMETRIZACION CONTABLE DEL MÓDULO VENTAS

Demo: empezando a desarrollar la aplicación en su parte web

COMBINAR CORRESPONDENCIA

MANUAL DE USUARIO NOTAS PARCIALES MODULO CONFIGUARACION DE NOTAS -288

Momentos de disparo de reglas en transacciones

GUIA DE USUARIO PAGOS DE SERVICIOS DGA

El listado de navegación nos informa claramente que la tabla base es ATTRACTION, que la recorrida será ordenada por la clave primaria de dicha tabla:

Integridad Referencial. Restricciones (constraints)

Pre-Taller Gestión de Privilegios de Usuarios 2. Manipulación de Vistas 3. Creación y manipulación de Triggers (Introducción al uso de PL/pgsql)

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

Fundamentos de Bases de Datos Facultad de Ciencias UNAM

Reporting (objeto Query)

Carlos A. Olarte Ligaduras de Integridad y Restricciones sobre la BD

Nuevos Tipos de IVA Septiembre 2012

Instructivo Costo Promedio Ponderado en el software administrativo

UNIDAD 1: CONCEPTOS BA SICOS DE BASE DE DATOS

Manual de Usuario para Proponentes

Tema: Clases y Objetos en C#. Parte II.

FLUJO DE INFORMACIÓN DE LA BIBLIOTECA PARA ACCEDER AL INFORME

WorkManager E.D. Manual guía de usuario Diseñador de formularios

Qué necesitas? Cómo acceder al sistema Creación y confirmación de cuenta Perfil de la Organización Solicitudes - Solicitud de Exención Contributiva

Sistemas Distribuidos. Bibliografía: Introducción a los Sistemas de Bases de Datos Date, C.J.

PowerPoint 2010 Edición del contenido

Bases de Datos OTROS ASPECTOS MODELO E-R

Objetos OLE 1. IMAGEN DE FONDO

Cláusula Unique. La cláusula Unique permite mencionar atributos cuyos valores no deben salir duplicados en el resultado de la consulta.

Sistema de Presentación y Gestión de Proyectos Instructivo para la carga de Proyectos.

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

Guía rápida de usuario

Aplicación del GAM. Una vez autenticado el usuario podrá comenzar a utilizar la aplicación.

Requerimientos de Software

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Inicio rápido: Ver informes

ACCEDER A BITÁCORA DE TRABAJO SQL SERVER

UNIDAD 2: Bases de Datos en Visual Basic

MANUAL. Módulo de Devoluciones Web

Depr Version: 1.2. Modulo de Aval System + HP 50

Manual de Instrucciones Definición de Componentes y Registro de Notas Parciales

ASP.NET MVC 3 ofrece una serie de herramientas y funciones para construir una aplicación utilizando sólo la definición de los objetos del modelo.

Uso del Portal Mercado Público.

NATIONAL SOFT HOTELES GUÍA DE MIGRACIÓN DE BASE DE DATOS

Nota: el archivo no debe tener espacios en blanco al final (es decir, después del último insumo ingresado).

GUÍA RÁPIDA POLIGONALES CON TRIMBLE SURVEY CONTROLLER

MÓDULO 6 I.V.A. / I.G.I.C.

MANUAL DE USUARIO SISTEMA DE INGRESO DE CALIFICACIONES EN LÍNEA

Symantec Enterprise Vault

SISTEMA DE CONSULTAS PAGOS DE PROVEEDORES

Concepto de vista. (con ciertas limitaciones). nivel físico) Una vista es una tabla virtual (no tiene una correspondencia a

Prototipado, instancias e historia de un proceso

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

INSTITUCION EDUCATIVA MANUEL ANGEL ANACHURY AREA: TECNOLOGIA E INFORMATICA

Manual de Usuario SIGECOF REGISTRO DE ASIENTO DE AJUSTE

PERIODO 3 HOJA DE CÁLCULO CONCEPTOS INTERMEDIOS OPERACIONES CON CELDAS, FILAS Y COLUMNAS EN EXCEL SELECCIONAR COPIAR MOVER BORRAR

Data Bases 2. La sintaxis precisa de esta función es: mysql_pconnect (nombre del servidor, el usuario de la base de datos, password ) ;

Qué son los subtipos?

GUÍA RÁPIDA. Cómo rendir cuentas de un gasto o viaje de forma rápida?

Fórmulas de Competición

media = ( temp0 + temp1 + temp2 + temp3 + temp temp23 ) / 24; printf( "\nla temperatura media es %f\n", media );

Manual de usuario Portal de Proveedores

Introducción al SQL de InterBase: DDL y DML

COBHTTPD-CGILIB. Librería para creación de Paginas web Dinámicas con COBOL. Manual de Templates. COBHTTPD Manual de Templates

Programación en Visual Basic Ricardo Rodríguez García

Guía de Módulo de Egresos

DEMOSTRACION DE UNA APLICACIÓN N-CAPASCON JAVA- POSTGRESQL

Creando Plantilla de Procesos para la Generación de Team Project

En la parte inferior de la pantalla se podrá ver el estado de la última copia y la fecha y hora actual.

Relaciones en Access 2010

5.3 CREAR FORMULARIOS

Introducción a la Programación en Visual Basic y su aplicación en Excel. M.I. Jaime Alfonso Reyes Cortés

ANAGOLF. Sitio administrativo, Facturación. Manual de usuario. Melquisedeth Soto Paniagua 10/09/2013

Devolución a Proveedores

Objetivos y Temario CURSO MySQL 5

MÓDULO 10 INVENTARIO

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

1. Aplica formato a un documento y genera en forma automática el índice del mismo, con eficiencia y eficacia.

Administrando las bases de conocimiento (GXserver)

Transcripción:

Hasta ahora hemos visto que por cada objeto transacción se crea una tabla por cada nivel, para almacenar sus datos y luego recuperarlos. La transacción, en su forma canónica, se utiliza para poder realizar las operaciones de inserción, modificación y eliminación en esas tablas a través de su pantalla, y, por otro lado, para poder navegar (recuperar) los datos de esas tablas.

Ya habíamos visto cómo podíamos asociar un Data Provider a la transacción a los efectos de poder poblar su/s tabla/s con datos. Recordemos que el Data Provider usado para ( Used to ) poblar con datos ( Populate data ) se ejecutará en la reorganización, cuando las tablas asociadas a la transacción se creen. Nota: Si ese Data Provider es modificado en algún momento posterior será ejecutado nuevamente en el próximo F5. Por lo que hay que tener cuidado con los datos que ya estuvieran presentes en las tablas. El Data Provider es únicamente utilizado para inicializar. Luego la transacción se comportará como la canónica, es decir, accederá normalmente a sus tablas para recuperar la info y permitirá insertar, actualizar y eliminar registros del modo usual. Observar la propiedad Update Policy y su valor Updatable.

Pero también podemos modificar el uso default de la transacción de modo de impedir que se puedan actualizar sus datos. Es decir, una vez inicializadas las tablas con datos, esos datos no podrán modificarse ni podrán agregarse nuevos. Para ello, habiendo especificado que la transacción tendrá un Data Provider asociado, Usado para Populate Data, se cambiará la política de actualización que por defecto es Updatable a Read Only.

Aquí veremos que es posible conservar los usos de la transacción insertar, modificar, eliminar, así como navegar (recuperar) sus datos sin que la información esté almacenada en las tablas canónicas. En definitiva tendremos un caso de transacciones que no crean tablas en la base de datos de la aplicación. Si no crean tablas entonces tendremos que especificar de dónde se recuperará la información cada vez que se quieran navegar sus datos. Y también tendremos que especificar qué hacer cuando el usuario ingrese datos en la pantalla y quiera insertarlos en las tablas (o actualizarlos o eliminarlos ).

Para Insertar, Modificar, Eliminar, tendremos que programar explícitamente tres eventos con esos nombres. Para Navegar (recuperar) la información de la transacción, tendremos que programar el Data Provider asociado a la transacción. Así como en el caso en el que usamos un Data Provider sólo para poblar con datos las tablas podíamos evitar las actualizaciones indicando con una propiedad que la política sería Read Only, aquí también podemos querer utilizar la transacción sólo para recuperar su información, y no para actualizarla. La propiedad será la misma, Update Policy, que asume los dos valores que mostramos. Estudiaremos en lo que sigue un ejemplo para clarificar el qué y el cómo.

Supongamos que tenemos dos transacciones comunes: Invoice, para representar las facturas que emite la agencia de viajes a sus clientes por compras de viajes, excursiones, etc. Estas facturas se identifican con un número correlativo. Receipt, para representar los recibos que la agencia de viajes le emite a sus clientes por sus compras. Los recibos también se identifican por números correlativos entre sí. El sistema contable de la agencia de viajes necesitará manipular facturas y recibos en movimientos. En los movimientos los recibos son un tipo de documento, así como lo son las facturas. Los movimientos se identifican por un id único, autonumerado. Obsérvese que el movimiento 1 puede ser de la factura 1, y el movimiento 2 del recibo 1. La transacción de movimientos homogeiniza la información de facturas y recibos. Es por ello que se crea la transacción Documents, con identificador compuesto por DocumentType y DocumentID. Esta transacción será como una vista que conjuga la información contenida en las tablas de Invoice y de Receipt. Es decir, no creará una tabla para contener la información sino que la tomará de las tablas correspondientes a Invoice y a Receipt, de idénticos nombres. Luego, la transacción Movement será una transacción común, que generará una tabla MOVEMENT que tendrá como una pseudo-llave foránea a DocumentType, DocumentID. Por qué pseudo? Porque en verdad no existirá una tabla física, DOCUMENTS, con llave primaria DocumentType, DocumentID a la cual referir. Pero a nivel lógico sí existirá y como mencionaremos luego, los controles de integridad referencial se realizarán.

Cuando especificamos que la transacción tendrá Data Provider asociado para los datos, se habilita la propiedad Used to (la Update Policy está siempre habilitada). Si especificamos que ese Data Provider será utilizado para recuperar los datos (propiedad Used to: Retrieve Data) automáticamente GeneXus entenderá que no deberá crear la tabla asociada a la transacción pues en ese Data Provider se declarará de dónde obtener los datos. En nuestro caso, será de las tablas INVOICE y RECEIPT, asociadas a las transacciones de igual nombre.

Así declararemos el Source del Data Provider. Tenemos un grupo Documents para devolver todos los documentos que son facturas, y otro grupo para devolver todos los documentos que son recibos.

A partir de aquí toda vez que ejecutemos la transacción para navegar por sus datos, se ejecutará este Data Provider que será el que cargará la información apropiada en la pantalla de modo transparente para el desarrollador y para el usuario, quien nunca percibirá que se trata de una transacción sin tabla. Luego, la transacción dinámica se utiliza como cualquier otra transacción. Por ejemplo si se quieren imprimir todos los documentos ordenados en forma descendente por fecha, se creará un procedimiento con el for each que se indica. En el printblock se colocan los atributos DocumentDate, DocumentType, DocumentId, DocumentAmount como siempre. La forma de obtener esos datos la resuelve GeneXus a partir del Data Provider que contiene su lógica.

Ahora bien, las transacciones no se utilizan solamente para recuperar sus datos sino también para actualizarlos. Cómo logramos hacer esto, dado que no tenemos tabla asociada a la transacción?

Si la propiedad Update Policy está con el valor Updatable se ofrecerán los eventos Insert, Update y Delete para programar cómo insertar, actualizar y eliminar la información que el usuario completó en la pantalla. Sólo el desarrollador sabrá qué debe hacer en cada caso con esa información. Dependiendo de la realidad se querrá permitir realizar estas acciones o no. Nuestro caso parece ser uno en el que no deberían permitirse. Pero supongamos que sí.

Cuando el usuario haya terminado de llenar los campos de la pantalla para insertar un nuevo movimiento y presione Confirm, tendremos que insertar un nuevo registro en la tabla Invoice o en la Receipt, dependiendo del valor que haya dado el usuario al campo DocumentType. Para ello utilizamos las variables &Invoice y &Receipt de los tipos de datos el Business Component Invoice y Receipt, respectivamente (que tendremos que haber obtenido a partir de las transacciones). En lugar del método Insert del business component podríamos haber usado el Save. Observemos que no necesitamos escribir el commit, puesto que estamos en el contexto de la transacción Document, que sigue teniendo la propiedad Commit on exit en Yes por defecto, es decir, hará su commit en forma implícita.

Aquí vemos cómo codificaríamos el Update. Como no sabemos qué campos cambió el usuario, asignamos todos los valores.

Y por último el Delete.

No nos hemos preguntado qué pasa si tenemos reglas especificadas a nivel de la transacción dinámica. En qué momento se van disparando? Qué pasa con el árbol de evaluación? Qué pasa con los mensajes de éxito o fracaso de las operaciones Insert, Update, Delete? Del estilo del Data was successfully added.

Ya que no se creará tabla DOCUMENT asociada a la transacción Document podríamos suponer que entonces en la tabla MOVEMENT asociada a la transacción estándar Movement el par de atributos DocumentType y DocumentID no podrán constituir la llave foránea que deberían. Entonces GeneXus no podrá controlar la integridad referencial? Como la integridad referencial debe asegurarse, GeneXus genera triggers de SQL para asegurarla. Por tanto podemos decir que {DocumentType, DocumentID} constituyen en Movement una pseudo llave foránea. En definivita, no se permitirá eliminar en Document facturas o recibos para los que haya un movimiento, y tampoco se permitirá ingresar un Movimiento que no exista como documento.

Aquí vemos un resumen de las propiedades y sus efectos.

Aquí encontrará más ejemplos de uso de transacciones dinámicas y un desarrollo completo del tema: http://wiki.genexus.com/commwiki/servlet/wiki?28062,dynamic%20transactions. Para el caso de proveedores de datos externos que manejen repositorios de datos con algún álgebra relacional (no tienen por qué ser bases de datos en el sentido de SQL) se utiliza otra solución que es importando el servicio (ej: Odata, CouchDB, otros no SQL). Al hacerlo GeneXus genera automáticamente la transacción y un Data view, que es un objeto creado por GeneXus utilizado con el fin de proveer la interfaz de comunicación entre la transacción y la tabla externa. Este será otro caso en el que una transacción no crea tabla en la base de datos propia. Se utiliza cuando se hace ingeniería inversa (utilizando DataBase Reverse Engineering Tool). En este caso, como en el de transacciones dinámicas, el desarrollador utilizará BCs y For eachs como de costumbre, que internamente se traducirán en las invocaciones al servicio externo.