Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
ric_rio2 Aprendiz


Registrado: Segunda-Feira, 1 de Outubro de 2018 Mensagens: 108
|
Enviada: Ter Out 01, 2019 1:58 pm Assunto: Tratar Response corretamente |
|
|
Boa tarde..
Estou fazendo uma integração SOAP via HTTPRIO.
Tenho o WSDL do servidor que estou querendo me conectar.
Importo tudo corretamente.
Envio tudo corretamente.
Contudo existe uma situação que estou sem conhecimento para resolver.
Tenho a sequinte estrutura // Passo como um exemplo simplificado
Código: | Var
Pedido_Request : Trequest;
Pedido_Response : TResponse;
nr_Retornado : String;
Erro_retornado : String;
begin
Pedido_Request:= Trequest.Create;
Pedido_Request.numero := '1';
Pedido_Request.data:= '20191001';
Pedido_Response:=(HTTPRIO1 as PortType).Post_Pedido(Pedido_Request);
If Pedido_Response.nr_Retornado <> '000' then
begin
nr_Retornado:= Pedido_Response.nr_Retornado
end
Else
begin
Erro_retornado:= Pedido_Response.Erro_retornado;
end ;
end; |
Existem o Post_Pedido e outros POSTs.
Post_Nota, Post_Item etc...
No Post_Pedido retorna corretamente a estrutura.
Quando esta correto..:
Código: | <nr_retornado>ZM</nr_retornado>
<erro_retornado>000</erro_retornado> |
Quando esta Errado..:
Código: | <nr_retornado>000</nr_retornado>
<erro_retornado>ERRO POR CAUSA DE ALGO</erro_retornado> |
Contudo em outros posts so me retorna a TAG erro_retornado, SEM A TAG (ou propriedade do objeto) nr_retornado..:
Código: | <erro_retornado>ERRO POR CAUSA DE ALGO</erro_retornado> |
Ou seja Quando eu FAÇO a primeira critica como demosntrado anteriormente LINHA 2..:
Código: | 1Pedido_Response:=(HTTPRIO1 as PortType).Post_Pedido(Pedido_Request);
2 If Pedido_Response.nr_Retornado <> '000' then
3 begin
4 nr_Retornado:= Pedido_Response.nr_Retornado
5 end
6 Else
7 begin
8 Erro_retornado:= Pedido_Response.Erro_retornado;
9 end ; |
Ocorre um erro pois a propriedade do objeto NÃO existe Pedido_Response.nr_Retornado.
Como devo proceder para não ocorrer um erro ao passar pelo If Pedido_Response.nr_Retornado <> '000' then já
que a TAG (propriedade) não se encontra no RETORNO? ( sempre achei que isso nunca seria possivel, pois se estou
com um objeto de resposta, ele TEORICAMENTE sempre teria que vir com TODAS as TAG).
Espero ter conseguido explicar minha duvida.. Caso esteja confusa, por gentileza me avisem.
Abraços. |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Out 01, 2019 2:41 pm Assunto: |
|
|
Boa tarde,
Pelo que vi nos seus exemplos a erro_retornado sempre é retornada, então pode ser que você consiga obter o resultado desejado trocando o If abaixo:
Código: | If Pedido_Response.nr_Retornado <> '000' then |
por
Código: | If Pedido_Response.Erro_retornado = '000' then |
Acho que uma outra alternativa seria colocar o trecho dentro de um bloco Try / Except / End.
Espero que ajude
_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!pres_dutra-residencial-apartamento |
|
Voltar ao Topo |
|
 |
ric_rio2 Aprendiz


Registrado: Segunda-Feira, 1 de Outubro de 2018 Mensagens: 108
|
Enviada: Ter Out 01, 2019 3:22 pm Assunto: |
|
|
obrigado imex por responder
Cara.. como falei.. o Post_Pedido RETORNA TUDO BUTININHO..
Os outros POSTs que não retornam..
Tipo se todos retornassem o erro_retornado com certeza eu faria o que tu sugeriu..
Criticaria ele primeiro..
Só que o inverso também acontece com outros posts..
Simplismente quando vem o CORRETO o erro não vem ..
Tem outros que o ERRO vem sem a tag nr_retornado.
Colocar dentro do TRY é o que estou fazendo.. mas esta me incomodando profundamente..
Estou quase tirando a cidadania PORTUGUESA.
Eu acho que tem que haver um modo de saber se existe a tag ou não..
Já tentei o IsPublishedProp(Pedido_Response,'erro_retornado') ou similares...
Sem sucesso..
Será que daria para LISTAR todas as propriedades do objeto retornado ?
Se Sim como?
Abraços..  |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qua Out 02, 2019 7:37 am Assunto: |
|
|
Já pensou em utilizar umn sniffer para saber o que está acontecendo, assim talvez você consiga resolver o problema.
Tente o fiddler.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
ric_rio2 Aprendiz


Registrado: Segunda-Feira, 1 de Outubro de 2018 Mensagens: 108
|
Enviada: Qua Out 02, 2019 8:04 am Assunto: |
|
|
Bom dia johnny-walker.. Tudo certinho??
Cara.. o que seria sniffer???? |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qui Out 03, 2019 8:25 am Assunto: |
|
|
Um sniffer é um software que pega o tráfego da rede, muitos erros eles não aparecem como exceção, o que acaba gerando perda de tempo se você não souber o que está acontecendo por detrás do framework.
Eu utilizo muito para indy, assim analiso o tráfego e faço as correções.
Utilize o fiddles2 para isto.
Infelizmente para baixar agora tem de deixar o email, eis o site:
https://www.telerik.com/download/fiddler
Neste você baixa direto:
https://fiddler.br.uptodown.com/windows/download
Eu aconselho a olhar no youtube como operar o software.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
ric_rio2 Aprendiz


Registrado: Segunda-Feira, 1 de Outubro de 2018 Mensagens: 108
|
Enviada: Qui Out 03, 2019 8:56 am Assunto: |
|
|
Bom dia johnny-walker
Obrigado pela dica..
Vou dar uma olhada e tentar entender o que tu falou
Brigaduu.. |
|
Voltar ao Topo |
|
 |
|