ZeusAutomacao / DFe.NET

Biblioteca para Geração de NFe(2.0, 3.10 e 4.0) e NFCe(3.10 e 4.0) e consumo dos serviços necessários à sua manutenção, conforme descritos em http://www.nfe.fazenda.gov.br/portal/principal.aspx
GNU Lesser General Public License v2.1
746 stars 473 forks source link

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

Open silvairsoares opened 4 months ago

silvairsoares commented 4 months ago

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 commented 4 months ago

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.

danilobreda commented 4 months ago

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