quarta-feira, 27 de novembro de 2013

Enviar e-mail através de Trigger + Função (Oracle) em uma rotina de apontamento de paradas no sistema iFrota.

Olá, no sistema iFrota existe a opção de apontar as paradas que ocorrem, tanto na Industria quanto na Agrícola.

Foi solicitado ao TI que gostariam de receber em seus smartphones quando ocorresse alguma parada na Empresa por qualquer motivo que fosse.

Pois bem, como já era apontado as "Paradas" no sistema iFrota, Caminho.: iFrota.exe > Menu Tabelas > Paradas.



Foi criado uma trigger + procedure para que realizasse a tarefa.

Procedure.: 

create or replace procedure send_email_ifrota (subject varchar, message varchar) as
 BEGIN
 Declare
 SendorAddress    varchar2(30):= 'informativo@emailquerecebera.com.br';
 ReceiverAddress1 varchar2(35):= 'fulano1@emailquerecebera.com.br';
 ReceiverAddress2 varchar2(35):= 'fulano2@emailquerecebera.com.br';
 ReceiverAddress3 varchar2(35):= 'fulano3@emailquerecebera.com.br';
 ReceiverAddress4 varchar2(35):= 'fulano4@emailquerecebera.com.br';
 ReceiverAddress5 varchar2(35):= 'fulano5@emailquerecebera.com.br';
 ReceiverAddress6 varchar2(35):= 'fulano6@emailquerecebera.com.br';
 ReceiverAddress7 varchar2(35):= 'fulano7@emailquerecebera.com.br';

 EmailServer varchar2(30) := '192.168.XXX.Y';
 Port number := 25;
 conn UTL_SMTP.CONNECTION;
 crlf VARCHAR2(2):= CHR(13) || CHR(10);
 mesg VARCHAR2(4000);
 BEGIN
 conn:= utl_smtp.open_connection(EmailServer,Port);
 utl_smtp.helo(conn,EmailServer);
 utl_smtp.mail(conn,SendorAddress);
 utl_smtp.rcpt(conn,ReceiverAddress1);
 utl_smtp.rcpt(conn,ReceiverAddress2);
 utl_smtp.rcpt(conn,ReceiverAddress3);
 utl_smtp.rcpt(conn,ReceiverAddress4);
 utl_smtp.rcpt(conn,ReceiverAddress5);
 utl_smtp.rcpt(conn,ReceiverAddress6);
 utl_smtp.rcpt(conn,ReceiverAddress7);
 mesg:=
 'From:'||SendorAddress|| crlf ||
 'Subject: '||subject|| crlf ||
 'Cc: '||ReceiverAddress2 || CHR(13) || ReceiverAddress3 || CHR(13) || ReceiverAddress4 || CHR(13) || ReceiverAddress5 || CHR(13) || ReceiverAddress6 || CHR(13) ||
 'To: '||ReceiverAddress1 || crlf || '' || crlf || message;
 utl_smtp.data(conn,mesg);
 utl_smtp.quit(conn);
 END;
 END;

Trigger.:

CREATE OR REPLACE TRIGGER ai_parada_beta
AFTER INSERT OR UPDATE
ON Ifrota.Paradas
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
    V_MENSAGEM      VARCHAR2(900);
    V_TP_PARADAS    VARCHAR2(50);
    V_RECURSO       VARCHAR2(50);
    PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN
   BEGIN
    SELECT TP.NOME
      INTO V_TP_PARADAS
    FROM TIPO_PARADAS TP
    WHERE TP.BASE = :NEW.BASE
      AND TP.CODIGO = :NEW.TIPO;
   EXCEPTION
     WHEN OTHERS THEN
      V_TP_PARADAS := 'TESTE';
   END;

  BEGIN
    SELECT R.NOME
      INTO V_RECURSO
    FROM RECURSOS R
    WHERE R.BASE = :NEW.BASE
      AND R.CODIGO = :NEW.RECURSO;
  EXCEPTION
     WHEN OTHERS THEN
      V_RECURSO := 'TESTE';
  END;

   If (:new.base is not null) Then
        V_MENSAGEM :=( 'Data Hora Inicio......: ' || to_char(:new.data_hora_inicio,'dd/mm/yyyy hh24:mi:ss') || CHR(13) || CHR(10) ||
                       'Data Hora Termino: ' || to_char(:New.data_hora_termino,'dd/mm/yyyy hh24:mi:ss')|| CHR(13) || CHR(10) ||
                       'Tipo............: ' || V_TP_PARADAS    || CHR(13) || CHR(10) ||
                       'Motivo.......: ' || to_char((CASE WHEN :New.motivo = 1 THEN 'PARADA' ELSE 'REDUCAO' END)) || CHR(13) || CHR(10) ||
                       'Origem......:  ' || to_char((CASE WHEN :New.origem = 1 THEN 'INDUSTRIA' ELSE 'AGRICOLA' END))  || CHR(13) || CHR(10) ||
                       'Recurso.....:  ' || to_char(V_RECURSO)  || CHR(13) || CHR(10) ||
                       'Observacao..: ' || :new.observacao        || CHR(13) || CHR(10) ||
                       'Responsavel.: ' || :new.responsavel       || CHR(13));
   End If;
   Send_email_ifrota('Aviso de Parada ou Reducao ( Empresa S/A - Álcool e Açúcar )', V_MENSAGEM);
End;

Pode-se observar, que ao cadastrar a parada na Tela do iFrota, foi recebido o e-mail com as informações da parada e o tempo que ocorreu. Com isso os gestores recebem em seus smartphones e tomam as medidas necessárias para evitar maiores prejuízos.



Nenhum comentário:

Postar um comentário