No vídeo de hoje, vamos demonstrar em como usar Try … Catch dentro de um controle de transações.
A dúvida de hoje, nos perguntaram, se seria possível usar Try e Catch dentro de um Begin Transaction e End Transaction.
Pensando nisso, montamos um exemplo, onde vamos mostrar em como criar essa tratativa com um ExecAuto da MATA010 (Cadastro de Produtos e SB1).
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "tlpp-core.th"
//Declaração da namespace
Namespace custom.terminal.youtube
/*/{Protheus.doc} User Function video0190
Aciona tratativa e erro nos códigos usando Transaction
@type Function
@author Atilio
@since 12/03/2024
@see https://tdn.totvs.com/display/tec/Try...Catch
@example custom.terminal.youtube.u_video0190()
/*/
User Function video0190()
Local aArea := FWGetArea() As Array
Local aData := {} As Array
Private oError := Nil As Object
Private lMsErroAuto := .F. As Logical
//Inicia o controle de transações
Begin Transaction
//Tenta executar os comandos
TRY
//Adiciona os campos
aAdd(aData, {"B1_COD", "E0003", Nil})
aAdd(aData, {"B1_DESC", "Caneta Preta", Nil})
aAdd(aData, {"B1_TIPO", "PA", Nil})
aAdd(aData, {"B1_UM", "UN", Nil})
aAdd(aData, {"B1_LOCPAD", "01", Nil})
aAdd(aData, {"B1_GRUPO", "G002", Nil})
//Chama a inclusão
MsExecAuto({|x, y| MATA010(x, y)}, aData, 3)
//Se houve erro, mostra a mensagem e aborta o try
If lMsErroAuto
MostraErro()
forceError()
EndIf
//Mostra mensagem
FWAlertSuccess("Sucesso na execução do Try com Transaction", "Teste Try ... Catch")
//Caso houve falha, captura e exibe
CATCH oError
FWAlertError("Erro gerado: " + oError:Description , "Teste Try ... Catch")
ENDTRY
End Transaction
FWRestArea(aArea)
Return
Static Function forceError()
DisarmTransaction()
oError := ErrorClass():New()
oError:genCode := 19584
oError:description := "Erro forçado dentro da função forceError()"
THROW oError
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Boa tarde meu amigo
Só tenho uma coisa a dizer, código top top top
Obrigado meu amigo!
Att,
Cornélio José Wiedemann ( TI & DBA )
Bom dia Cornélio, tudo joia?
Opa, eu que agradeço pelo comentário e pela gentileza no feedback.
Tenha uma ótima e abençoada quarta feira.
Um forte abraço.