FWTransaction
Wrapper TLPP de transacao SQL com OO. Substitui Begin Transaction/End Transaction com syntax mais limpa e try/catch nativo.
Assinatura: FWTransaction():new() -> oTx + begin/commit/rollback
Retorna: object
FWTransaction e o wrapper OO de transacao em TLPP. Mais limpo que Begin Transaction + DisarmTransaction + End Transaction, especialmente combinado com try/catch.
Sintaxe
local oTx as object
oTx := FWTransaction():new()
try
oTx:begin()
GravarCliente()
GravarTitulo()
GravarLog()
oTx:commit()
catch tExceptionError oErr
oTx:rollback()
FwLogger():getLogger():error('Falha: ' + oErr:getDescription())
endtryEquivalente AdvPL classico
Local lOk := .T.
Begin Transaction
Begin Sequence
GravarCliente()
GravarTitulo()
GravarLog()
Recover
DisarmTransaction()
lOk := .F.
End Sequence
End TransactionO TLPP encurta o boilerplate.
Savepoints
oTx:begin()
Gravar1()
oTx:savepoint('apos_gravar1')
try
Gravar2() // operacao que pode falhar
catch oErr
oTx:rollbackTo('apos_gravar1') // volta so ate o savepoint, nao tudo
endtry
Gravar3()
oTx:commit()Pegadinhas
- Nested transactions: nem todo banco suporta — depende do DBAccess
- Performance: savepoints custam — use so quando precisa
- Timeout: transacao aberta por muito tempo trava outros usuarios
Exemplos
Try/commit/rollback
oTx := FWTransaction():new()
try
oTx:begin()
Gravar()
oTx:commit()
catch oErr
oTx:rollback()
endtry