GARANTIR DESCONTO

Fórum Como consumir web service delphi 7 Enterprise #9659

29/09/2009

0

Bao tarde!   Nunca trabalhei com web services.   Estou tentando consumir um web services usando o componente HTTPRIO, como eu faço para passar um parametro e receber de volta as solicitações?   Pode me ajudar...   No meu disco virtual coloquei a unit com as informações sobre o web service.   Por exemplo gostaria de colocar as informações de retorno, em determidos campos no formulario, como eu faço para isso...   estou tentando dessa forma:   procedure TFrmPAcesso.SpeedButton9Click(Sender: TObject);
var
    Y1, Y2, Y3   : integer;
    B:  STRING;
    x1: MacMensageria;
begin {FcodigoAssessoriaCyber: Integer;
 FcontaCorrente: Integer;
 FcodigoIdentificacaoOperador: string;
 FtipoPessoa: string;
 FcpfCnpj: Integer;}  Y1:=1;
 Y2:=191;
 B:='F';  X1:=(HTTPRIO1 as MacMensageria);
 memoBusca.Text:=(HTTPRIO1 as MacMensageria).consultarInformacoesCobranca(consultarinformacoescobrancarequest2(1,1,' ',B,191));
  //    consularinformacoesCobrancarequest2. parametros... // (HTTPRIO1 as MacMensageria).consultarInformacoesCobranca(Y1,Y1,B,B,Y2);
// memoBusca.Text:=(HTTPRIO1 as MacMensageria).consultarAcordo(1,'',' ',99999999999);
//  memoBusca.Text:=x1.consultarInformacoesCobranca.
 //.consultarInformacoesCobranca('1','1','0','F',191); end;
    Obrigado!   Henrique   11 6725-3401  
Henrique Rocha

Henrique Rocha

Responder

Posts

29/09/2009

Rodrigo Mourão

Olá Henrique,

Você importou o WSDL utilizando o WSDL importer. Se sim pode me enviar o endereco do WSDL para que ue possa improtar o ver como e gerado. Se não me informe para que eu possa mostra-lo como faz. Não há necessidade de usar o HTTPRIO isso fica encapsulado na classe que ele gerar.

No aguardo !!

Abs!!

Responder

Gostei + 0

29/09/2009

Henrique Rocha


Sim importei o WSDL utilizando o WSDL importer via dos, pois pelo delphi não consegui.
o arquivo resultado *.pas esta no meu disco virtual, você tem acesso ao disco,
ou qual email posso mandar para você.


Responder

Gostei + 0

29/09/2009

Rodrigo Mourão

Me mande o link para o disco virtual.

Mais informações aqui: https://www.devmedia.com.br/imagens/videos/4/Video%20disco%20virtual.htm

Abs!

Responder

Gostei + 0

29/09/2009

Henrique Rocha

Boa!


segue o link http://video.devmedia.com.br/discovirtual/18998/Unit%20webservices.zip

Desculpe, ainda estou aprendendo a usar a ferramenta.

Obrigado.
Responder

Gostei + 0

30/09/2009

Rodrigo Mourão

Olá Amigo,

Eu peguei como exemplo o metodo atualiza cliente, como nao sei qual valor passar o codigo abaixo e ficticio. O que vc precisa saber e que os metodos pedem como parametros objetos. Por exemplo o metodo atualiza cliente pede um parametro do tipo atualizarClienteRequest2 e me retorna um atualizarClienteResponse2


Então eu crieu uma variavel AtlzCliente do tipo atualizarClienteRequest2  e uma variavel Resp do tipo atualizarClienteResponse2,

Antes de passar o parametro AtlzCliente  para a funcao eu tenho que colocar os valores. Eu passei so alguns como exemplo, voce tera que passar todos os que são obrigatórios.


Depois chamei a funcao atualizarCliente desta maneira: GetMacMensageria().atualizarCliente(AtlzCliente); veja que eu passo o objeto AtlzCliente que acabei de configurar.

