Fórum Salvar retorno do webservice como xml #419336
04/07/2012
0
Gostaria de saber se tem como salvar o xml que um webservice retorna por dentro do delphi, levando em conta que ele passa o xml para objeto.
está dando problema na hora de receber o retorno de um webservice aqui, então optei por salvar o xml e fazer a leitura por ele direto... alguém já fez ou sabe como fazer?
Romulo Contro
Curtir tópico
+ 0Posts
04/07/2012
Romulo Contro
agradeço desde já!
Gostei + 0
06/07/2012
Joel Rodrigues
http://delphi.about.com/od/internetintranet/ss/xml_rss_read.htm
Gostei + 0
06/07/2012
Romulo Contro
Mas essa solução não ajudaria, pois quando recebo o retorno do webservice, ele nao vem o xml em um link especifico... o xml de retorno vem na mesma requisição que eu faço... daí só precisava encontrar um meio de interceptar antes do delphi transformá-lo em objeto...
Porém, não será mais necessário fazer isso... pois em outro tópico daqui do devmedia eu postei a solução de como consegui capturar o retorno... não sendo mais necessário fazer a varredura no xml.
(neste tópico: https://www.devmedia.com.br/forum/problema-passando-e-recebendo-array-de-objetos-em-um-webservice-feito-em-c/419078 )
Mas mesmo assim, muito obrigado pela atenção! dei uma lida no link, e o assunto é realmente interessante também.
Abraço!
Gostei + 0
06/07/2012
Gustavo Bretas
Gostei + 0
06/07/2012
Romulo Contro
http://homologacao.ws.rodocred.com.br/rodocred.asmx?WSDL
mas já não precisa mais de ajuda, pois consegui fazer funcionar já, mesmo sem precisar fazer a leitura do xml...
agradeço a atenção!
Gostei + 0
07/08/2012
Márcio Melo
Dê um ajuda. Preciso consumir um WebService do GOV RJ para emissão de guias de DARJ, porém não consigo entender como enviar os dados. Abaixo o WSDL, gostaria de saber como passar os dados pasar a função **enviarDados**, desde já agradeço.
unit GerarDocumentoArrecadacaoWS1;
interface
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
type
// ************************************************************************ //
// The following types, referred to in the WSDL document are not being represented
// in this file. They are either aliases[@] of other types represented or were referred
// to but never[!] declared in the document. The types from the latter category
// typically map to predefined/known XML or Borland types; however, they could also
// indicate incorrect WSDL documents that failed to declare or import a schema type.
// ************************************************************************ //
// !:string - http://www.w3.org/2001/XMLSchema
// !:double - http://www.w3.org/2001/XMLSchema
// !:long - http://www.w3.org/2001/XMLSchema
// !:int - http://www.w3.org/2001/XMLSchema
// !:dateTime - http://www.w3.org/2001/XMLSchema
Retorno = class; { http://www.openuri.org/ }
DadosContribuintePrincipalRetorno = class; { http://www.openuri.org/ }
ItemPagamentoRetorno = class; { http://www.openuri.org/ }
DocumentosRetorno = class; { http://www.openuri.org/ }
FalhaSessaoLote = class; { http://www.openuri.org/ }
ItemPagamento = class; { http://www.openuri.org/ }
Documento = class; { http://www.openuri.org/ }
Emitente = class; { http://www.openuri.org/ }
ChamadaDadosWebServiceRefLote = class; { http://www.openuri.org/ }
ConsultaDadosWebService = class; { http://www.openuri.org/ }
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
Retorno = class(TRemotable)
private
FCodigoRetorno: Int64;
FMensagemRetorno: WideString;
published
property CodigoRetorno: Int64 read FCodigoRetorno write FCodigoRetorno;
property MensagemRetorno: WideString read FMensagemRetorno write FMensagemRetorno;
end;
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
DadosContribuintePrincipalRetorno = class(TRemotable)
private
FCepContribuintePrincipal: Int64;
FCnpjContribuintePrincipal: Int64;
FDddContribuintePrincipal: WideString;
FEnderecoContribuintePrincipal: WideString;
FMunicipioContribuintePrincipal: WideString;
FRazaoSocialContribuintePrincipal: WideString;
FTelefoneContribuintePrincipal: WideString;
FTelefoneDDDContribuintePrincipal: WideString;
FUFContribuintePrincipal: WideString;
published
property CepContribuintePrincipal: Int64 read FCepContribuintePrincipal write FCepContribuintePrincipal;
property CnpjContribuintePrincipal: Int64 read FCnpjContribuintePrincipal write FCnpjContribuintePrincipal;
property DddContribuintePrincipal: WideString read FDddContribuintePrincipal write FDddContribuintePrincipal;
property EnderecoContribuintePrincipal: WideString read FEnderecoContribuintePrincipal write FEnderecoContribuintePrincipal;
property MunicipioContribuintePrincipal: WideString read FMunicipioContribuintePrincipal write FMunicipioContribuintePrincipal;
property RazaoSocialContribuintePrincipal: WideString read FRazaoSocialContribuintePrincipal write FRazaoSocialContribuintePrincipal;
property TelefoneContribuintePrincipal: WideString read FTelefoneContribuintePrincipal write FTelefoneContribuintePrincipal;
property TelefoneDDDContribuintePrincipal: WideString read FTelefoneDDDContribuintePrincipal write FTelefoneDDDContribuintePrincipal;
property UFContribuintePrincipal: WideString read FUFContribuintePrincipal write FUFContribuintePrincipal;
end;
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
ItemPagamentoRetorno = class(TRemotable)
private
FNumControleContribuinte: WideString;
FPrincipalRetorno: DadosContribuintePrincipalRetorno;
FRetorno: Retorno;
FValorFECPMora: Double;
FValorFECPMulta: Double;
FValorFECPPrincipal: Double;
FValorFECPTotal: Double;
FValorICMSMora: Double;
FValorICMSMulta: Double;
FValorICMSPrincipal: Double;
FValorICMSTotal: Double;
FValorTotal: Double;
public
destructor Destroy; override;
published
property NumControleContribuinte: WideString read FNumControleContribuinte write FNumControleContribuinte;
property PrincipalRetorno: DadosContribuintePrincipalRetorno read FPrincipalRetorno write FPrincipalRetorno;
property Retorno: Retorno read FRetorno write FRetorno;
property ValorFECPMora: Double read FValorFECPMora write FValorFECPMora;
property ValorFECPMulta: Double read FValorFECPMulta write FValorFECPMulta;
property ValorFECPPrincipal: Double read FValorFECPPrincipal write FValorFECPPrincipal;
property ValorFECPTotal: Double read FValorFECPTotal write FValorFECPTotal;
property ValorICMSMora: Double read FValorICMSMora write FValorICMSMora;
property ValorICMSMulta: Double read FValorICMSMulta write FValorICMSMulta;
property ValorICMSPrincipal: Double read FValorICMSPrincipal write FValorICMSPrincipal;
property ValorICMSTotal: Double read FValorICMSTotal write FValorICMSTotal;
property ValorTotal: Double read FValorTotal write FValorTotal;
end;
ArrayOfItemPagamentoRetorno = array of ItemPagamentoRetorno; { http://www.openuri.org/ }
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
DocumentosRetorno = class(TRemotable)
private
FItensRetorno: ArrayOfItemPagamentoRetorno;
FListaCodigoBarra: WideString;
FNossoNumeroSEFAZ: WideString;
public
destructor Destroy; override;
published
property ItensRetorno: ArrayOfItemPagamentoRetorno read FItensRetorno write FItensRetorno;
property ListaCodigoBarra: WideString read FListaCodigoBarra write FListaCodigoBarra;
property NossoNumeroSEFAZ: WideString read FNossoNumeroSEFAZ write FNossoNumeroSEFAZ;
end;
ArrayOfDocumentosRetorno = array of DocumentosRetorno; { http://www.openuri.org/ }
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
FalhaSessaoLote = class(TRemotable)
private
FCoErro: Int64;
FDescricaoErro: WideString;
FNuIdentificador: WideString;
published
property CoErro: Int64 read FCoErro write FCoErro;
property DescricaoErro: WideString read FDescricaoErro write FDescricaoErro;
property NuIdentificador: WideString read FNuIdentificador write FNuIdentificador;
end;
ArrayOfFalhaSessaoLote = array of FalhaSessaoLote; { http://www.openuri.org/ }
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
ItemPagamento = class(TRemotable)
private
FCepContribuinte: Integer;
FCnpj: Int64;
FCodigoProduto: Int64;
FCpf: Int64;
FDataFatoGerador: WideString;
FDataVencimento: WideString;
FDddContribuinte: Integer;
FDiaVencimento: Integer;
FEnderecoContribuinte: WideString;
FInformacoesComplementares: WideString;
FInscEstadualRJ: Integer;
FMunicipioContribuinte: WideString;
FNatureza: Int64;
FNaturezaQualificacao: Int64;
FNomeRazaoSocial: WideString;
FNotaFiscalCnpj: Int64;
FNotaFiscalCpf: Int64;
FNotaFiscalDataEmissao: WideString;
FNotaFiscalNumero: Int64;
FNotaFiscalSerie: Integer;
FNotaFiscalTipo: WideString;
FNumControleContribuinte: WideString;
FNumDocOrigem: Int64;
FPassaporte: WideString;
FPeriodoReferenciaAno: Integer;
FPeriodoReferenciaDecendio: Integer;
FPeriodoReferenciaMes: Integer;
FTelefoneContribuinte: Int64;
FTipoApuracao: Integer;
FTipoId: Integer;
FTipoImportacao: Integer;
FTipoPeriodoApuracao: WideString;
FUfContribuinte: WideString;
FValorFECPPrincipal: Double;
FValorICMSPrincipal: Double;
FValorTotal: Double;
published
property CepContribuinte: Integer read FCepContribuinte write FCepContribuinte;
property Cnpj: Int64 read FCnpj write FCnpj;
property CodigoProduto: Int64 read FCodigoProduto write FCodigoProduto;
property Cpf: Int64 read FCpf write FCpf;
property DataFatoGerador: WideString read FDataFatoGerador write FDataFatoGerador;
property DataVencimento: WideString read FDataVencimento write FDataVencimento;
property DddContribuinte: Integer read FDddContribuinte write FDddContribuinte;
property DiaVencimento: Integer read FDiaVencimento write FDiaVencimento;
property EnderecoContribuinte: WideString read FEnderecoContribuinte write FEnderecoContribuinte;
property InformacoesComplementares: WideString read FInformacoesComplementares write FInformacoesComplementares;
property InscEstadualRJ: Integer read FInscEstadualRJ write FInscEstadualRJ;
property MunicipioContribuinte: WideString read FMunicipioContribuinte write FMunicipioContribuinte;
property Natureza: Int64 read FNatureza write FNatureza;
property NaturezaQualificacao: Int64 read FNaturezaQualificacao write FNaturezaQualificacao;
property NomeRazaoSocial: WideString read FNomeRazaoSocial write FNomeRazaoSocial;
property NotaFiscalCnpj: Int64 read FNotaFiscalCnpj write FNotaFiscalCnpj;
property NotaFiscalCpf: Int64 read FNotaFiscalCpf write FNotaFiscalCpf;
property NotaFiscalDataEmissao: WideString read FNotaFiscalDataEmissao write FNotaFiscalDataEmissao;
property NotaFiscalNumero: Int64 read FNotaFiscalNumero write FNotaFiscalNumero;
property NotaFiscalSerie: Integer read FNotaFiscalSerie write FNotaFiscalSerie;
property NotaFiscalTipo: WideString read FNotaFiscalTipo write FNotaFiscalTipo;
property NumControleContribuinte: WideString read FNumControleContribuinte write FNumControleContribuinte;
property NumDocOrigem: Int64 read FNumDocOrigem write FNumDocOrigem;
property Passaporte: WideString read FPassaporte write FPassaporte;
property PeriodoReferenciaAno: Integer read FPeriodoReferenciaAno write FPeriodoReferenciaAno;
property PeriodoReferenciaDecendio: Integer read FPeriodoReferenciaDecendio write FPeriodoReferenciaDecendio;
property PeriodoReferenciaMes: Integer read FPeriodoReferenciaMes write FPeriodoReferenciaMes;
property TelefoneContribuinte: Int64 read FTelefoneContribuinte write FTelefoneContribuinte;
property TipoApuracao: Integer read FTipoApuracao write FTipoApuracao;
property TipoId: Integer read FTipoId write FTipoId;
property TipoImportacao: Integer read FTipoImportacao write FTipoImportacao;
property TipoPeriodoApuracao: WideString read FTipoPeriodoApuracao write FTipoPeriodoApuracao;
property UfContribuinte: WideString read FUfContribuinte write FUfContribuinte;
property ValorFECPPrincipal: Double read FValorFECPPrincipal write FValorFECPPrincipal;
property ValorICMSPrincipal: Double read FValorICMSPrincipal write FValorICMSPrincipal;
property ValorTotal: Double read FValorTotal write FValorTotal;
end;
ArrayOfItemPagamento = array of ItemPagamento; { http://www.openuri.org/ }
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
Documento = class(TRemotable)
private
FDataPagamento: WideString;
FDataPagamentoFormatada: TXSDateTime;
FItensPagamentos: ArrayOfItemPagamento;
FSqDocumento: Int64;
FTipoDocumento: Integer;
FTipoPagamento: Integer;
public
destructor Destroy; override;
published
property DataPagamento: WideString read FDataPagamento write FDataPagamento;
property DataPagamentoFormatada: TXSDateTime read FDataPagamentoFormatada write FDataPagamentoFormatada;
property ItensPagamentos: ArrayOfItemPagamento read FItensPagamentos write FItensPagamentos;
property SqDocumento: Int64 read FSqDocumento write FSqDocumento;
property TipoDocumento: Integer read FTipoDocumento write FTipoDocumento;
property TipoPagamento: Integer read FTipoPagamento write FTipoPagamento;
end;
ArrayOfDocumento = array of Documento; { http://www.openuri.org/ }
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
Emitente = class(TRemotable)
private
FCnpjEmitente: Int64;
FEmail: WideString;
published
property CnpjEmitente: Int64 read FCnpjEmitente write FCnpjEmitente;
property Email: WideString read FEmail write FEmail;
end;
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
ChamadaDadosWebServiceRefLote = class(TRemotable)
private
FCNPJCPF: Int64;
FDataRecebimento: WideString;
FIdSessao: WideString;
FRetorno: Retorno;
public
destructor Destroy; override;
published
property CNPJCPF: Int64 read FCNPJCPF write FCNPJCPF;
property DataRecebimento: WideString read FDataRecebimento write FDataRecebimento;
property IdSessao: WideString read FIdSessao write FIdSessao;
property Retorno: Retorno read FRetorno write FRetorno;
end;
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// ************************************************************************ //
ConsultaDadosWebService = class(TRemotable)
private
FDocsRetorno: ArrayOfDocumentosRetorno;
FIdSessao: WideString;
FListaFalha: ArrayOfFalhaSessaoLote;
FRetorno: Retorno;
FStatus: WideString;
public
destructor Destroy; override;
published
property DocsRetorno: ArrayOfDocumentosRetorno read FDocsRetorno write FDocsRetorno;
property IdSessao: WideString read FIdSessao write FIdSessao;
property ListaFalha: ArrayOfFalhaSessaoLote read FListaFalha write FListaFalha;
property Retorno: Retorno read FRetorno write FRetorno;
property Status: WideString read FStatus write FStatus;
end;
// ************************************************************************ //
// Namespace : http://www.openuri.org/
// transport : http://schemas.xmlsoap.org/soap/http
// style : document
// binding : GerarDocumentoArrecadacaoWSSoapBinding
// service : GerarDocumentoArrecadacaoWS
// port : GerarDocumentoArrecadacaoWSSoapPort
// URL : http://10.8.90.96:7003/homologacaoGCT/br/gov/rj/sef/gct/webservice/GerarDocumentoArrecadacaoWS.jws
// ************************************************************************ //
GerarDocumentoArrecadacaoWS = interface(IInvokable)
[{E95A620B-57CD-B4BC-C074-01F88846EC68}]
function enviarDados(const emitente: Emitente; const documentos: ArrayOfDocumento): ChamadaDadosWebServiceRefLote; stdcall;
function consultarDados(const cnpj: Int64; const idSessao: WideString): ConsultaDadosWebService; stdcall;
end;
Gostei + 0
07/08/2012
Romulo Contro
Me passa o link do WSDL pra eu dar uma olhada, pois parece que tá faltando coisa aí no codigo que vc postou...
Agora não vou conseguir analisar com muita atenção, mas de noite, por volta das 11hrs que eu estiver em casa eu dou uma olhada pra vc.
Só pra adiantar, vc já chegou fazer o exemplo do CEP? é bem simples, mas é pra entender mais ou menos como funciona... da uma olhada nesse link aqui, caso nao tenha visto... foi por ele que aprendi um pouco como começar consumir o webservice.
http://rodrigojarouche.wordpress.com/2010/03/27/como-consumir-webservices-em-delphi/
Abraço!
Gostei + 0
07/08/2012
Márcio Melo
Já consumo o webservice de CEP sem problemas, mas no mesmo basta passar uma string. Neste que estou com dificuldade terá que ser passado um array, e é aí que não estou sabendo como passar. Obrigado.
link:
http://www.fazenda.rj.gov.br/homologacaoGCT/br/gov/rj/sef/gct/webservice/GerarDocumentoArrecadacaoWS.jws
Gostei + 0
07/08/2012
Romulo Contro
Quando eu fiz o meu projeto aqui, era só passar o array alimentado normalmente como parametro na hora de chamar a procedure do WS, que ele ia normal, e no xml ele ia varias tags com nomes iguais... entao o webservice entendia que era um array...
por exemplo, segue uma parte do codigo:
objArrayClausulasViagem.ClausulasViagem[0] := ClausulasViagem.Create;
objArrayClausulasViagem.ClausulasViagem[0].CodigoClausula := Cláusula 1;
objArrayClausulasViagem.ClausulasViagem[1] := ClausulasViagem.Create;
objArrayClausulasViagem.ClausulasViagem[1].CodigoClausula := Cláusula 2;
objArrayClausulasViagem.ClausulasViagem[2] := ClausulasViagem.Create;
objArrayClausulasViagem.ClausulasViagem[2].CodigoClausula := Cláusula 3;
objArrayClausulasViagem.ClausulasViagem[3] := ClausulasViagem.Create;
objArrayClausulasViagem.ClausulasViagem[3].CodigoClausula := Cláusula 4;
objArrayClausulasViagem.ClausulasViagem[4] := ClausulasViagem.Create;
objArrayClausulasViagem.ClausulasViagem[4].CodigoClausula := Cláusula 5;
objArrayClausulasViagem.ClausulasViagem[5] := ClausulasViagem.Create;
objArrayClausulasViagem.ClausulasViagem[5].CodigoClausula := Cláusula 6;
objArrayClausulasViagem.ClausulasViagem[6] := ClausulasViagem.Create;
objArrayClausulasViagem.ClausulasViagem[6].CodigoClausula := Cláusula 7;
objArrayClausulasViagem.ClausulasViagem[7] := ClausulasViagem.Create;
objArrayClausulasViagem.ClausulasViagem[7].CodigoClausula := Cláusula 8;
ser := GetRodocredSoap(false,,uMain.HTTPRIO1);
ser.ManterViagemRequest(IdentificacaoIntegracao, StrToInt(uMain.EdtID.Text), INC, FRE, objDadosViagem, objTransportador, objRotaViagem, objVeiculosViagem, NIL, objMotoristaViagem, objEnvolvidosTransporteViagem, objValoresViagem, objImpostosViagem, NIL, objDocumentosViagem, objOperacaoViagem, objArrayClausulasViagem, outRetornoMensagem, outNumeroViagem, outCIOT, outPedidoValePedagio, outListaPedidosValePedagio, outResumoFinanceiro, outSituacaoViagem, outDetalheProgramacaoViagem);
nessa parte aí eu to alimentando o objArrayClausulasViagem.ClausulasViagem do [1] até o [8]... aí eu passo normal na procedure como se fosse uma variavel qualquer...
uma dica: se o WSDL importou por exemplo, a procedure que recebe só um objeto com todos os outros objetos dentro, muda ela na mao, e modifica pra ela receber todos os objetos ao invés de 1 só...
nesse exemplo aí que citei, estava pra receber só um objetoViagemRequest... e dentro desse objeto tinha todos os outros objetos que passei de parametro... eu tive que desmontar pra dar certo, pois ele tava dando erro na hora de serializar/desserializar...
outra dica: se importar como função pra receber retorno, modifica pra procedure, e declara variaveis de retorno dentro da procedure... pois na hora de receber objetos ou arrays, se for um retorno normal de função ele vai dar erro...
exemplo:
procedure ManterViagemRequest(const IdentificacaoIntegracao: IdentificacaoIntegracaoType; const IdClienteResponsavel: Integer; const Operacao: TipoOperacaoType; const TipoViagem: TipoViagemType; const DadosViagem: DadosViagem; const Transportador: Transportador; const RotaViagem: RotaViagem; const VeiculosViagem: VeiculosViagem; const ValePedagioViagem: ValePedagioViagemType; const MotoristaViagem: MotoristaViagemType; const EnvolvidosTransporteViagem: EnvolvidosTransporteViagemType; const ValoresViagem: ValoresViagem; const ImpostosViagem: ImpostosViagem; const DadosBancarios: DadosBancarios; const DocumentosViagem: ArrayOfDocumentosViagemDocumento; const ProgramacaoViagem: ArrayOfOperacaoViagem; const ClausulasViagem: ArrayOfClausulasViagem; out RetornoMensagem: RetornoMensagem; out NumeroViagem: WideString; out CIOT: CIOT; out PedidoValePedagio: PedidoValePedagio; out ListaPedidosValePedagio: ArrayOfPedidoValePedagio; out ResumoFinanceiro: ResumoFinanceiro; out SituacaoViagem: SituacaoViagem; out DetalheProgramacaoViagem: ArrayOfDetalheProgramacaoViagemOperacaoViagem); stdcall;
se quiser acompanhar como os XMLs estão indo e retornando, recomendo que baixe o programa FIDDLER, ele funciona como um proxy, que monitora tudo que entra e sai pela internet... aí dá pra vc ver o xml... é bem bacana!
depois desse texto enorme, espero ter ajudado!
responde aí pra falar se deu certo ou nao! abraço!
Gostei + 0
08/08/2012
Romulo Contro
function enviarDados(const emitente: Emitente; const documentos: ArrayOfDocumento): ChamadaDadosWebServiceRefLote; stdcall;
muda essa parte do codigo aí pra isso:
procedure enviarDados(const emitente: Emitente; const documentos: ArrayOfDocumento; out ChamadaDadosWebServiceRefLote); stdcall;
aí vc vai receber o retorno na variavel que vc passar de parametro para a ChamadaDadosWebServiceRefLote...
quando vc faz por função, ele manda certo, mas na hora de ler o retorno do xml ele nao consegue identificar o array... entao vai voltar vazio pra vc no delphi...
mas com procedure vai funcionar.
Gostei + 0
08/08/2012
Márcio Melo
Documento = class(TRemotable)
private
FDataPagamento: WideString;
FDataPagamentoFormatada: TXSDateTime;
FItensPagamentos: ArrayOfItemPagamento;
FSqDocumento: Int64;
FTipoDocumento: Integer;
FTipoPagamento: Integer;
public
destructor Destroy; override;
published
property DataPagamento: WideString read FDataPagamento write FDataPagamento;
property DataPagamentoFormatada: TXSDateTime read FDataPagamentoFormatada write FDataPagamentoFormatada;
property ItensPagamentos: ArrayOfItemPagamento read FItensPagamentos write FItensPagamentos;
property SqDocumento: Int64 read FSqDocumento write FSqDocumento;
property TipoDocumento: Integer read FTipoDocumento write FTipoDocumento;
property TipoPagamento: Integer read FTipoPagamento write FTipoPagamento;
end;
ArrayOfDocumento = array of Documento;
========================================
Consigo apropriar valores em Documento e em ItensPamentos, pois apenas ItensPagamentos terá vários (como fazer)
Abaixo o código e o resultado do mesmo até o momento.
procedure TForm1.BtnEnviarClick(Sender: TObject);
var
ObjSoap : GerarDocumentoArrecadacaoWS;
E_Emitente: Emitente;
E_Documento : Documento;
E_ItemPagamento : ItemPagamento;
E_ArrayOfDocumento: ArrayOfDocumento;
E_ArrayOfItemPagamento: ArrayOfItemPagamento;
begin
HTTPRIO1.HTTPWebNode.Proxy := xxxxxx;
HTTPRIO1.HTTPWebNode.UserName := xxxxxx;
HTTPRIO1.HTTPWebNode.Password := xxxxxx;
E_Emitente := Emitente.Create;
E_Emitente.CnpjEmitente := 84453844002202;
E_Emitente.Email := marciormelo@gmail.com;
//ShowMessage(GetPropValue(E_Emitente,Email));
//ShowMessage(GetPropValue(E_Emitente,CnpjEmitente));
E_Documento := Documento.Create;
With E_Documento do
begin
DataPagamento := 06/08/2012;
TipoDocumento := 1;
TipoPagamento := 1;
end;
E_ItemPagamento := ItemPagamento.Create;
With E_ItemPagamento do
begin
CepContribuinte := 13070045;
Cnpj := 00000000191;
CodigoProduto := 396;
DataVencimento := 06/08/2012;
DiaVencimento := 06;
EnderecoContribuinte := AVN DAS AMERICAS 4666, BARRA DA TIJUCA;
InscEstadualRJ := 0;
MunicipioContribuinte := RIO DE JANEIRO;
Natureza := 2;
NomeRazaoSocial := TELLERINA COMERCIO DE PRESENTES E ARTIGOS PARA DECORACAO S/A;
NumControleContribuinte := AAAAZZZZ0001;
PeriodoReferenciaAno := 2012;
PeriodoReferenciaMes := 08;
TelefoneContribuinte := 12345678;
TipoId := 1;
UfContribuinte := RJ;
ValorICMSPrincipal := 0.01;
ValorTotal := 0.01;
end;
If (ObjSoap = nil) Then
ObjSoap := GetGerarDocumentoArrecadacaoWS(FALSE, , HTTPRio1);
ObjSoap:=HTTPRIO1 as GerarDocumentoArrecadacaoWS;
ObjSoap.enviarDados(E_Emitente,E_ArrayOfDocumento);
end;
?xml version=1.0?
SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:xsi=http://www.w3.org/2001/XMLSchema-instanceSOAP-ENV:BodyenviarDados xmlns=http://www.openuri.org/emitenteCnpjEmitente84453844002202/CnpjEmitenteEmailmarciormelo@gmail.com/Email/emitentedocumentos//enviarDados/SOAP-ENV:Body/SOAP-ENV:Envelope
Valeu!
Gostei + 0
09/08/2012
Romulo Contro
Já que o ItemPagamento terá varios itens e será enviado como um array, vc tem que alimentar o E_ArrayOfItemPagamento, e não somente o ItemPagamento, pois ele é só um modelo pra gerar o array...
vc faz da seguinte maneira... tenta iniciar ele setando o tamanho, acho que da certo assim:
SetLength(E_ArrayOfItemPagamento,2) (coloquei 2, mas aí vc ve o tamanho que vai ficar o vetor, e seta ele ali)
aí depois disso, vc vai popular ele da seguinte maneira:
E_ArrayOfItemPagamento[0].cepcontribuinte := cep;
E_ArrayOfItemPagamento[0].cnpj := cnpj;
...
E_ArrayOfItemPagamento[1].cepcontribuinte := cep;
E_ArrayOfItemPagamento[1].cnpj := cnpj;
...
E_ArrayOfItemPagamento[n]......
se tiver um tamanho fixo, coloca os indices na mao mesmo, se não, vc faz um FOR rodando alguma tabela sua e adicionando os dados...
aí se tiver mais algum array pra alimentar, faz todos nesse modelo aí, que vai dar certo.
entendeu?
Gostei + 0
09/08/2012
Romulo Contro
vc tem que criar também o objeto para cada indice...
por exemplo:
E_ArrayOfItemPagamento[0] := ItemPagamento.Create;
E_ArrayOfItemPagamento[1] := ItemPagamento.Create;
E_ArrayOfItemPagamento[2] := ItemPagamento.Create;
...
E_ArrayOfItemPagamento[N] := ItemPagamento.Create;
espero ter ajudado, abraço!
posta aí depois se deu certo ou nao
Gostei + 0
09/08/2012
Márcio Melo
Deu certo o envio, porém não estou conseguindo alterar o retorno de function p/ procedure, responde aí no e-mail marciormelo@gmail.com para que eu possa mandar o código fonte.
Obrigado.
Gostei + 0
10/08/2012
Romulo Contro
quando é declarada a procedure, o retorno vai vir numa variavel que foi criada com um OUT na frente... aí vc passa como parâmetro essa variavel, que quando voce chamar a procedure, ela vai voltar preenchida.
por exemplo:
procedure teste(const codigo:integer; const nome:string; out status:string); stdcall;
//na hora de chamar essa procedure, vc passa da seguinte maneira:
teste(varcodigo, varnome, varstatus);
showmessage(varstatus);
eu vou passar o varcodigo e varnome preenchidos, e a varstatus eu passo vazia
o retorno vem dentro dessa varstatus, tendeu?
vale observar que:
só vai dar problema com function se vc tiver mais de um objeto pra receber de retorno, ou se for um array...
porém, se for só 1 objeto de retorno, ela vai funcionar normal.
mas qualquer coisa, estou aguardando sua resposta no email, abraço!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)