Senhores estou com seguinte bug apontado no codeanalytics:
Uso de Return dentro do BeginTransaction
Abaixo segue o Trecho do código que esta retornando o bug:
If !Empty(cIntegrado)
BEGIN TRANSACTION
If !Empty(p_cNotaIni)
IncProc("Importando NF de transferencia de Medicamentos na Matriz "+_cDoc+"/"+_cSerie)
EndIf
_lOk := U_UNP015(_cDoc,_cSerie,_cChave,_dEmissao)
If !_lOk
DisarmTransaction()
Return
EndIf
If !Empty(p_cNotaIni)
IncProc("Gerando Pedido de Venda do Integrado...")
EndIf
cNumPedido := U_LHC16(_cDoc,_cSerie)
If Empty(cNumPedido)
DisarmTransaction()
Alert(OemToAnsi("LHC16 - Erro na Inclusão do Pedido referente a NF de transferência " + _cSerie + "/" + _cDoc))
Return
EndIf
END TRANSACTION
Como posso fazer para matar esse problema? Alguem com algo parecido?
Olá Luis,
A utilização de mensagens e retornos dentro de transação não é considerada uma boa prática, já tivemos situações do return ser antes do End Transaction e gerar problemas, assim como já tivemos mensagens que seguraram a transação levando a um dead lock generalizado na rotina.
Essas experiências nos ensinaram bastante a evitar esse tipo de código.
Um exemplo do seu código, seria o seguinte:
Local cMsgError as character
If !Empty(cIntegrado)
BEGIN TRANSACTION
If !Empty(p_cNotaIni)
IncProc("Importando NF de transferencia de Medicamentos na Matriz "+_cDoc+"/"+_cSerie)
EndIf
_lOk := U_UNP015(_cDoc,_cSerie,_cChave,_dEmissao)
If _lOk
If !Empty(p_cNotaIni)
IncProc("Gerando Pedido de Venda do Integrado...")
EndIf
cNumPedido := U_LHC16(_cDoc,_cSerie)
If Empty(cNumPedido)
DisarmTransaction()
cMsgError := OemToAnsi("LHC16 - Erro na Inclusão do Pedido referente a NF de transferência " + _cSerie + "/" + _cDoc)
EndIf
Else
DisarmTransaction()
EndIf
END TRANSACTION
EndIf
If !Empty(cMsgError)
Alert(cMsgError)
EndIf
Acredito que deseja forma, o código terá o mesmo comportamento, mas respeitando as boas práticas adotadas pelo SonarQube.