4D v16.3Suspender as transações |
||
|
4D v16.3
Suspender as transações
Suspender as transações
Suspender uma transañáo é útil quando se necessita, dentro de uma transação, realizar certas operações que não necessitam ser executadas sob o controle desta transação. Por exemplo, imaginemos o caso de que um cliente faz um pedido, dentro de uma transação e também atualizar seu endereço. Depois, o cliente muda de opinião e a ordem é cancelada. A transação é cancelada, mas você não quee que a mudança de endereço seja revertida. Este é um exemplo típico no qual suspender a transação é útil. Três comandos são utilizados para suspender e reativar as transações:
Este exemplo ilustra a necessidade de suspender uma transação. Em um banco de dados de faturas, queremos obter um novo número da fatura durante uma transação. Este número é calculado e armazenado em uma tabela [Settings]. Em um ambiente multi-usuário, os acessos concorrentes devem estar protegidos; entretanto, devido a transação, a tabela [Settings] poderia ser bloqueada por outro usuário apesar de que estes dados sejam independentes da transação principal. Neste caso, pode suspender a transação quando a tabela for acessada. //Método padrão que cria uma fatura O método GetInvoiceNum suspende a transação antes de execut-a-la. Note que este código funcionará mesmo se o método for chamado por fora de uma transação: //Método proyecto GetInvoiceNum Quando uma transação for suspensa, os seguintes princípios abaixo são aplicados:
Estas implementações são resumidas no seguinte gráfico: Os valores editados durante a transação A (registro ID1 toma o valor Val11) não estão disponíveis em uma nova transação (B) criada durante o período "suspenso". Os valores editados durante o período de suspensão (registro ID2 toma o valor Val22 e registro ID3 toma o valor Val33), são conservados depois de que se cancela a transação A. As funcionalidades específicas foram adicionadas para manejar os erros:
O comando existente In transaction devolve True quando for iniciada uma transação, mesmo se estiver suspensa. Para saber se a transação atual foi suspensa, é necessário utilizar o novo comando Transação ativa, que devolve False neste caso. Ambos comandos, entretanto, também devolvem False se não tiver iniciado nenhuma transação. Depois pode ser necessário usar o comando Transaction level, que devolve 0 neste contexto (nenhuma operação iniciada). O gráfico abaixo ilustra os diversos contextos de transação e os valores correspondentes devolvidos peos comandos de transação:
Ver também
|
PROPRIEDADES
Produto: 4D
HISTÓRIA
Criado por: 4D v15 R4 ARTICLE USAGE
Manual de linguagem 4D ( 4D v16) |