ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Iniciar Array de Objetos

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
erictrespontas
Novato
Novato


Registrado: Segunda-Feira, 6 de Janeiro de 2020
Mensagens: 5

MensagemEnviada: Ter Fev 11, 2020 9:04 am    Assunto: Iniciar Array de Objetos Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Fev 11, 2020 9:22 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
erictrespontas
Novato
Novato


Registrado: Segunda-Feira, 6 de Janeiro de 2020
Mensagens: 5

MensagemEnviada: Ter Fev 11, 2020 9:33 am    Assunto: Iniciar Array de Objetos Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Fev 11, 2020 10:05 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
erictrespontas
Novato
Novato


Registrado: Segunda-Feira, 6 de Janeiro de 2020
Mensagens: 5

MensagemEnviada: Ter Fev 11, 2020 5:27 pm    Assunto: Iniciar Array de Objetos Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Fev 12, 2020 10:10 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
erictrespontas
Novato
Novato


Registrado: Segunda-Feira, 6 de Janeiro de 2020
Mensagens: 5

MensagemEnviada: Qua Fev 12, 2020 2:58 pm    Assunto: Iniciar Array de Objetos Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB