ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Tratar Response corretamente

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
ric_rio2
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 1 de Outubro de 2018
Mensagens: 108

MensagemEnviada: Ter Out 01, 2019 1:58 pm    Assunto: Tratar Response corretamente Responder com Citação

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
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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Out 01, 2019 2:41 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
ric_rio2
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 1 de Outubro de 2018
Mensagens: 108

MensagemEnviada: Ter Out 01, 2019 3:22 pm    Assunto: Responder com Citação

obrigado imex por responder Smile
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. Smile
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.. Smile
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Qua Out 02, 2019 7:37 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
ric_rio2
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 1 de Outubro de 2018
Mensagens: 108

MensagemEnviada: Qua Out 02, 2019 8:04 am    Assunto: Responder com Citação

Bom dia johnny-walker.. Tudo certinho?? Smile
Cara.. o que seria sniffer????
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Qui Out 03, 2019 8:25 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
ric_rio2
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 1 de Outubro de 2018
Mensagens: 108

MensagemEnviada: Qui Out 03, 2019 8:56 am    Assunto: Responder com Citação

Bom dia johnny-walker
Obrigado pela dica..
Vou dar uma olhada e tentar entender o que tu falou Smile
Brigaduu..Smile
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB