Sistema de gestão ELIGO

Envio automático de documentos em eventos do sistema

ELIGO.FAQ-149583
Caso se deseje enviar automaticamente, a partir de algum evento do sistema, um ou mais e-mails com documentos anexos preenchidos dinamicamente com informações obtidas no sistema, pode-se proceder de acordo com o roteiro a seguir:

Criar um documento template

Para produzir o documento que será enviado em anexo, podemos usar um editor de textos como, por exemplo, o Microsoft Word ou Open Office. Estes documentos deverão ser preparados para que seu conteúdo possa ser dinamicamente alterado com informações obtidas no sistema. Normalmente isso é realizado através de mecanismos de campos customizados. A forma com que estes campos são criados, varia um pouco de editor para editor. Veja a documentação específica para entender como isso deve ser feito no seu editor preferido.

O uso de um formato no template não define que o anexo será disponibilizado neste mesmo formato. Nas aplicações mais típicas, o template é um arquivo ".docx" ou ".odt" e o anexo no e-mail será um ".pdf".

Para maiores detalhes em como criar um template, veja Templates de documentos.

Atenção
No exemplo abaixo, usamos o método asMap() das entidades para registrar TODOS os atributos da entidade no template, por isso é importante salientar que as variáveis são registradas com os nomes dos atributos em maiúsculo.

Registrar o template em uma preferência

Para poder utilizar um template, o seu arquivo deverá estar registrado no sistema. A forma mais simples de fazer isso é criando uma preferência do tipo ADSRT.ATTACHED_FILE. Apesar do nome da preferência ser livre, desde que não se sobreponha à alguma já em uso, sugerimos que seja algo tipo:
CUSTOM.ENVIO_CONTRATO.TEMPLATE
Onde "ENVIO_CONTRATO" remete ao que estamos fazendo e as palavras "CUSTOM" e "TEMPLATE" seriam fixas.

Para cadastrar a preferência, basta acessar a interface Preferências e criar um registro assim:
[img:pref-template]

Depois de cadastrada, basta fazer o upload do template:
[img:upload-template]

Criar uma rotina customizada

A seguir será necessário criar uma rotina que será responsável em capturar as informações, colocar essas informações no template e em seguida enviar por e-mail.

Acesse a interface Operações customizadas e cadastre a rotina. Novamente, o nome é livre mas sugere-se utilizar o mesmo que foi utilizado para a preferência, apenas mudando o final .TEMPLATE para .ROTINA:
CUSTOM.ENVIO_CONTRATO.ROTINA

A implementação pode ser feita em qualquer linguagem script que esteja sendo suportada pelo Eligo. Sugerimos utilizar Groovy:

A implementação em Groovy seguiria o seguinte modelo:
import br.com.eligo.ent.EntAtividades;
import br.com.telescope.adsrt.dom.DomAttachedFile;
import br.com.telescope.adsrt.lib.AdsException;
import br.com.telescope.adsrt.lib.BaseRuntime;
import br.com.telescope.t2.config.Config;
import br.com.telescope.t2.exception.UnexpectedException;
import br.com.telescope.template.Template;
import br.com.telescope.util.MailMessage;
import br.com.telescope.util.MailSender;
import br.com.telescope.util.WebFileTemp;
import java.io.File;
import java.io.IOException;

try {

   // Pega o objeto que disparou o evento
   EntAtividades ativ = (EntAtividades) ctx.getEvent().getObject();

   // Verifica a condição para enviar o documento
   if (ativ.getTitulo().isModified()) {
        
       // Pega o arquivo que será usado como template
       DomAttachedFile tempFile = new DomAttachedFile();
       tempFile.setValue(Config.getInstance().get("CUSTOM.ENVIO_CONTRATO.TEMPLATE"));
       File file = new File(tempFile.getFilePath());
       Template template = br.com.telescope.template.Template.newInstance(file);
       
       // Registra as variáveis permitidas
       template.getProperties().putAll(ativ.findTipoAtividade().asMap());
       template.getProperties().putAll(ativ.asMap());
       
       // Gera o documento
       WebFileTemp temp = WebFileTemp.createInstance("pdf");
       template.generate(temp.getFile());
       
       // Monta a mensagem a ser enviada por e-mail
       MailMessage msg = MailMessage.create("Corpo da mensagem")
           .attach(temp.getFile());

       // Envia o e-mail
       MailSender sender = new MailSender();
       sender.to("destino@eligo.com.br")
           .subject("Atividade " + ativ.valueOfAtividade())
           .message(msg)
           .run();
   }
   
} catch (IOException ex) {
    throw new UnexpectedException(ex);
}

Criar um listener para disparar a rotina no evento desejado

Para criar um listener que dispare a rotina, basta identificar o evento e configurar uma preferência, tal como:

Para maiores detalhes sobre envent-listeners, acesse Eventos de sistema