Fórum Como passar um array como parametro #19241
08/03/2010
0
Para receber dados do um sistema soap, uso da seguinte forma:
essa parte é um array...
for I := 0 to high(RespDC.dadosContrato.contratos) - 0 do
begin
for J := Low(RespDC.dadosContrato.contratos[i].parcelas) to
high(RespDC.dadosContrato.contratos[i].parcelas) do
begin
CdsCTParc.Append;
CdsCTParc.FieldByName('Contrato').AsString:= InttoStr(RespDC.dadosContrato.contratos[i].nrContrato);
CdsCTParc.FieldByName('NossoNumero').AsString:= InttoStr(RespDC.dadosContrato.contratos[i].parcelas[J].nossoNumero);
CdsCTParc.FieldByName('Vencto').AsString :=DateToStr(RespDC.dadosContrato.contratos[i].parcelas[J].dataVencimento.asDate);
CdsCTParc.FieldByName('ValorOrig').AsFloat :=StrtoFloat( StringReplace(RespDC.dadosContrato.contratos[i].parcelas[J].valorOrigem.DecimalString, '.', ',',[rfReplaceAll, rfIgnoreCase]));
CdsCTParc.FieldByName('ValorAtual').AsFloat :=StrtoFloat( StringReplace(RespDC.dadosContrato.contratos[i].parcelas[J].valorAtualizado.DecimalString, '.', ',',[rfReplaceAll, rfIgnoreCase]));
CdsCTParc.Post;
end;
end;
Agora tenho que passar um array como parametro, como faço?, estou tentando isso, mas não funciona.
procedure TForm1.SBpgavClick(Sender: TObject);
var
SimPGAvista: simulacaoPagamentoAVistaRequest2;
RespDC: simulacaoPagamentoAVistaResponse2;
xDataPrev : TXSDate;
xPercDesc, xDespesa, xHono, XMora : TXSDecimal;
vCT : Int64;
i, j :Integer;
begin
xDataPrev := TXSDate.Create;
xDataPrev.AsDate := DateTimePicker1.DateTime;
xPercDesc := TXSDecimal.Create;
xDespesa := TXSDecimal.Create;
xHono := TXSDecimal.Create;
xMora := TXSDecimal.Create;
SimPGAvista := simulacaoPagamentoAVistaRequest2.create;
RespDC := simulacaoPagamentoAVistaResponse2.create;
SimPGAvista.tipoOperacao:=5;
SimPGAvista.dataPrevisaoPgto := xDataPrev;
xPercDesc.DecimalString :=Edit15.Text;
SimPGAvista.porcentagemDescontoConcedido := xPercDesc;
xDespesa.DecimalString :=Edit16.Text;
SimPGAvista.valorDespesa:=xDespesa;
xHono.DecimalString :=Edit17.Text;
SimPGAvista.porcentagemCobrancaHonorario:=xHono;
aqui começa o array que tem 3 campos e pode conter até 99 arrays
SimPGAvista.contratos[0].codigoAplicativo:= 'AUF';
vCT:= StrToint64(CdsContratosContrato.AsString);
SimPGAvista.contratos[0].nrContrato:=vCT;
xMora.DecimalString:=Edit19.Text;
SimPGAvista.contratos[0].taxaMora :=xMora;
RespDC := GetMacMensageria().simulacaoPagamentoAVista(SimPGAvista);
como passo esse array como parametro?
abaixo segue detalhes desse array:
SimulacaoPagamentoAVistaRequest = class(TRemotable)
private
FcodigoAssessoriaCyber: Integer;
FcontaCorrente: Int64;
FcodigoIdentificacaoOperador: string;
FtipoPessoa: string;
FcpfCnpj: Int64;
FtipoOperacao: Integer;
FdataPrevisaoPgto: TXSDate;
FtipoCobranca: Integer;
FporcentagemDescontoConcedido: TXSDecimal;
FvalorDespesa: TXSDecimal;
FporcentagemCobrancaHonorario: TXSDecimal;
Fcontratos: Array_Of_Mac003EntradaContratos;
public
constructor Create; override;
destructor Destroy; override;
published
property codigoAssessoriaCyber: Integer Index (IS_UNQL) read FcodigoAssessoriaCyber write FcodigoAssessoriaCyber;
property contaCorrente: Int64 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: Int64 Index (IS_UNQL) read FcpfCnpj write FcpfCnpj;
property tipoOperacao: Integer Index (IS_UNQL) read FtipoOperacao write FtipoOperacao;
property dataPrevisaoPgto: TXSDate Index (IS_UNQL) read FdataPrevisaoPgto write FdataPrevisaoPgto;
property tipoCobranca: Integer Index (IS_UNQL) read FtipoCobranca write FtipoCobranca;
property porcentagemDescontoConcedido: TXSDecimal Index (IS_UNQL) read FporcentagemDescontoConcedido write FporcentagemDescontoConcedido;
property valorDespesa: TXSDecimal Index (IS_UNQL) read FvalorDespesa write FvalorDespesa;
property porcentagemCobrancaHonorario: TXSDecimal Index (IS_UNQL) read FporcentagemCobrancaHonorario write FporcentagemCobrancaHonorario;
property contratos: Array_Of_Mac003EntradaContratos Index (IS_UNBD or IS_UNQL) read Fcontratos write Fcontratos;
end;
Mac003EntradaContratos = class(TRemotable)
private
FcodigoAplicativo: string;
FnrContrato: Int64;
FtaxaMora: TXSDecimal;
public
destructor Destroy; override;
published
property codigoAplicativo: string Index (IS_UNQL) read FcodigoAplicativo write FcodigoAplicativo;
property nrContrato: Int64 Index (IS_UNQL) read FnrContrato write FnrContrato;
property taxaMora: TXSDecimal Index (IS_UNQL) read FtaxaMora write FtaxaMora;
end;
Obrigado.
Henrique.
Henrique Rocha
Curtir tópico
+ 0Posts
08/03/2010
Rodrigo Mourão
procedure TForm1.SBpgavClick(Sender: TObject);
var
SimPGAvista: simulacaoPagamentoAVistaRequest2;
RespDC: simulacaoPagamentoAVistaResponse2;
xDataPrev : TXSDate;
xPercDesc, xDespesa, xHono, XMora : TXSDecimal;
vCT : Int64;
i, j :Integer;
Contrato: Mac003EntradaContratos;
begin
xDataPrev := TXSDate.Create;
xDataPrev.AsDate := DateTimePicker1.DateTime;
xPercDesc := TXSDecimal.Create;
xDespesa := TXSDecimal.Create;
xHono := TXSDecimal.Create;
xMora := TXSDecimal.Create;
SimPGAvista := simulacaoPagamentoAVistaRequest2.create;
RespDC := simulacaoPagamentoAVistaResponse2.create;
SimPGAvista.tipoOperacao:=5;
SimPGAvista.dataPrevisaoPgto := xDataPrev;
xPercDesc.DecimalString :=Edit15.Text;
SimPGAvista.porcentagemDescontoConcedido := xPercDesc;
xDespesa.DecimalString :=Edit16.Text;
SimPGAvista.valorDespesa:=xDespesa;
xHono.DecimalString :=Edit17.Text;
SimPGAvista.porcentagemCobrancaHonorario:=xHono;
Primeira Opção
vCT:= StrToint64(CdsContratosContrato.AsString);
xMora.DecimalString:=Edit19.Text;
Contrato := Mac003EntradaContratos.create;
Contrato.codigoAplicativo:= 'AUF';
Contrato.nrContrato:=vCT;
Contrato.taxaMora :=xMora;
SimPGAvista.contratos[0] := Contrato;
ou
Segunda Opção
vCT:= StrToint64(CdsContratosContrato.AsString);
xMora.DecimalString:=Edit19.Text;
SimPGAvista.contratos[0] := Mac003EntradaContratos.create;
SimPGAvista.contratos[0].codigoAplicativo:= 'AUF';
SimPGAvista.contratos[0].nrContrato:=vCT;
SimPGAvista.contratos[0].taxaMora :=xMora;
RespDC := GetMacMensageria().simulacaoPagamentoAVista(SimPGAvista);
Att,
Gostei + 0
08/03/2010
Henrique Rocha
não funcionou
tentei desta forma:
procedure TForm1.SBpgavClick(Sender: TObject);
var
SimPGAvista: simulacaoPagamentoAVistaRequest2;
RespDC: simulacaoPagamentoAVistaResponse2;
xDataPrev : TXSDate;
xPercDesc, xDespesa, xHono, XMora : TXSDecimal;
vCT : Int64;
i, j :Integer;
Contrato : Array OF Mac003EntradaContratos;
// Contrato : Array_Of_Mac003EntradaContratos;
begin
xDataPrev := TXSDate.Create;
xDataPrev.AsDate := DateTimePicker1.DateTime;
xPercDesc := TXSDecimal.Create;
xDespesa := TXSDecimal.Create;
xHono := TXSDecimal.Create;
xMora := TXSDecimal.Create;
SimPGAvista := simulacaoPagamentoAVistaRequest2.create;
RespDC := simulacaoPagamentoAVistaResponse2.create;
SimPGAvista.codigoAssessoriaCyber:=100;
SimPGAvista.contaCorrente:=1;
SimPGAvista.codigoIdentificacaoOperador:='1';
SimPGAvista.tipoPessoa:=Edit14.Text;
SimPGAvista.cpfCnpj := StrToint64(Edit1.Text);
SimPGAvista.tipoOperacao:=5;
SimPGAvista.dataPrevisaoPgto := xDataPrev;
xPercDesc.DecimalString :=Edit15.Text;
SimPGAvista.porcentagemDescontoConcedido := xPercDesc;
{
xPercDesc := TXSDecimal.Create;
xDespesa := TXSDecimal.Create;
xHono := TXSDecimal.Create;
xMora := TXSDecimal.Create;
}
xDespesa.DecimalString :=Edit16.Text;
SimPGAvista.valorDespesa:=xDespesa;
xHono.DecimalString :=Edit17.Text;
SimPGAvista.porcentagemCobrancaHonorario:=xHono;
// SimPGAvista.contratos[0].codigoAplicativo := 'AUF';
{
vCT:= StrToint64(CdsContratosContrato.AsString);
xMora.DecimalString:=Edit19.Text;
SimPGAvista.contratos[0] := c
SimPGAvista.contratos[0].codigoAplicativo:= 'AUF';
SimPGAvista.contratos[0].nrContrato:=vCT;
SimPGAvista.contratos[0].taxaMora :=xMora;
}
// ntrato := Mac003EntradaContratos.create;
// Contrato[0].Create;
//Contrato:=Mac003EntradaContratos.create;
//SimPGAvista.contratos[0]:=Contrato;
Contrato[0].codigoAplicativo:='AUF';
vCT:= StrToint64(CdsContratosContrato.AsString);
Contrato[0].nrContrato:=vCT;
xMora.DecimalString:=Edit19.Text;
Contrato[0].taxaMora :=xMora;
RespDC := GetMacMensageria().simulacaoPagamentoAVista(SimPGAvista);
Edit23.Text:=RespDC.mensagemRetorno.mensagem;
Edit20.text:=RespDC.valorOperacao.DecimalString;
Edit13.text:=RespDC.valorHonorario.DecimalString;
Edit23.Text:=RespDC.mensagemRetorno.mensagem;
SimPGAvista.FREE;
RespDC.FREE;
End;
mas não sei como como relacionar o array que criei com o metodo (SimPGAvista);
tem mais alguma idéia?
e agora ele da um mensagem de erro tipo: Incompatib types: Array_Of_Mac003EntradaContratos end Dynamic array.
Gostei + 0
08/03/2010
Rodrigo Mourão
Gostei + 0
09/03/2010
Henrique Rocha
segue o link para o .pas
http://video.devmedia.com.br/discovirtual/18998/BCO.zip
como tenho que manter confidencialidade com meu cliente alterei algumas
informações como nome, ip e endereços...e também só funciona com ips cadastrados do outro lado.
Help...
Henrique
Gostei + 0
09/03/2010
Henrique Rocha
Rodrigo, consegui com um amigo meu o mesmo WebService só que em C Sharp, poderia dar
uma olhada para tentar fazer uma analogia para Delphi:
/// <summary>
/// O método SimularPagamentoAVista invoca o método XXXXMacMensageria.simulacaoPagamentoAVista do web service e recupera as informações fornecidas por ele.
/// </summary>
/// <param name="objTOSimularPagamentoAVista">O objeto TOSimularPagamentoAVista a ser transferido para o método.</param>
/// <param name="objCASimularPagamentoAVista">O objeto CASimularPagamentoAVista a ser recuperado do método.</param>
/// <returns>Retorna verdadeiro quando o método for executado com sucesso, ou falso caso contrário.</returns>
public bool SimularPagamentoAVista(TOSimularPagamentoAVista objTOSimularPagamentoAVista, out CASimularPagamentoAVista objCASimularPagamentoAVista)
{
strDescricaoErro = String.Empty;
CASimularPagamentoAVista _objCASimularPagamentoAVista = new CASimularPagamentoAVista();
try
{
if (!bolAtivado)
{
throw new Exception(msgServicoDesativado);
}
if (strURL == String.Empty)
{
throw new Exception(msgURLNaoEspecificada);
}
if (objTOSimularPagamentoAVista.CodigoAssessoriaCyber == 0 ||
objTOSimularPagamentoAVista.CodigoIdentificacaoOperador == 0 ||
objTOSimularPagamentoAVista.ContaCorrente == 0 ||
objTOSimularPagamentoAVista.CPFCNPJCliente == String.Empty ||
objTOSimularPagamentoAVista.TipoPessoa == String.Empty)
{
throw new Exception(msgFaltaDados);
}
System.Net.ServicePointManager.CertificatePolicy = new WebServicePolicy();
WebService.XXXXMacMensageria objXXXXMacMensageria = new WebService.XXXXMacMensageria();
objXXXXMacMensageria.Url = strURL;
objXXXXMacMensageria.Timeout = intWebServiceTimeout;
WebService.Mac003EntradaContratos[] objMac003EntradaContratos = new WebService.Mac003EntradaContratos[objTOSimularPagamentoAVista.Contratos.Rows.Count];
WebService.Mac003SaidaContratos[] objMac003SaidaContratos = null;
WebService.MensagemRetorno objMensagemRetorno = null;
for (int i = 0; i < objTOSimularPagamentoAVista.Contratos.Rows.Count; i++)
{
DataRow drContrato = objTOSimularPagamentoAVista.Contratos.Rows[i];
objMac003EntradaContratos[i] = new WebService.Mac003EntradaContratos();
objMac003EntradaContratos[i].codigoAplicativo = ConverterSiglaAplicativo(drContrato[CAContrato.SiglaAplicativo].ToString());
objMac003EntradaContratos[i].nrContrato = Convert.ToInt64(drContrato[CAContrato.NumeroContrato]);
objMac003EntradaContratos[i].taxaMora = Convert.ToDecimal(drContrato[CAContrato.TaxaMora]);
}
bool bolSpecified;
decimal ValorOperacao = 0;
decimal ValorOperacaoComDesconto = 0;
decimal ValorHonorarios = 0;
string IndicativoAlcadaDescontoConcedido = String.Empty;
string IndicativoAlcadaPorcentagemCobrancaHonorarios = String.Empty;
try
{
objXXXXMacMensageria.simulacaoPagamentoAVista
(
objTOSimularPagamentoAVista.CodigoAssessoriaCyber,
objTOSimularPagamentoAVista.ContaCorrente,
objTOSimularPagamentoAVista.CodigoIdentificacaoOperador.ToString(),
objTOSimularPagamentoAVista.TipoPessoa,
Convert.ToInt64(objTOSimularPagamentoAVista.CPFCNPJCliente),
objTOSimularPagamentoAVista.TipoOperacao,
objTOSimularPagamentoAVista.DataPrevisaoPagamento,
objTOSimularPagamentoAVista.TipoCobranca,
Convert.ToDecimal(objTOSimularPagamentoAVista.PorcentagemDescontoConcedido),
objTOSimularPagamentoAVista.ValorDespesa,
Convert.ToDecimal(objTOSimularPagamentoAVista.PorcentagemCobrancaHonorarios),
objMac003EntradaContratos,
out ValorOperacao,
out bolSpecified,
out ValorOperacaoComDesconto,
out bolSpecified,
out ValorHonorarios,
out bolSpecified,
out IndicativoAlcadaDescontoConcedido,
out IndicativoAlcadaPorcentagemCobrancaHonorarios,
out objMac003SaidaContratos,
out objMensagemRetorno
);
_objCASimularPagamentoAVista.MensagemRetorno.CodigoRetorno = objMensagemRetorno.returnCode;
_objCASimularPagamentoAVista.MensagemRetorno.CodigoMotivo = objMensagemRetorno.reasonCode;
_objCASimularPagamentoAVista.MensagemRetorno.Mensagem = objMensagemRetorno.mensagem;
}
catch (Exception excErroWS)
{
_objCASimularPagamentoAVista.MensagemRetorno.CodigoRetorno = -1;
_objCASimularPagamentoAVista.MensagemRetorno.CodigoMotivo = -1;
_objCASimularPagamentoAVista.MensagemRetorno.Mensagem = excErroWS.Message;
}
this.strMensagemRetorno = String.Format(msgMensagemRetorno,
_objCASimularPagamentoAVista.MensagemRetorno.CodigoRetorno,
_objCASimularPagamentoAVista.MensagemRetorno.CodigoMotivo,
_objCASimularPagamentoAVista.MensagemRetorno.Mensagem);
if (_objCASimularPagamentoAVista.MensagemRetorno.CodigoRetorno == 0)
{
foreach (WebService.Mac003SaidaContratos objMac003SaidaContrato in objMac003SaidaContratos)
{
DataRow drContrato = _objCASimularPagamentoAVista.Contratos.NewRow();
drContrato[CAContrato.GrupoProduto] = ConsultarGrupoProduto(objMac003SaidaContrato.codigoAplicativo);
drContrato[CAContrato.SiglaAplicativo] = ConsultarSiglaAplicativo(objMac003SaidaContrato.codigoAplicativo);
drContrato[CAContrato.IndicativoAlcadaTaxaMora] = ConverterIndicador(objMac003SaidaContrato.indicativoAlcadaTaxaMora);
drContrato[CAContrato.IndicativoElegibilidade] = ConverterIndicador(objMac003SaidaContrato.indicativoElegibilidade);
drContrato[CAContrato.NumeroContrato] = objMac003SaidaContrato.nrContrato.ToString().PadLeft(18, '0');
drContrato[CAContrato.QuantidadeDiasAtraso] = objMac003SaidaContrato.qtdeDiasAtraso;
drContrato[CAContrato.TaxaMora] = objMac003SaidaContrato.taxaMora;
drContrato[CAContrato.ValorOrigem] = objMac003SaidaContrato.valorOrigem;
drContrato[CAContrato.ValorAcordo] = objMac003SaidaContrato.valorParaAcordo;
drContrato[CAContrato.ValorTarifaLiquidacaoAntecipado] = objMac003SaidaContrato.valorTarifaLiquidacaoAntecipado;
_objCASimularPagamentoAVista.Contratos.Rows.Add(drContrato);
}
_objCASimularPagamentoAVista.ValorOperacao = ValorOperacao;
_objCASimularPagamentoAVista.ValorOperacaoComDesconto = ValorOperacaoComDesconto;
_objCASimularPagamentoAVista.ValorHonorarios = ValorHonorarios;
_objCASimularPagamentoAVista.IndicativoAlcadaDescontoConcedido = ConverterIndicador(IndicativoAlcadaDescontoConcedido);
_objCASimularPagamentoAVista.IndicativoAlcadaPorcentagemCobrancaHonorarios = ConverterIndicador(IndicativoAlcadaPorcentagemCobrancaHonorarios);
}
objCASimularPagamentoAVista = _objCASimularPagamentoAVista;
objTOSimularPagamentoAVista.LimparAtributos();
return true;
}
catch (Exception excErro)
{
//strDescricaoErro = String.Format(msgMensagemErro, excErro.Message, excErro.Source, excErro.StackTrace);
strDescricaoErro = excErro.Message;
_objCASimularPagamentoAVista.LimparAtributos();
objCASimularPagamentoAVista = _objCASimularPagamentoAVista;
objTOSimularPagamentoAVista.LimparAtributos();
return false;
}
}
Obrigado.
Henrique.
Gostei + 0
09/03/2010
Rodrigo Mourão
Att.
Gostei + 0
11/03/2010
Rodrigo Mourão
Eu repoduzi aqui e funcionou, digo compilou porem nao da para testar. O que eu reparei e que no codigo que voce postrou vc tem uma variavel contrato do tipo Array OF Mac003EntradaContratos veja:
Olá, Rodrigo,
não funcionou
tentei desta forma:
procedure TForm1.SBpgavClick(Sender: TObject);
var
SimPGAvista: simulacaoPagamentoAVistaRequest2;
RespDC: simulacaoPagamentoAVistaResponse2;
xDataPrev : TXSDate;
xPercDesc, xDespesa, xHono, XMora : TXSDecimal;
vCT : Int64;
i, j :Integer;
Contrato : Array OF Mac003EntradaContratos;
// Contrato : Array_Of_Mac003EntradaContratos;
MAs na verdade nao tem que ser do tipo array e sim do tipo Mac003EntradaContratos conforme eu postei no dia 8/3/2010 3:12:44 PM
Voce cria um contrato e coloca na lista de contratos. Array nao se instancia, nao em delphi. Entao o conceito é.
Cria um objeto contrato, passa os valores e colocar no array. O seu amigo de C# fez isso dentro de um for. REpare que ele cria contrato e coloca dentro do array.
Revise seu codigo seguindo este conceito e volte a me informar.
Att.
Gostei + 0
15/03/2010
Henrique Rocha
Obrigado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)