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())
endtry

Equivalente AdvPL classico

Local lOk := .T.

Begin Transaction
    Begin Sequence
        GravarCliente()
        GravarTitulo()
        GravarLog()
    Recover
        DisarmTransaction()
        lOk := .F.
    End Sequence
End Transaction

O 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

Exemplos

Try/commit/rollback

oTx := FWTransaction():new()
try
    oTx:begin()
    Gravar()
    oTx:commit()
catch oErr
    oTx:rollback()
endtry

Veja também