4D v16.3Utilización de transacciones |
||
|
4D v16.3
Utilización de transacciones
Utilización de transacciones
Las transacciones son una serie de modificaciones efectuadas al interior de un proceso sobre datos relacionados. Una transacción no se guarda permanente en la base hasta que la transacción sea validada. Si no se completa una transacción, bien sea porque se cancela o por un evento externo, las modificaciones no se guardan. Durante una transacción, todos los cambios realizados a los datos de la base dentro del proceso se almacenan localmente en un buffer temporal. Si la transacción se acepta con VALIDATE TRANSACTION, los cambios se guardan de manera permanente. Si la transacción se cancela con CANCEL TRANSACTION, los cambios no se guardan. En todos los casos, ni la selección actual ni el registro actual son modificados por los comandos de gestión de transacciones. 4D soporta transacciones anidadas, es decir, transacciones en varios niveles jerárquicos. El número de subtransacciones autorizadas es ilimitado. El comando Transaction level permite conocer el nivel actual de transacción en el cual se ejecuta el código. Cuando utiliza transacciones anidadas, el resultado de cada subtransacción depende de la validación o cancelación de la transacción de nivel superior. Si se valida la transacción de nivel superior, los resultados de las subtransacciones se confirman (validación o cancelación). Por el contrario, si la transacción superior se cancela, todas las subtransacciones se cancelan, sin importar sus resultados. Nota: por razones de compatibilidad, las transacciones anidadas están desactivadas por defecto en las bases de datos convertidas de versiones anteriores a la v11 (ver Página Compatibilidad). 4D incluye una funcionalidad que le permite suspender y reanudar las transacciones dentro de su código 4D. Cuando se suspende una transacción, puede ejecutar operaciones de forma independiente de la transacción misma y luego reanudar la transacción para validarla o cancelarla como de costumbre. Cuando se suspende la transacción, puede en particular:
Para obtener más información sobre este punto, consulte Suspender las transacciones. En este ejemplo, la base es una sistema de facturación simple. Las líneas de las facturas son almacenadas en una tabla llamada [Linea_Factura], la cual está relacionada con la tabla [Facturas] por una relación entre los campos [Facturas]NoFacturas y [Linea_Factura]NoFacturas. Cuando se añade una factura, se calcula un número único, utilizando el comando Sequence number. La relación entre [Facturas] y [Linea_Factura] es una relación automática Muchos a Uno. La casilla de selección Autoasignar valor en el subformulario está seleccionada. La relación entre [Linea_Factura] y [Partes] es manual. Cuando un usuario introduce una factura, se ejecutan las siguientes acciones:
Este ejemplo es una situación típica en la cual necesita utilizar una transacción. Debe asegurarse de poder guardar todos estos registros durante la operación o de que poder cancelar la transacción si un registro no puede añadirse o actualizarse. En otras palabras, debe guardar los datos relacionados. Si no utiliza una transacción, no puede garantizar la integridad de datos lógica de su base. Por ejemplo, si un registro de la tabla [Partes] está bloqueado, no podrá actualizar la cantidad almacenada en el campo [Partes]En_Bodega. Este campo se volverá entonces lógicamente incorrecto. La suma de las partes vendidas y restantes en bodega no será igual a la cantidad original introducida en el registro. Puede evitar tal situación utilizando las transacciones. Hay varias maneras de introducir datos utilizando transacciones: 1. Puede administrar las transacciones utilizando los comandos de transacción START TRANSACTION, VALIDATE TRANSACTION, y CANCEL TRANSACTION. Puede escribir, por ejemplo: READ WRITE([Linea_Factura]) 2. Para reducir los bloqueos de registros durante la entrada de datos, puede también seleccionar administrar transacciones a partir del método de formulario y acceder a las tablas en READ WRITE únicamente cuando sea necesario. Usted efectúa la entrada de datos utilizando el formulario de entrada para [Facturas], el cual contiene la tabla relacionada [Facturas]Lineas en un subformulario. El formulario tiene dos botones: bCancel y bOK, ambos son botones sin acciones. El bucle de adición se convierte en: READ WRITE([Linea_Factura]) Note que la tabla [Partes] está en modo de acceso "sólo lectura" durante la entrada de datos. El acceso lectura/escritura estará disponible únicamente si los datos se validan. La transacción se abre en el método de formulario de entrada de la tabla [Facturas]: Case of Si hace clic en el botón bCancel, la entrada y la transacción deben ser canceladas. Este es el método de objeto del botón bCancel: Case of Si hace clic en el botón bOK, la entrada y la transacción deben ser aceptadas. Este es el método de objeto del botón bOK: Case of En este código, llamamos al comando CANCEL sin importar en cual botón el usuario haga clic. El nuevo registro no está validado por una llamada a ACCEPT, pero por el comando SAVE RECORD. Además, note que SAVE RECORD se llama justo antes que el comando VALIDATE TRANSACTION. Por lo tanto, guardar el registro [Facturas] es en realidad parte de la transacción. Llamar el comando ACCEPT también validaría el registro, pero en este caso la transacción será validada antes de que el registro [Facturas] se guarde. En otras palabras, el registro sería guardado fuera de la transacción. Dependiendo de sus necesidades, puede personalizar su base, como se muestra en estos ejemplos. En el último ejemplo, la gestión de bloqueo de registros de la tabla [Partes] puede desarrollarse más.
Ver también
CANCEL TRANSACTION
|
PROPIEDADES
Producto: 4D
HISTORIA
Modificado: 4D v15 R4 ARTICLE USAGE
Manual de lenguaje 4D ( 4D v16) |