DFe.NET icon indicating copy to clipboard operation
DFe.NET copied to clipboard

Criação do atributo personalizado "[TString]" o qual deve ser utiliza…

Open silvairsoares opened this issue 10 months ago • 2 comments

Criação do atributo personalizado "[TString]" o qual pode ser utilizado para decorar todas as proriedades referentes às tags do xml do tipo "TString". Com o objetivo de corrigir automaticamente os dados destas propriedades, evitando a falha de schema:

O elemento '<nome_elemento>' é inválido - O valor 'exemplo de valor inválido' é inválido de acordo com o seu tipo de dados 'String'

Já inclui a anotação em alguns atributos, mas será necessário incluir nos demais. São centenas.

silvairsoares avatar Apr 18 '24 14:04 silvairsoares

Fiz algumas alterações nos dados da NFe gerados no arquivo "NFe.AppTeste.NetCore/Program.cs" somente para teste da funcionalidade.

Na solução em que uso este atributo corretor, inclui a chamada para o método "ExecutarCorrecaoDeDados" no construtor da classe "InfNFe". Pois aqui, tenho apenas um construtor, que solicita que todos os dados sejam enviados. Então, tenho algo como:

public partial class InfNFe : ClasseNFe
{
    public InfNFe(ide ide, emit emit, avulsa avulsa, dest dest, TLocal retirada, TLocal entrega,
                List<autXML> autXML, List<det> det, total total, transp transp, cobr cobr, pag pag,
                infIntermed infIntermed, infAdic infAdic, exporta exporta, compra compra, cana cana,
                infRespTec infRespTec, string versao, string id)
    {
        this.ide = ide;
        this.emit = emit;
        this.avulsa = avulsa;
        this.dest = dest;
        this.retirada = retirada;
        this.entrega = entrega;
        this.autXML = autXML;
        this.det = det;
        this.total = total;
        this.transp = transp;
        this.cobr = cobr;
        this.pag = pag;
        this.infIntermed = infIntermed;
        this.infAdic = infAdic;
        this.exporta = exporta;
        this.compra = compra;
        this.cana = cana;
        this.infRespTec = infRespTec;
        this.versao = versao;
        Id = id;

        ExecutarCorrecaoDeDados(this);
    }

Assim tenho a garantia que todos os dados de todas as instâncias da classe "InfNFe" sempre estarão normalizados.

Mas aqui não foi possível pois existe apenas o construtor padrão:

public infNFe()
{
    det = new List<det>();
}

Não encontrei um local centralizado, que garantisse a execução do método "ExecutarCorrecaoDeDados(this);". Portanto, ficaria a cargo do desenvolvedor encontrar o melhor local para invocação deste método.

Esse recurso me ajudou demais aqui, evitando centenas de verificações dentro do ERP.

Seguindo esta mesma idéia, outros atributos semelhantes ao [TString] poderão ser criados no futuro.

silvairsoares avatar Apr 18 '24 14:04 silvairsoares

Olá tudo certo? Referenciamos seu Pull Request para o fork https://github.com/Hercules-NET/ZeusFiscal/pull/6 Caso tenha dúvidas veja o anúncio: https://github.com/Hercules-NET/ZeusFiscal/issues/1

danilobreda avatar Apr 20 '24 02:04 danilobreda

Olá, tudo bem?

Obrigado por sua contribuição! Após uma análise, acredito que o tratamento mencionado não deve ser responsabilidade da biblioteca. Utilizando o seu exemplo, se o campo for do tipo string, cabe ao desenvolvedor que utiliza a biblioteca decidir como manipulá-lo da forma mais adequada para atender às necessidades específicas do seu software levando em considerações as validações.

Por esse motivo, estarei fechando este PR. No entanto, estamos sempre abertos a novas ideias e sugestões, então sinta-se à vontade para compartilhar outras sugestões conosco. Agradeço novamente e parabenizo por sua iniciativa! 🥇

AgnaldoSilva0 avatar Sep 20 '24 15:09 AgnaldoSilva0