Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

  • Membros Pro
Postado (editado)

Boa tarde pessoal,  a pedido do Daniel, vou postar aqui minhas considerações sobre como aproveitar a ACBrLib.Nfe para tratar corretamente o TimeOut e aí lidar corretamente com Contingência:

Como foi pensado no projeto da ACBrLib.NFe em C# para que eu possa reescrever o CheckResult dentro da minha aplicação?

Eu tentei fazer uma herança de ACBrNFe e reescrever o  método CheckResult (imagem), porém o método está protected e a classe que fizeram está sealed, ou seja, não dá para criar herança, o que limita, o que ao meu ver não deve ser feito desta forma.

Aquilo que eu queria de melhorar a detecção do Timeout  está descrito neste vídeo do ACBR, o problema que ele demonstra alterando o próprio código C# do ACBR e no desenvolvimento aqui nós não podemos alterar o código de vocês, o mais racional é criarmos uma herança de ACBrNFe e reescrever o método CheckREsult para tratar o Time Out.    Veja o vídeo por favor.

https://acbr.nutror.com/curso/27abfa7e547e651dbef313cc8bd11dbfc0bbd203/aula/4482733

Isso limita bastante o uso da ACBRLib.NFe em C# pois eu não posso usar herança.   OU foi pensado outra alternativa pra resolver isso?


Solução proposta:  Retirar o Sealead da Classe ACBrNFe para que os usuários da classe possam reescrever o CheckResult e implementar o controle de TImeOut conforme sugerido no video tutorial do ACBR.
 

Qualquer coisa estou à disposição aprofundar no tema.

Att.
Leandro S.
 

Captura de tela 2024-11-14 144625.png

Captura de tela 2024-11-14 152446.png

Editado por OFF-DEV
  • Curtir 1
  • Consultores
Postado

Boa tarde!

Foi criada a #TK-6235 para análise do caso e parecer por parte da equipe de consultores.

Qualquer novidade será divulgada neste tópico.

  • Curtir 2
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

 

Olá Antonio,

 

Não resolveria porque o Exception não me garante que ele foi disparado devido a um timeout, ele é genérico.  No vídeo tutorial que eu postei do ACBR ele explica como escrever o código (vide novo anexo de imagem ) e passá-lo via personalização de um Exception.     

Como eu não posso alterar o código do ACBR (senão vou ter que alterar toda a vez que tiver atualização de versão),  eu prefiro fazer o mesmo na minha aplicação e obrigatoriamente preciso da herança, porém o Sealed na classe não deixa.  


Observação 1: eu poderia considerar todo Exception como TimeOut, porém existem ali alguns códigos de retorno que não são Timeouts e isso provocaria um tratamento incorreto dos erros pela minha aplicação, o que poderia influenciar até como o loop de tratamento da contingência funciona no SEFAZ.

abs.

Captura de tela 2024-11-14 154418.png

  • Consultores
Postado
Agora, OFF-DEV disse:

 

Olá Antonio,

 

Não resolveria porque o Exception não me garante que ele foi disparado devido a um timeout, ele é genérico.  No vídeo tutorial que eu postei do ACBR ele explica como escrever o código (vide novo anexo de imagem ) e passá-lo via personalização de um Exception.     

Como eu não posso alterar o código do ACBR (senão vou ter que alterar toda a vez que tiver atualização de versão),  eu prefiro fazer o mesmo na minha aplicação e obrigatoriamente preciso da herança, porém o Sealed na classe não deixa.  


Observação 1: eu poderia considerar todo Exception como TimeOut, porém existem ali alguns códigos de retorno que não são Timeouts e isso provocaria um tratamento incorreto dos erros pela minha aplicação, o que poderia influenciar até como o loop de tratamento da contingência funciona no SEFAZ.

abs.

Captura de tela 2024-11-14 154418.png

Faça um teste, mesmo ele não sendo um timeout, veja se desta forma, você consegue tratar todos os retornos, sem precisarmos mexer nas classes do C#

  • Membros Pro
Postado

Antonio,

 

Não vai funcionar nem no teste, você percebeu que o StatusServico  usa também o CheckResult?   Vai ter o comportamento que eu descrevi.

  • Consultores
Postado
5 minutos atrás, OFF-DEV disse:

Antonio,

 

Não vai funcionar nem no teste, você percebeu que o StatusServico  usa também o CheckResult?   Vai ter o comportamento que eu descrevi.

Então vamos aguardar analise da #TK-6235, logo teremos um retorno, combinado ?

  • Membros Pro
Postado

Sugestão 2:

 

Trago uma segunda sugestão de implementação qué simplesmente implementar no LIB C# o TimeOutException para o usuário da lib possa saber quando ocorreu e dar inicio ao processo do loop de contingência.

 

Abs.

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.