Transações e rollback no Protheus
Delimita a unidade de gravação e o fluxo de cancelamento.
Visão geral
A orientação oficial usa BEGIN TRANSACTION e END TRANSACTION e proíbe BeginTran/EndTran no ERP. DisarmTransaction desfaz desde o primeiro nível aberto e coloca o fluxo em TTSBREAK; deve ser seguido de Break ou término da thread conforme o contrato documentado. Não abra nova transação antes de sair de todos os níveis pendentes. O exemplo é laboratório sem gravações, que recusa transação já aberta ou TTSBREAK; demonstra fluxo, não prova rollback de dados. FWInTTSBreak exige LIB compatível, documentada para versões posteriores a 08022017. (Fontes: refs. 1–1.)
Exemplo comentado
#Include "Protheus.ch"
User Function Ed693()
// Laboratorio isolado: nao interferir na transacao do chamador.
If InTransact() .Or. FWInTTSBreak()
Return Nil
EndIf
Begin Transaction
// Sem gravacoes: demonstrar apenas a saida documentada.
DisarmTransaction()
Break
End Transaction
ConOut("Fluxo encerrado")
Return NilSe o laboratório estiver fora de transação e TTSBREAK, percorre uma transação vazia cancelada. Não há dados para desfazer. Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.
- Abrir transações próximas das gravações. Não esperar input nem fazer chamada de rede mantendo locks. Rollback não desfaz e-mail ou API externa; planejar esses efeitos separadamente.
- Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.

Comentários
Ainda não há comentários aprovados.
Entre com Google ou Microsoft para comentar.