PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 24 → Exemplo de Commit e Rollback usando 2 procedures
Exemplo de Commit e Rollback usando 2 procedures
Iniciado por BOLLER, mar., 28 2020 2:36 PM - 2 respostas
Membro registado
3.141 mensagems
Popularité : +89 (91 votes)
Publicado em março, 28 2020 - 2:36 PM
Procedure inicial

// Summary:
// Syntax:
// Evento_Gravar ()
//
// Parameters:
// None
// Return value:
// None
//
// For instance:
// Indicate an example.
//
PROCEDURE Evento_Gravar()

HTransactionStart(MyHfsql01,"T032_Usuarios,T034_UsuarioXDiretiva")

ScreenToFile()

ok is boolean

erro is int

IF gs_Acao = "Incluir" THEN
//T032_Usuarios.T032_Usuarios_ID = GET_SEQ(T032_Usuarios) // numerador automatico feito via sequence no banco oracle/postgresql se usar hfsql pode remover essa linha
ok = HAdd(T032_Usuarios)
IF ok = False THEN
erro++
END
ELSE IF gs_Acao = "Alterar"
ok = HModify(T032_Usuarios)
IF ok = False THEN
erro++
END
END

IF ok = True THEN
erro += SecWin_CadastraUsuarioXDiretiva(T032_Usuarios.T032_Usuarios_ID, T032_Usuarios.T032_Login)
END

IF erro = 0 THEN
HTransactionEnd(MyHfsql01) //commit
ELSE
HTransactionCancel(MyHfsql01) //rollback
END

TableDisplay(TABLE_T032_Usuarios,taInit)

{gs_NameWindow,indWindow}..Plane = 1

gs_Acao = ""

gn_Id = 0



// Summary:
// Syntax:
//[ = ] SecWin_CadastraUsuarioXDiretiva (, )
//
// Parameters:
// gUsuarioID:
// gLogin:

PROCEDURE SecWin_CadastraUsuarioXDiretiva(gUsuarioID, gLogin)

erro is 8-byte int = 0

FOR EACH T034_UsuarioXDiretiva
IF T034_UsuarioXDiretiva.T032_Usuarios_ID = gUsuarioID THEN
IF HDelete(T034_UsuarioXDiretiva) = False
erro++
END
END
END


FOR EACH T033_Diretivas

T034_UsuarioXDiretiva.T032_Usuarios_ID = gUsuarioID
T034_UsuarioXDiretiva.T034_Login = gLogin
T034_UsuarioXDiretiva.T033_Diretivas_ID = T033_Diretivas.T033_Diretivas_ID
T034_UsuarioXDiretiva.T034_Janela = T033_Diretivas.T033_NomeJanela
T034_UsuarioXDiretiva.T034_Status = 1
IF HAdd(T034_UsuarioXDiretiva) = True
erro++
END

END

RESULT erro


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.141 mensagems
Popularité : +89 (91 votes)
Publicado em março, 28 2020 - 2:39 PM
IF erro = 0 THEN
HTransactionEnd(MyHfsql01) //commit
Info("Gravou com sucesso!")
ELSE
HTransactionCancel(MyHfsql01) //rollback
Info("Procedimento cancelado")
END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.141 mensagems
Popularité : +89 (91 votes)
Publicado em março, 28 2020 - 2:50 PM
É possivel tambem ter variaveis auxiliares para contabilizar erros e tempo de execução

datahoraInicial is datetime = datesys() + timesys()

transactionsstart(...........)

erro += proc01( )
erro += proc02( )

datahorafinal is datetime = datesys() + timesys()

//ip do terminal ou login reservar

If errorinfo() <> 0
erro++
end


IF erro = 0 THEN
HTransactionEnd(MyHfsql01) //commit
Info("Gravou com sucesso!")
ELSE
HTransactionCancel(MyHfsql01) //rollback
Info("Procedimento cancelado")
END

log(Login, datahoraInicial , datahorafinal, erro )


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/