Isso me retorna um atualizarClienteResponse2 que eu coloquei na veriavel resp.

Depois peguei a propriedade Mensagem e coloquei no memo.

Veja o codigo.

var
  AtlzCliente: atualizarClienteRequest2;
  Resp: atualizarClienteResponse2;
begin
  AtlzCliente.codigoAssessoriaCyber := 0;
  AtlzCliente.contaCorrente := '00000';
  AtlzCliente.codigoIdentificacaoOperador := '0000';
  AtlzCliente.tipoPessoa := 'X';
  AtlzCliente.endereco.nomeLogradouro := 'endereco';
  AtlzCliente.endereco.nomeBairro := 'bairro';

  Resp := GetMacMensageria().atualizarCliente(AtlzCliente);

  Memo1.Lines.Add(Resp.mensagemRetorno.mensagem);
end;

Novamente, eu passei valores ficticios, vc tera que colcoar valores reais ai.

Espero ter ajudado.

abs!!

Responder

Gostei + 0

30/09/2009

Henrique Rocha

Boa tarde! 

Rodrigo,

Consegui acessar as variaveis, porém quando tento consumir o web service esta dando uma mensagem de
erro no retorno das informações, como segue:

abaixo procedimento OK...

procedure TFrmPAcesso.SpeedButton9Click(Sender: TObject);
var
 ConsulDadosCobranca: consultarInformacoesCobrancaRequest2;
 RespDC:consultarInformacoesCobrancaResponse2;
begin
{  property codigoAssessoriaCyber:       Integer  Index (IS_UNQL) read FcodigoAssessoriaCyber write FcodigoAssessoriaCyber;
    property contaCorrente:               Integer  Index (IS_UNQL) read FcontaCorrente write FcontaCorrente;
    property codigoIdentificacaoOperador: string   Index (IS_UNQL) read FcodigoIdentificacaoOperador write FcodigoIdentificacaoOperador;
    property tipoPessoa:                  string   Index (IS_UNQL) read FtipoPessoa write FtipoPessoa;
    property cpfCnpj:                     Integer  Index (IS_UNQL) read FcpfCnpj write FcpfCnpj;  }

ConsulDadosCobranca.codigoAssessoriaCyber:=1;
ConsulDadosCobranca.contaCorrente:=1;
ConsulDadosCobranca.codigoIdentificacaoOperador:='  ';
ConsulDadosCobranca.tipoPessoa:='F';
ConsulDadosCobranca.cpfCnpj:=191;
RespDC := GetMacMensageria().consultarInformacoesCobranca(ConsulDadosCobranca);
memoBusca.Lines.Add(RespDC.mensagemRetorno.mensagem);
end;


mensagem de erro quando ele passa pela função abaixo

function GetMacMensageria(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): MacMensageria;
const
{ Original para ser usado em produção

  defWSDL = 'HSBCMacMensageria.wsdl';
  defURL  = 'http://www.hsbc.com.br/MacMensageria';
  defSvc  = 'HSBCMacMensageria';
  defPrt  = 'MacMensageriaSOAP';   }

  // Dados para usar em desenvolvimento

  defWSDL = 'HSBCMacMensageria.wsdl';
  defURL  = 'http://localhost:8088/mockMacMensageriaSOAP';
  defSvc  = 'HSBCMacMensageria';
  defPrt  = 'MacMensageriaSOAP';

var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
    Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as MacMensageria);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;


ERRO:    Debugger Exception Notification

   Project x.exe  raised exception class ESOAPDomConvertError with message
  'Conversion from class TSpeedButton to SOAP is not supported - SOAP classes
   must derive from TRemotable'. Process stopped. Use Step or Rum to continue.


Pode me ajudar?

Obrigado.

Henrique
11 6725-3401

















 




Responder

Gostei + 0

01/10/2009

Rodrigo Mourão

Olá Henrique,

Pela mensagem de errro e como se vc estivesse tentando enviar para o WS um Objeto do Tipo TSpeedButton. O problema é que no código que vc enviou não vejo isso. Muito Estranho.

