 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
erictrespontas Novato

Registrado: Segunda-Feira, 6 de Janeiro de 2020 Mensagens: 5
|
Enviada: Ter Fev 11, 2020 9:04 am Assunto: Iniciar Array de Objetos |
|
|
Bom dia pessoal. Estou um pouco enferrujado no Delphi.. Estou retornando ao desenvolvimento mas estou me deparando com um problema aqui. Não estou conseguindo atribuir a um array de objetos. Conseguem me ajudar por favor?
Código: |
procedure TfrmIntegra.btnIntegrarClick(Sender: TObject);
var
integracaoKraft: IIntegradorOncoprod;
cliEntrada : ClienteEntrada;
endEntrada: EnderecoEntrada;
contEntrada: ContatoEntrada;
retornoCliente : RetornoClienteMsg;
createdDate: TXSDateTime;
x : ClientesEntrada;
begin
cliEntrada := ClienteEntrada.Create;
endEntrada := EnderecoEntrada.Create;
contEntrada := ContatoEntrada.Create;
cliEntrada.clienteCPF := '59329283012';
cliEntrada.clienteCnpj := '';
cliEntrada.clienteEmailComercial := 'teste@hotmail.com';
cliEntrada.clienteIE := '';
endEntrada.clienteEndereco := 'RUA TESTE, 123';
endEntrada.clienteEnderecoBairro := 'CAMPOS ELISEOS';
endEntrada.clienteEnderecoCEP := '01218-011';
contEntrada.clienteContatoCelular := '11987654435';
contEntrada.clienteContatoTelefone := '1133333333';
cliEntrada.Enderecos[0] := endEntrada ;
cliEntrada.Contatos[0] := contEntrada;
x.Cliente[0] := cliEntrada;
try
retornoCliente := integracaoKraft.IncluirCliente(x);
ShowMessage('funfou');
except
on e: Exception do
ShowMessage(e.Message);
end;
end;
|
o erro está quando tento atribuir os itens abaixo
cliEntrada.Enderecos[0] := endEntrada ;
cliEntrada.Contatos[0] := contEntrada;
cliEntrada.Enderecos por exemplo é um Array de ClienteEntrada.
Agradeço desde já pela ajuda.. Espero em breve estar contribuindo na comunidade |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Fev 11, 2020 9:22 am Assunto: |
|
|
Bom dia,
Como estão declarados esses arrays? Se forem arrays dinâmicos é necessário utilizar o SetLength para alocar espaço para as ocorrências antes de utilizar o array. Ex:
Código: | SetLength(cliEntrada.Enderecos, 3); |
Se for outro problema, acho melhor você postar a mensagem de erro que é exibida.
Espero que ajude
Editado pela última vez por imex em Seg Dez 04, 2023 11:59 am, num total de 1 vez |
|
Voltar ao Topo |
|
 |
erictrespontas Novato

Registrado: Segunda-Feira, 6 de Janeiro de 2020 Mensagens: 5
|
Enviada: Ter Fev 11, 2020 9:33 am Assunto: Iniciar Array de Objetos |
|
|
Obrigado imex pelo retorno.
Tinha tentado dessa forma mas não deixa compilar dando o erro:
Código: |
Constant object cannot be passed as var parameter
|
Eu estou consumindo isso de uma unit gerada através de um wsdl feito em c#. essa propriedade está descrita da seguinte forma:
Código: |
prop ClienteEntrada.Enderecos: ArrayOfEnderecoEntrada
|
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Fev 11, 2020 10:05 am Assunto: |
|
|
Não sei se vai funcionar mas experimente mais ou menos dessa forma:
Código: | var
// ...
enderecos: ArrayOfEnderecoEntrada;
// ...
begin
// ...
SetLength(enderecos, 1);
enderecos[0] := EnderecoEntrada.Create;
enderecos[0].clienteEndereco := 'RUA TESTE, 123';
enderecos[0].clienteEnderecoBairro := 'CAMPOS ELISEOS';
enderecos[0].clienteEnderecoCEP := '01218-011';
cliEntrada.Enderecos := enderecos;
// ... |
Espero que ajude |
|
Voltar ao Topo |
|
 |
erictrespontas Novato

