Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 4064 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado
Boa tarde!
 
Ao enviar uma RPS para a prefeitura de Cachoeirinha/RS que tem como provedor Thema, recebi uma falha com a mensagem "Erro! Nao foi possivel converter os dados do XML enviado.". 
 
Depois de bater a cabeça tentando entender o que tinha dado errado, percebi que o motivo que estava levando ao problema era que o campo da Razão Social do Tomador tinha o caracter "&". Quando retirei para fazer um teste, a RPS foi processada com sucesso. 
 
Então sugiro aplicar um tratamento um pouquinho mais elaborado na montagem do Envelope SOAP dos métodos Web-Services. Exemplo:
 
No método TProvedorThema.GeraEnvelopeRecepcionarLoteRPS temos:
 
 result := '<?xml version="1.0" encoding="UTF-8"?>' +
           '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" ' +
                       'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
                       'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
            '<S:Body>' +
             '<' + FMetodoRecepcionar + ' xmlns="' + URLNS + '">' +
              '<xml>' +
                '&lt;?xml version="1.0" encoding="UTF-8"?&gt;' +
                StringReplace(StringReplace(DadosMsg, '<', '&lt;', [rfReplaceAll]), '>', '&gt;', [rfReplaceAll]) +
              '</xml>' +
             '</' + FMetodoRecepcionar + '>' +
            '</S:Body>' +
           '</S:Envelope>';
 
Sugiro utilizar a função ACBrUtil.ParseText no lugar dos StringReplace, ficando assim:
 
 result := '<?xml version="1.0" encoding="UTF-8"?>' +
           '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" ' +
                       'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
                       'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
            '<S:Body>' +
             '<' + FMetodoRecepcionar + ' xmlns="' + URLNS + '">' +
              '<xml>' +
                '&lt;?xml version="1.0" encoding="UTF-8"?&gt;' +
                ParseText(DadosMsg, False) + 
              '</xml>' +
             '</' + FMetodoRecepcionar + '>' +
            '</S:Body>' +
           '</S:Envelope>';
 
Com isso não haverá mais o problema dos "&" nos XML.
 
Acredito que isso poderia se extender para todos os provedores, o que acham?
 
 
Postado

Bom dia Leonardo,

 

Sim é verdade, pensei nisso também. Porém vi que já é feito um tratamento através do método ParseText no recebimento do dados do Web Services e que na montagem do envelope soap a substituição dos caracteres "<" e ">" são feitos diretamente com o StringReplace naquele ponto. Minha ideia foi sugerir uma melhoria que manteria a abordagem do recebimento que já utiliza ParseText.

 

[]´s

 

____________________________

Cristiam Azambuja

  • Este tópico foi criado há 4064 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.