Membros Pro OFF-DEV Postado 14 Novembro Membros Pro Postado 14 Novembro (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. Editado 14 Novembro por OFF-DEV 1
Consultores Diego Foliene Postado 14 Novembro Consultores Postado 14 Novembro 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. 2 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 !!
Consultores antonio.carlos Postado 14 Novembro Consultores Postado 14 Novembro Fazendo desta forma não resolveria ? 3
Membros Pro OFF-DEV Postado 14 Novembro Autor Membros Pro Postado 14 Novembro 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.
Consultores antonio.carlos Postado 14 Novembro Consultores Postado 14 Novembro 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. 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 OFF-DEV Postado 14 Novembro Autor Membros Pro Postado 14 Novembro 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 antonio.carlos Postado 14 Novembro Consultores Postado 14 Novembro 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 OFF-DEV Postado 14 Novembro Autor Membros Pro Postado 14 Novembro Combinado meu amigo, vc acha que pela simplicidade do tipo de solução poderá sair rápido?
Membros Pro OFF-DEV Postado 14 Novembro Autor Membros Pro Postado 14 Novembro 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.
Recommended Posts