Registrado: Segunda-Feira, 6 de Janeiro de 2020 Mensagens: 5
|
Enviada: Ter Fev 11, 2020 5:27 pm Assunto: Iniciar Array de Objetos |
|
|
Boa tarde.. Segui sua solução e preenchi da seguinte forma.
Código: |
procedure TfrmIntegra.btnIntegrarClick(Sender: TObject);
var
createdDate: TXSDateTime;
integracaoKraft: IIntegradorOncoprod;
x : ClientesEntrada;
cliEntrada : ClienteEntrada;
arrayCliEntrada : ArrayOfClienteEntrada;
endEntrada: EnderecoEntrada;
arrayEndEntrada : ArrayOfEnderecoEntrada;
contEntrada: ContatoEntrada;
arrayContEntrada : ArrayOfContatoEntrada;
retornoCliente : RetornoClienteMsg;
begin
createdDate := TXSDatetime.Create;
createdDate.AsDateTime := XMLTimeToDateTime('0001-01-01T00:00:00-00:00', True);
cliEntrada := ClienteEntrada.Create;
cliEntrada.clienteCPF := '59329283012';
cliEntrada.clienteCnpj := '';
cliEntrada.clienteEmailComercial := 'teste@hotmail.com';
cliEntrada.clienteIE := '';
cliEntrada.clienteIsentoIE := false;
cliEntrada.clienteRG := '';
cliEntrada.clienteRGDataEmissao := createdDate;
cliEntrada.clienteRGOrgao := '';
cliEntrada.clienteRazaoSocial := 'MARCELO RESENDE FILHO';
cliEntrada.clienteTipoPessoa := 'F';
cliEntrada.condicaoPagamentoId := '';
cliEntrada.medicoId := '';
cliEntrada.sistemaEntrada := 'VORTICE';
cliEntrada.transportadoraId := '';
//***Endereco de Entrega***
endEntrada := EnderecoEntrada.Create;
endEntrada.clienteEndereco := 'RUA TESTE, 123';
endEntrada.clienteEnderecoBairro := 'CAMPOS ELISEOS';
endEntrada.clienteEnderecoCEP := '01218-011';
endEntrada.clienteEnderecoCidade := 'TRES PONTAS';
endEntrada.clienteEnderecoComplemento := 'AP';
endEntrada.tipoEnderecoId := 'PADRÃO';
endEntrada.ufId := 'MG';
SetLength(arrayEndEntrada, length(arrayEndEntrada)+1);
arrayEndEntrada[0] := endEntrada;
cliEntrada.Enderecos := arrayEndEntrada;
//*************************
//***Contato do Cliente***
contEntrada := ContatoEntrada.Create;
contEntrada.clienteContatoCelular := '11987654435';
contEntrada.clienteContatoRamal := '222';
contEntrada.clienteContatoTelefone := '1133333333';
SetLength(arrayContEntrada, length(arrayContEntrada)+1);
arrayContEntrada[0] := contEntrada;
cliEntrada.Contatos := arrayContEntrada;
//*************************
SetLength(arrayCliEntrada, length(arrayCliEntrada)+1);
arrayCliEntrada[0] := cliEntrada;
x := ClientesEntrada.Create;
x.Cliente := arrayCliEntrada;
try
retornoCliente := integracaoKraft.IncluirCliente(x);
ShowMessage('funfou');
except
on e: Exception do
ShowMessage(e.Message);
end;
end;
Erro não deu ao preencher os objetos mas na chamada da integração IncluirCliente deu um access violation... agora não sei se o problema está nesse parâmeto pois vendo o valor está aparecendo como uma referência..
|
([], ($2FD28BC), True, ($2FD2864), True, '59329283012', True, '', True, 'teste@hotmail.com', True, '', True, False, True, '', True, $2FD27C8, True, '', True, 'MARCELO RESENDE FILHO', True, 'F', True, '', True, '', True, 'VORTICE', True, '', True)
Código: |
seriam o ($2FD28BC) e ($2FD2864)
|
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Fev 12, 2020 10:10 am Assunto: |
|
|
Não tenho experiência nesse tipo de caso, mas experimente deixar o código para criação do objeto conforme postei. Ex:
Código: | enderecos[0] := EnderecoEntrada.Create;
enderecos[0].clienteEndereco := 'RUA TESTE, 123'; |
no lugar de
Código: | endEntrada := EnderecoEntrada.Create;
endEntrada.clienteEndereco := 'RUA TESTE, 123';
// ...
arrayEndEntrada[0] := endEntrada; |
Outro teste seria utilizar a função Copy para carregar os dados do array. Ex:
Código: | cliEntrada.Enderecos := Copy(arrayEndEntrada); |
Espero que ajude |
|
Voltar ao Topo |
|
 |
erictrespontas Novato

Registrado: Segunda-Feira, 6 de Janeiro de 2020 Mensagens: 5
|
Enviada: Qua Fev 12, 2020 2:58 pm Assunto: Iniciar Array de Objetos |
|
|
Boa tarde imex.
Estou achando que o problema é outro.. a primeira forma que mandei está correta.. o problema é que eu preencho o objeto mas ele chega como nulo no webservice.
Pedi para fazerem um método no webservice com uma classe e só uma propriedade, preenchendo a classe e enviando ele chega nulo lá pois ele capturou o recebimento... passando como string ele chega corretamente.. agora não sei o que fazer.. tem alguma pista?
Caso alguém tenha interesse em ajudar segue o webservice
http://10.41.14.44:8085/KraftSalesIntegradorOncoprod_Homolog/IntegradorOncoprod.svc?wsdl
o método é o RetornarMsgCustom
a chamada é essa abaixo
Código: |
procedure TfrmIntegra.btnMensagemClick(Sender: TObject);
var
integracaoKraft: IIntegradorOncoprod;
cliEntradaCustom : ClienteEntradaCustom;
valor : string;
begin
integracaoKraft := GetIIntegradorOncoprod();
cliEntradaCustom := ClienteEntradaCustom.Create;
cliEntradaCustom.sistemaEntrada := 'TESTE';
try
valor := integracaoKraft.RetornarMsgCustom(cliEntradaCustom);
ShowMessage(valor);
except
on e: Exception do
ShowMessage(e.Message);
end;
end;
|
imex, muito obrigado pelo apoio recorrente. |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|