4D v16.3Suspender las transacciones |
||
|
4D v16.3
Suspender las transacciones
Suspender las transacciones
Suspender una transacción es útil cuando se necesita, dentro de una transacción, realizar ciertas operaciones que no necesitan ser ejecutadas bajo el control de esta transacción. Por ejemplo, imaginemos el caso de que un cliente hace un pedido, dentro de una transacción y también actualiza su dirección. A continuación, el cliente cambia de opinión y se cancela la orden. La transacción se cancela, pero usted no quiere que el cambio de dirección se revierta. Este es un ejemplo típico en el que suspender la transacción es útil. Tres comandos se utilizan para suspender y reanudar las transacciones:
Este ejemplo ilustra la necesidad de suspender una transacción. En una base de datos de facturas, queremos obtener un nuevo número de la factura durante una transacción. Este número se calcula y se almacena en una tabla [Settings]. En un entorno multiusuario, los accesos concurrentes deben estar protegidos; Sin embargo, por la transacción, la tabla [Settings] podría ser bloqueada por otro usuario a pesar de que estos datos sean independientes de la transacción principal. En este caso, puede suspender la transacción cuando se accede a la tabla. //Método estándar que crea una factura El método GetInvoiceNum suspende la transacción antes de ejecutarla. Note que este código funcionará incluso si el método se llama desde fuera de una transacción: //Método proyecto GetInvoiceNum Cuando se suspende una transacción, se aplican los siguientes principios:
Estas implementaciones se resumen en el siguiente gráfico: Los valores editados durante la transacción A (registro ID1 toma el valor Val11) no están disponibles en una nueva transacción (B) creada durante el período "suspendido". Los valores editados durante el período de suspensión (registro ID2 toma el valor Val22 y registro ID3 toma el valor Val33), se conservan después de que se cancela la transacción A. Las funcionalidades específicas se han añadido para manejar los errores:
El comando existente In transaction devuelve True cuando se ha iniciado una transacción, incluso si está suspendida. Para saber si se suspende la transacción actual, es necesario utilizar el nuevo comando Transacción activa, que devuelve False en este caso. Ambos comandos, sin embargo, también devuelven False si no se ha iniciado ninguna transacción. Después puede ser necesario utilizar el comando Transaction level, que devuelve 0 en este contexto (ninguna operación iniciada). El siguiente gráfico ilustra los diversos contextos de transacción y los valores correspondientes devuelto por los comandos de transacción:
Ver también
|
PROPIEDADES
Producto: 4D
HISTORIA
Creado por: 4D v15 R4 ARTICLE USAGE
Manual de lenguaje 4D ( 4D v16) |