Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JonatasFn

Verificar registros um por um

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.