JonatasFn 0 Denunciar post Postado Julho 11, 2012 Boa tarde pessoal, estou criando um sistema que tem por função basicamente enviar emails de aviso para funcionarios da empresa. A rotina de envio do email esta OK. Mas como ainda náo tenho muito conhecimento em Delphi nao sei como fazer para que o sistema faça isso automaticamente. Basicamente funcionará assim, o usuário ira cadastrar as seguintes informações: nome email assunto status O que eu quero basicamente é criar uma rotina que quando eu clique em um button verifique quais os registros estao com status "ATIVO" e envie um email para os endereços de email desses registros. Eu até fiz esta rotina enviando um unico email para todos os registros que estivessem com status "ATIVO". Funciona legal, os usuários recebem o email, mas todos recebem um email igual, mas agora preciso que envie um email por vez para que eu possa colocar o assunto do email do respectivo usuário. Lembrando que a rotina de envio do email eu tenho, só me falta a idéia de como verificar 1 registro por vez e enviar o email caso o status seja "ATIVO". Compartilhar este post Link para o post Compartilhar em outros sites
FK. 0 Denunciar post Postado Julho 12, 2012 Esse conjunto de dados está num banco de dados? Como você está agrupando esses registros em sua aplicação? Com objetos? ClientDataSet? Você poderia usar uma classe que represente um único usuário, e outra que represente um conjunto de usuários, com uma propriedade count para indexa-los. unit uUsuarios; interface type TUsuarioEmail = class( TObject ) protected Fnome: string; Femail: string; Fassunto: string; Fstatus: string; // Poderia ser boolean também! public property status: string read Fstatus; constructor create( nome, email, assunto, status: string ); function isAtivo( ativo: string ): boolean; end; TUsuariosEmail = class( TUsuarioEmail ) private Fusuarios: array of TUsuarioEmail; Fcount: integer; public property count: integer read Fcount; function getUsuario( index: integer ): TUsuarioEmail; procedure addUsuario( usuario: TUsuarioEmail ); constructor create(); end; implementation { TUsuarioEmail } constructor TUsuarioEmail.create( nome, email, assunto, status: string ); begin Self.Fnome := nome; Self.Femail := email; Self.Fassunto := assunto; Self.Fstatus := status; end; { TUsuariosEmail } constructor TUsuariosEmail.create(); begin Self.Fcount := 0; end; function TUsuariosEmail.getUsuario( index: integer ): TUsuarioEmail; begin result := nil; if ( Assigned( Self.Fusuarios[ index ] ) ) then result := Self.Fusuarios[ index ]; end; procedure TUsuariosEmail.addUsuario( usuario: TUsuarioEmail ); begin Self.Fcount := Self.Fcount + 1; SetLength( Self.Fusuarios, Self.Fcount ); Self.Fusuarios[ Self.Fcount -1 ] := usuario; end; function TUsuarioEmail.isAtivo( ativo: string ): boolean; begin if ativo = 'ATIVO' then result := true else result := false; end; end. Agora como usa-lá (Não esqueça de utilizar a unit uUsuario em sua aplicação) procedure TForm1.Button1Click(Sender: TObject); var usuarios: TUsuariosEmail; usuario: array [0..2] of TUsuarioEmail; i: Integer; begin // Cria um array de usuários usuarios := TUsuariosEmail.create(); // Cria um usuário usuario[ 0 ] := TUsuarioEmail.create( 'Fernando', 'email@dominio.com', 'assunto', 'ATIVO' ); // Atribui um usuário ao array de usuários usuarios.addUsuario( usuario[ 0 ] ); // Repete o processo... usuario[ 1 ] := TUsuarioEmail.create( 'JonatasFn', 'email@dominio.com', 'assunto', 'ATIVO' ); usuarios.addUsuario( usuario[ 1 ] ); // Cria outro usuário, mas esse com status INATIVO usuario[ 2 ] := TUsuarioEmail.create( 'Outra pessoa', 'email@dominio.com', 'assunto', 'INATIVO' ); usuarios.addUsuario( usuario[ 2 ] ); // Um exemplo de uso do método isAtivo(), iterando pelos objetos for i := 0 to usuarios.count -1 do begin usuario[ i ] := usuarios.getUsuario( i ); if Assigned( usuario[ i ] ) then begin if usuario[ i ].isAtivo( usuario[i].status ) then showmessage( usuario[ i ].status ) // Realiza os procedimentos necessários para esse usuário que tem o status como ATIVO else // Realiza os procedimentos necessários para esse usuário que tem o status como INATIVO ShowMessage( usuario[ i ].status ); end; end; end; Agora caso você esteja buscando os dados de um clientDataSet por exemplo, basta você seguir uma lógica simples, isso é, iterar por todos os registros do clientDataSet, e para cada registro dele, crie um novo objeto do tipo usuário (TUsuarioEmail), em seguida, armazene esse usuário no array de usuários (TUsuariosEmail) e então você itera por todos os usuários desse array, verificando se ele é ativo ou não, e com base nisso, você envia um email para o usuário com status ativo, e um email diferente para os usuários com status inativo. É uma forma que acredito que resolverá seu problema e você estará usando POO, que é muito útil. Compartilhar este post Link para o post Compartilhar em outros sites