Quando precisamos dar um rollback, utilizamos dos comandos begin transaction
, end transaction
para abrir e fechar uma transação, e por fim, da função DisarmTransaction
, essa função é usada quando ocorre um erro e você deseja fazer o rollback.
Para um fluxo de MsExecAuto
ou FWMVCRotAuto
em loop, ficaria mais ou menos da seguinte forma:
#include "protheus.ch"
//-------------------------------------------------------------------
/*/{Protheus.doc} loopMata010
Exemplo de transação
@author Daniel Mendes
@since 05/04/2021
@version 1.0
/*/
//-------------------------------------------------------------------
user function loopMata010()
local nI as numeric
local aProdutos as array //Seria o vetor dos produtos a serem inseridos
local lErro as logical
//Exemplo de variável que vai verificar o erro na inserção
//Poderia ser a lMsErroAuto, ou o retorno dos métodos VldData e CommitData
lErro := .F.
begin transaction
for nI := 1 to len(aProdutos)
//Inserção na SB1
if lErro
disarmTransaction()
exit
endif
next
end transaction
return
Obs.: Hoje o MATA010 está em MVC e dispensa o uso do MsExecAuto, você pode fazer via modelo, o que é muito melhor, recomendo.
Documentações:
https://tdn.totvs.com/pages/releaseview.action?pageId=6087457
https://tdn.totvs.com/pages/viewpage.action?pageId=271843449
https://tdn.totvs.com/pages/releaseview.action?pageId=7372858
https://tdn.totvs.com.br/display/public/PROT/BEGIN+TRANSACTION
https://tdn.totvs.com.br/display/public/PROT/END+TRANSACTION