Verifique se nao tem um speedbutton com um nome que possa estar em conflito com o nome das classes do WS.

Abs!!

Responder

Gostei + 0

01/10/2009

Henrique Rocha

Boa tarde! 

Rodrigo,

Pesquisei na internet e esse erro e achei isso:

https://forums.codegear.com/thread.jspa?threadID=2231

mas não sei como resolver.

Peço sua ajuda.

Obrigado.

Henrique
Responder

Gostei + 0

02/10/2009

Rodrigo Mourão

Bem Henrique,


Tente o seguinte:


procedure TFrmPAcesso.SpeedButton9Click(Sender: TObject);
var
 ConsulDadosCobranca: consultarInformacoesCobrancaRequest2;
 RespDC:consultarInformacoesCobrancaResponse2;
begin
  ConsulDadosCobranca := consultarInformacoesCobrancaRequest2.create;
  RespDC := consultarInformacoesCobrancaResponse2.create;

  ConsulDadosCobranca.codigoAssessoriaCyber:=1;
  ConsulDadosCobranca.contaCorrente:=1;
  ConsulDadosCobranca.codigoIdentificacaoOperador:='  ';
  ConsulDadosCobranca.tipoPessoa:='F';
  ConsulDadosCobranca.cpfCnpj:=191;
  RespDC := GetMacMensageria().consultarInformacoesCobranca(ConsulDadosCobranca);
  memoBusca.Lines.Add(RespDC.mensagemRetorno.mensagem);

  ConsulDadosCobranca.FREE;
  RespDC.FREE;
 
  
end;


ABS
Responder

Gostei + 0

02/10/2009

Henrique Rocha

Rodrigo,

Tentei com esse novo codigo e agora esta dando outro erro, conforme seque:

o codigo:

Project X.exe raised exception class EDOMParseError with
message 'End tag 'p' does not match the start tag 'body'.
Line: 1
<html><body><p>There are currently 1 run'. Process stopped. etc...

Outra coisa, esse web service retorna varias informações como os XML abaixo, na verdade
eu quero pegar as informações individuais para montar um tela onde o usuario possa
ler de forma mais clara, por exemplo:

            
             no arquivo Response.XML

            <indicadorFuncionarioHSBC>?</indicadorFuncionarioHSBC>
            <indicadorBloqueioJudicial>?</indicadorBloqueioJudicial>
            <indicadorGrupoEconomico>?</indicadorGrupoEconomico>
            <indicadorGradVencimento>?</indicadorGradVencimento>


             Tela:

               Indicador de Funcionario:  S
               Bloqueio Judicial:  S


             como eu acesso esses dados?


              Rodrigo, desculpa se estou fazendo mais perguntas eu não sei até onde
              posso perguntar dentro deste chamado, se não estiver neste escopo
              eu faço outro chamdado, OK.
              Mais um vez obrigado.
        


segue o XML:

Request.XML
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hsb="http://www.hsbc.com.br/HSBCMacMensageria/">
   <soapenv:Header/>
   <soapenv:Body>
      <hsb:consultarInformacoesCobrancaRequest>
         <codigoAssessoriaCyber>?</codigoAssessoriaCyber>
         <contaCorrente>?</contaCorrente>
         <codigoIdentificacaoOperador>?</codigoIdentificacaoOperador>
         <tipoPessoa>?</tipoPessoa>
         <cpfCnpj>?</cpfCnpj>
      </hsb:consultarInformacoesCobrancaRequest>
   </soapenv:Body>
</soapenv:Envelope>




