WebService Tray Commerce - Retorno com multiplos parametros

Delphi

21/06/2015

Olá pessoal,

Alguem já criou alguma solução com SOAP/WSDL para consumir o WebService Tray Commerce da Locaweb?
Estou com a missão implementar isso em um aplicativo ERP com o Delphi 7, mas estou com dificuldades iniciais relacionadas
ao retorno de dados em alguns métodos.
Na maioria dos métodos, o retorno vem com múltiplos parâmetros, não há classes no cabeçalho para atender a todos os métodos, e com isso não disponho de algumas propriedades para obter alguns dados.

resumindo...
- comecei um novo projeto
- adicionei um componente HttpRio
- baixei o WSDLImport no site da embarcadero, executei-o pelo prompt de comando, adicionando a url
Ex: WSDLImport -p http://www.toyshopbrasil.com.br/webservice/v2/ws_servidor.php?wsdl
- gerei o codigo de cliente automático e adicionei-o ao projeto...

iniciei alguma codificação para cadastrar uma categoria no site, como a seguir:

procedure TForm1.Button1Click(Sender: TObject);
var

                          pLogin, pSenha: WideString;   
                       pId_categoria: Int64;
                    pId_categoriapai: Int64;
                          pDescricao: WideString;
                              pAtivo: WideString;

                             Servico: TrayWebServicewsdlPortType;

Begin

         pID_Loja:= xxxxx;
           pLogin:= '???';
           pSenha:= '???';
    pId_categoria:= 0;
 pId_categoriapai:= 0;
       pDescricao:= 'TESTE';
           pAtivo:= 'S';

  Servico:= GetTrayWebServicewsdlPortType(False, '', nil);
  Memo1.text:= Servico.fWSCadastraCategoria( pID_Loja,
                                               pLogin,
                                               pSenha,
                                        pId_categoria,
                                     pId_categoriapai,
                                           pDescricao,
                                               pAtivo
                                           );

End;


A gravação das informações está sendo realizada normalmente no banco de dados do site.
Coloquei o Memo1.text apenas para poder receber alguma coisa sem que o aplicativo apresente erro.
Resultado, ao receber a resposta do Servidor, só consigo obter o primeiro parâmetro, que poderia ser "Ok/no", já o segundo parâmetro de resposta que seria o codigo "503" (codigo da nova Categoria cadastrada), não estou conseguindo capturar...

coloquei mais 2 TMemos para monitorar a pergunta/resposta do xml e o resultado foi esse:
procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: String;
  var SOAPRequest: WideString);
begin
   MemoRequest.Text:= SOAPRequest;
end;


procedure TForm1.HTTPRIO1AfterExecute(const MethodName: String;
  SOAPResponse: TStream);
var
  StrStream: TStringStream;
begin
  StrStream := TStringStream.Create('');
  try
    StrStream.CopyFrom(SOAPResponse, 0);
      SOAPResponse.Position:= 0;
    MemoResponse.Lines.Text:= StrStream.DataString;
  finally
    StrStream.Free;
  end;

end;

[img:descricao=Testando a aplicação]http://arquivo.devmedia.com.br/forum/imagem/342753-20150621-160021.jpg[/img]


info adicionais:
wsdl
operacoes

Será que o jeito é usar o XMLDocument para as situações onde não existe classe de resposta?
alguém poderia me ajudar, por favor?
Paulo Lima

Paulo Lima

Curtidas 0
POSTAR