Fórum Como extrair dados xml (soap) de um array #15493
09/02/2010
0
<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
Curtir tópico
+ 0Posts
10/02/2010
Wesley Yamazack
Teria como você me mandar a unit que foi gerada ? Para analisar melhor o código ?
Um abraço
Wesley Y
Gostei + 0
10/02/2010
Henrique Rocha
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
Gostei + 0
17/02/2010
Wesley Yamazack
Att.
Wesley Y
Gostei + 0
22/02/2010
Rodrigo Mourão
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,
Gostei + 0
24/02/2010
Rodrigo Mourão
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!!
Gostei + 0
25/02/2010
Rodrigo Mourão
Estamos aguardando para encerrar o chamado.
Att,
Gostei + 0
25/02/2010
Henrique Rocha
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.
Gostei + 0
25/02/2010
Rodrigo Mourão
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!!
Gostei + 0
27/02/2010
Rodrigo Mourão
Ha mais alguma dúvida ?? Podemos encerrar o chamado ???
No aguardo !!!
Att,
Gostei + 0
02/03/2010
Henrique Rocha
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)