Response.XML
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hsb="http://www.hsbc.com.br/HSBCMacMensageria/">
   <soapenv:Header/>
   <soapenv:Body>
      <hsb:consultarInformacoesCobrancaResponse>
         <!--Zero or more repetitions:-->
         <dadosCliente>
            <indicadorFuncionarioHSBC>?</indicadorFuncionarioHSBC>
            <indicadorBloqueioJudicial>?</indicadorBloqueioJudicial>
            <indicadorGrupoEconomico>?</indicadorGrupoEconomico>
            <indicadorGradVencimento>?</indicadorGradVencimento>
         </dadosCliente>
         <!--Zero or more repetitions:-->
         <dadosContrato>
            <nrPagina>?</nrPagina>
            <indicadorUltimaPagina>?</indicadorUltimaPagina>
            <!--1 or more repetitions:-->
            <contratos>
               <siglaAplicativo>?</siglaAplicativo>
               <nrContrato>?</nrContrato>
               <qtdeDiasAtraso>?</qtdeDiasAtraso>
               <bduUnidadeOperadora>?</bduUnidadeOperadora>
               <dataVencimento>?</dataVencimento>
               <codigoProduto>?</codigoProduto>
               <sitCobranca>?</sitCobranca>
               <saldoAtualizado>?</saldoAtualizado>
               <valorLimiteCredito>?</valorLimiteCredito>
               <dataVencimentoLimiteCredito>?</dataVencimentoLimiteCredito>
               <qtdeParcelasEmAtraso>?</qtdeParcelasEmAtraso>
               <qtdeParcelasPagas>?</qtdeParcelasPagas>
               <qtdeParcelasAVencer>?</qtdeParcelasAVencer>
               <nomeAssessoriaCyber>?</nomeAssessoriaCyber>
               <dddAssessoriaCyber>?</dddAssessoriaCyber>
               <telAssessoriaCyber>?</telAssessoriaCyber>
               <nomeCredenciadoJsg>?</nomeCredenciadoJsg>
               <dddCredenciadoJsg>?</dddCredenciadoJsg>
               <telCredenciadoJsg>?</telCredenciadoJsg>
               <indicadorElegibilidadeMAC>?</indicadorElegibilidadeMAC>
               <indicadorAcordoAndamento>?</indicadorAcordoAndamento>
               <!--1 or more repetitions:-->
               <parcelas>
                  <nossoNumero>?</nossoNumero>
                  <dataVencimento>?</dataVencimento>
                  <valorOrigem>?</valorOrigem>
                  <valorAtualizado>?</valorAtualizado>
               </parcelas>
            </contratos>
         </dadosContrato>
         <!--Zero or more repetitions:-->
         <historicoAcordo>
            <numeroAcordo>?</numeroAcordo>
            <dataNegociacao>?</dataNegociacao>
            <tipoOperacao>?</tipoOperacao>
            <situacaoOperacao>?</situacaoOperacao>
            <codigoDecisao>?</codigoDecisao>
            <dataSituacao>?</dataSituacao>
            <valorAcordo>?</valorAcordo>
            <qtdeParcelas>?</qtdeParcelas>
            <valorParcelas>?</valorParcelas>
            <codigoOrigemAcordo>?</codigoOrigemAcordo>
            <!--1 or more repetitions:-->
            <acordosContrato>
               <siglaAplicacao>?</siglaAplicacao>
               <numeroContrato>?</numeroContrato>
               <valorAcordo>?</valorAcordo>
            </acordosContrato>
         </historicoAcordo>
         <mensagemRetorno>
            <returnCode>?</returnCode>
            <reasonCode>?</reasonCode>
            <mensagem>?</mensagem>
         </mensagemRetorno>
      </hsb:consultarInformacoesCobrancaResponse>
   </soapenv:Body>
</soapenv:Envelope>


Responder

Gostei + 0

03/10/2009

Rodrigo Mourão

Enrique o primeiro erro e problema com o XML, todo XML para cada tag de abertura tem que ter uma tag de fechamento. O erro de DOMParser indica que o XML esta com problema.

Se e o XML que veio de retorno do Web Service entao quem tem que alterar e quem fez o WS.

Quanto a pegar os valores peço que abra outro chamado pois cada duvida tem que ser sanada em um chamado exclusivo.

Abs!!

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar