Fórum Como extrair dados xml (soap) de um array #15493

09/02/2010

0

Bom dia! Prezados,   importei um arquivo WSDL  (soap),  e consigo pegar informações desse arquivo, porem  tem uma parte nesse retorno que é um array que pode ter até 99 contratos segue parte do xml:      <dadosCliente>
            <indicadorFuncionarioHSBC>?</indicadorFuncionarioHSBC>
            <indicadorBloqueioJudicial>?</indicadorBloqueioJudicial>
            <indicadorGrupoEconomico>?</indicadorGrupoEconomico>
            <indicadorGradVencimento>?</indicadorGradVencimento>
         </dadosCliente>
         <!--Zero or more repetitions:-->
         <dadosContrato>
            <nrPagina>?</nrPagina>
            <indicadorUltimaPagina>?</indicadorUltimaPagina>
            <!--1 or more repetitions:-->
            <contratos>          <<<<< aqui começa a parte do array e pode ter até 99 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:--> A parte que eu consigo pegar informações de retorno é assim: 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; como eu faço para criar um array e pegar informações do contrato?  
Henrique Rocha

Henrique Rocha

Responder

Posts

10/02/2010

Wesley Yamazack

Olá amigo,
  Teria como você me mandar a unit que foi gerada ? Para analisar melhor o código ?


Um abraço

Wesley Y
Responder

Gostei + 0

10/02/2010

Henrique Rocha

Boa tarde,

segue o link para o .pas
http://video.devmedia.com.br/discovirtual/18998/BCO.zip

como tenho que manter confidencializadade com meu cliente alterei algumas
informações como nome,  ip e endereços...

Obrigado.

Henrique
Responder

Gostei + 0

17/02/2010

Wesley Yamazack

Olá amigo, estou analisando o chamado peço que aguardo um pouco.

Att.

Wesley Y
Responder

Gostei + 0

22/02/2010

Rodrigo Mourão

Olá henrique.

A partir de agora eu estou assumindo seu chamado. Estou baixando o .pas para analisar a estrutura e verificar se há um ComplexyType gerado pelo WSDL Importer.

Peço que aguarde que em breve entraremos em contato !!!

Att,

Responder

Gostei + 0

24/02/2010

Rodrigo Mourão

Olá Henrique,

Você esta usando o metodo consultarInformacoesCobranca para pegar as informações, correto ? Este metodo retorna um objeto do tipo consultarInformacoesCobrancaResponse2 veja abaixo:

    function  consultarInforXaxoesCobranca(const parameters: consultarInforXaxoesCobrancaRequest2): consultarInforXaxoesCobrancaResponse2; stdcall;

Bem esta classe herda de consultarInformacoesCobrancaResponse não tem coleção de contratos, mas tem uma property dados do contrato, obeserve:

ConsultarInforXaxoesCobrancaResponse = class(TRemotable)
  private
     Fields e métodos privados
  public
    constructor Create; override;
    destructor Destroy; override;
  published
    property dadosCliente:    Xax001DadosCliente;
    property dadosContrato:   Xax001DadosContrato;
    property historicoAcordo: Array_Of_Xax001HistoricoAcordo;
    property mensagemRetorno: MensagemRetorno;
  end;

Repare que ele possui um property DadosContrato que é um do tipo  Xax001DadosContrato.  Esta classe sim é que tem um array de contrato. Então vc terá que mapear este retorno, algo parecido com o código abaixo, lebre-se de adaptar a sua necessidade.


var
 ConsulDadosCobranca: consultarInformacoesCobrancaRequest2;
 RespDC:consultarInformacoesCobrancaResponse2;
 Contrato: Xax001Contratos;
 I: Integer;
begin
  ConsulDadosCobranca := consultarInformacoesCobrancaRequest2.create;
  RespDC := consultarInformacoesCobrancaResponse2.create;

  ConsulDadosCobranca.codigoAssessoriaCpbor:=1;
  ConsulDadosCobranca.contaCorrente:=1;
  ConsulDadosCobranca.codigoIdentificacaoOperador:='  ';
  ConsulDadosCobranca.tipoPessoa:='F';
  ConsulDadosCobranca.cpfCnpj:=191;
  RespDC :=    GetXaxMensag().consultarInformacoesCobranca(ConsulDadosCobranca);

  //Suponha que os dados fossem para componentes edits e memos

  with RespDC.dadosCliente do
  begin
   Edtfunc.Text := indicadorFuncionarioBCOX;
   EdtBloq.Text := indicadorBloqueioJudicial;
   //etc
   //etc
   //etc
  end;

  with  RespDC.dadosContrato do
  begin
    EdtPag.text    := IntToStr(nrPagina);
    EdtIndPag.text := indicadorUltimaPagina;
    //Pulo do Gato
    for I := 0 to high(contratos) - 1 do
    begin
      Contrato := contratos[I];
      mmContratos.Lines.Add('Contrato Numero '+IntToStr(Contrato.nrContrato)); //Pegando String
      mmContratos.Lines.Add('  '+Contrato.siglaAplicativo);                    //Pegando String
      mmContratos.Lines.Add('  '+Contrato.nomeAssessoriaCpbor);                //Pegando String
      mmContratos.Lines.Add('  '+Contrato.nomeCredenciadoJsg);                 //Pegando String
      mmContratos.Lines.Add('  '+DateToStr(Contrato.dataVencimento.AsDate));   //Pegando Data
      mmContratos.Lines.Add('  '+BcdToStr(Contrato.saldoAtualizado.AsBcd));  //Pegando Decimal
    end;
  end;

  mmMsg.Lines.Add(RespDC.mensagemRetorno.mensagem);
  ConsulDadosCobranca.FREE;
  RespDC.FREE;

end;

Talvez você tenha que alterar um ou outro detalhe mas acredito que o caminho seja este.  Para usar BcdToStr você terá que dar uses em FMTBcd.

Espero ter ajudado.

abs!!



Responder

Gostei + 0

25/02/2010

Rodrigo Mourão

Olá Amigo,  A dica Ajudou ???

Estamos aguardando para encerrar o chamado.

Att,
Responder

Gostei + 0

25/02/2010

Henrique Rocha

Boa tarde!

Sim a dica ajudou, ainda dentro desse tema, como faço para saber se a variavel
tem algum conteudo?, se for preciso faço outro chamado, mas como
você já esta inteirado  so assunto, pode me ajudar?

Exemplo:

 if BcdToStr(Contrato.saldoAtualizado.AsBcd)) >= then
  ......

Obrigado.
Responder

Gostei + 0

25/02/2010

Rodrigo Mourão

Olá Amigo,


Vocë pode fazer de duas formas: Antes de converter e Depois.

Antes


 if Contrato.saldoAtualizado.AsBcd >= 0 then
 
      Edit1.text := BcdToStr(Contrato.saldoAtualizado.AsBcd)

Depois

 if BcdToStr(Contrato.saldoAtualizado.AsBcd)) <> EmptStr then

Eu aconselho testar antes de converter.

Abs!!

Responder

Gostei + 0

27/02/2010

Rodrigo Mourão

Olá Amigo,

Ha mais alguma dúvida ?? Podemos encerrar o chamado ???

No aguardo !!!

Att,
Responder

Gostei + 0

02/03/2010

Henrique Rocha

Pode encerrar o chamado, obrigado.
Responder

Gostei + 0

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

Aceitar