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
- Registrar o template em uma preferência
- Criar uma rotina customizada para coletar as informações, gerar o documento e envia-lo por e-mail
- Criar um "event-listener" para disparar a rotina customizada no evento desejado
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:
- Tipo de implementação: Groovy Scripting Engine
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:
- Preferência: CUSTOM.ENVIO_CONTRATO.EVENT_LISTENER
- Valor: PROJET.ATIVIDADES.POS_UPDATE : CUSTOM.ENVIO_CONTRATO.ROTINA
- Descrição: Envio de e-mail com o contrato
- Domínio: ADSRT.TEXT_LONG
Para maiores detalhes sobre envent-listeners, acesse Eventos de sistema