A partir da versão 1.2, além das notificações padrão do Fluig, é possível criar novos tipos de notificações customizadas, através da API de Notificações do produto. É possível criar aplicativos, widgets, etc que criem e enviem notificações customizadas, além de fazer este processo através de aplicações externas, utilizando a API Pública do Fluig. Este tutorial tem o objetivo de mostrar passo-a-passo como criar um aplicativo que cria uma notificação customizada e envia para os usuários do tenant. Para fazer este mesmo processo através da API Pública do Fluig, consulte a documentação clicando aqui.

Projeto de exemplo

Para facilitar o entendimento e desenvolvimento deste tutorial, foi gerado um projeto de exemplo. Neste projeto, foi implementado um aplicativo que cria uma notificação customizada, simulando um aviso do RH Online: "Seu holerit já está disponível". Este projeto é apenas um exemplo, não foi implementada nenhuma integração real com o sistema RH Online. Para testar o projeto, realizar os seguintes passos:

Não executar estes passos em produção!

  1. Baixar o projeto: Clique aqui
  2. Compilar o projeto (é um projeto padrão maven, para compilar, executar "mvn clean install" na raíz do projeto)
  3. Fazer deploy do arquivo "/alert-creator-sample-server/target/alert-creator-sample-server.ear" em um servidor com o Fluig instalado
Feitos estes passos, o sistema deve gerar um novo tipo de alerta. É possível verificar que o evento foi criado corretamente através da tela de configuraçoes de notificações. Deve aparecer um novo agrupamento chamado "Notificações de RH", com um tipo de notificação, conforme imagem a seguir:

 

Em um ambiente com muitos usuários, pode haver um pequeno delay entre o deploy do aplicativo e a criação do evento na tela de configurações.

Após a instalação do aplicativo, o sistema enviará de 2 em 2 minutos uma notificação fake informando o usuário que o holerit está disponível no RH Online, conforme a imagem a seguir:

 

É recomendada a leitura de todo este material, mesmo se o desenvolvedor utilizar como base o projeto de exemplo. Este tutorial apresenta conceitos importantes para trabalhar corretamente com notificações dentro do Fluig.

 

Entendendo os conceitos para criação de notificações customizadas

Módulos de Notificações:

Os módulos de notificação são apenas agrupadores, para que as notificações semelhantes se apresentem agrupadas para o usuário. Os módulos padrão do Fluig são: Colaboração (notificações de apoiar, comentar, etc), Documentos (notificações de indicação de leitura, atualização de versão, etc), Processos (notificações de movimentação de processo, tarefas atrasadas, etc) e Portal (notificações de alteração no layout de páginas, etc).

É possível criar novos módulos de notificações. No projeto exemplo, é criado um novo módulo chamado "Notificações de RH".

Eventos de Notificações:

Antes de criar notificações customizadas, é importante que fique claro o conceito de "Eventos de Notificações". Um evento é uma representação de alguma ação que pode gerar notificações no Fluig. O evento contém todas as configurações das notificações. Por exemplo, o evento de notificação "LIKE" possui o formato padrão de todas as notificações do tipo "Fulano curtiu o post 'Olha que post bacana...". Através do evento o usuário pode configurar o recebimento de notificações. Por exemplo: eu posso configurar o recebimento das notificações do tipo "SHARE" por e-mail e SMS, as notificações do tipo "LIKE" apenas pela Central de Notificações do Fluig, e não receber nenhuma notificação do tipo "FOLLOW_REQUEST_ACCEPTED". Para configurar este recebimento, o usuário deve acessar a tela de configurações de notificações:

Para criar notificações customizadas, é necessário criar novos eventos de notificações. No projeto exemplo, é criado um novo evento chamado "Holerit disponível no RH online".

Atributos de Eventos de Notificações:

Como dito anteriormente, um evento contém as configurações das notificações. Estas configurações são:

 

Notificações:

As notificações devem ser criadas obrigatóriamente com um evento associado. Desta forma a Central de Notificações poderá fazer o gerenciamento de criação, envio e exibição da notificação. As notificações criadas contém alguns objetos associados, que são:

Ações de Notificações:

Uma notificação pode disponibilizar uma ou mais ações. Estas ações são informadas no momento da criação da notificação. As ações são individuais por notificação, não sendo associadas ao evento relacionado a ela. As ações possuem os seguintes atributos:

Utilizando a API de Notificações para criar eventos customizados

Existem duas formas de utilização da API de Notificações do Fluig: através do módulo "foundation-alert-api", interno ao Fluig e através da API Pública. Este tutorial mostra um exemplo utilizando-se o módulo "foundation-alert-api". Para mais informações sobre a API Pública, clique aqui.

Para criação de um aplicativo interno ao Fluig que utilize a API de Notificações, é necessário criar um projeto Java (padrão maven) e adicionar o seguinte trecho de código no arquivo "pom.xml":

<dependency>
    <groupId>com.fluig</groupId>
    <artifactId>foundation-alert-api</artifactId> 
    <version>1.2.0-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>
Cadastrando módulos de Notificações:

Para criação de um novo módulo de notificações, é necessário realizar uma chamada ao método "registerModule", da interface "com.totvs.technology.foundation.alert.service.AlertModuleService". Um exemplo de chamada deste método segue abaixo:

@Singleton(mappedName = "MyModuleRegister", name = "MyModuleRegister")
public class ModuleRegister {

	@EJB(lookup = AlertModuleService.JNDI_REMOTE_NAME)
	private AlertModuleService alertModuleService;


	public void registerModule() {
		
		/*
		 * Cria um novo módulo de notificações. Os módulos padrão do Fluig são:
		 * 1. DOCUMENT
		 * 2. PROCESSES
		 * 3. PORTAL
		 * 4. COLABORATION
		 * 
		 * Caso o novo evento de notificações se encaixe em um destes módulos, 
		 * não é necessário criar um novo.
		 */
		final AlertModuleVO myModule = alertModuleService.registerModule(
				"RH_MODULE", "Notificações do RH", myTenantId);
				
	}
}

Os parâmetros para execução do método são:

  1. moduleKey: Chave única de identificação do módulo
  2. description: É a descrição do módulo. Pode ser um texto plano ou uma chave para tradução. Para que a tradução funcione, a chave deve estar previamente cadastrada no serviço I18n, no bundle "foundation_alert".
  3. tenantId: Id do tenant para qual o módulo está sendo criado.
Cadastrando eventos de Notificações:

Para criação de um novo evento de notificações, é necessário realizar uma chamada ao método "createEvent", da interface "com.totvs.technology.foundation.alert.service.AlertEventService". Um exemplo de chamada deste método segue abaixo:

@Singleton(mappedName = "MyEventRegister", name = "MyEventRegister")
public class EventRegister {
	
	@EJB(lookup = AlertEventService.JNDI_REMOTE_NAME)
	private AlertEventService alertEventService;
	

	public void registerEvent() {
				
		alertEventService.createEvent(
				"MY_EVENT",
				Boolean.FALSE,
				"Meu evento customizado",
				"criou",
				"criaram",
				"/myapp/myimg.jpg",
				myModule.getId(),
				Boolean.TRUE,
				Boolean.TRUE,
				Boolean.FALSE,
				Boolean.FALSE,
				tenantId);
		
	}
}

Os parâmetros para execução do método são:

  1. eventKey - String única que representa o evento no Fluig.
  2. required - Indica se o evento é requerido. Caso seja, o usuário não conseguirá configurar para não receber notificações do evento.
  3. descriptionKey - Descrição do evento. Pode ser um texto plano ou uma chave para obter descrição traduzida no I18n. Caso queira utilizar a tradução, a chave deve estar previamente cadastrada no I18n, no bundle "foundation_alert".
  4. singleDescriptionKey - Descrição da ação feita por um usuário. Pode ser um texto plano ou uma chave para obter descrição traduzida no I18n. Caso queira utilizar a tradução, a chave deve estar previamente cadastrada no I18n, no bundle "foundation_alert".
  5. groupDescriptionKey - Descrição da ação feita por por vários usuários. Pode ser um texto plano ou uma chave para obter a descrição traduzida no I18n. Caso queira utilizar a tradução, a chave deve estar previamente cadastrada no I18n, no bundle "foundation_alert".
  6. eventIcon - Ícone que representa o evento (opcional). Este ícone será exibido pelo sistema em notificações que não tenham um usuário que a enviou. Caso tenha um usuário "enviador", o sistema exibirá a foto deste usuário. Caso haja mais de um usuário "enviador", o sistema mostrará a foto do último usuário que enviou a notificação.
  7. moduleId - Módulo ao qual pertence este evento
  8. grouped - Indica se a notificação pode ser agrupada por ação e objeto.
  9. canRemove - Indica se a notificação pode ser removida.
  10. removeAfterExecAction - Indica se a notificação é removida após ser executada uma ação.
  11. onlyAdmin - Indica se o evento é válido somente para usuários administradores.
  12. tenantId - Tenant para o qual o evento está sendo cadastrado.
Enviando Notificações:

Para enviar uma notificação é necessário realizar uma chamada ao método "sendAlert", da interface "com.totvs.technology.foundation.alert.service.AlertService". Um exemplo de chamada deste método segue abaixo:

@Stateless(name = "AlertCreator", mappedName = "AlertCreator")
public class AlertCreator {
	
	@EJB(lookup = AlertService.JNDI_REMOTE_NAME)
	private AlertService alertService;
	
	public void sendHoleritAlert() {
		
		alertService.sendAlert("MY_EVENT", loginUserThatSendsTheNotification, loginUserThatIsGoingToReceiveTheNotification, objectAttached, placeWhereTheEventOccurs, actions, metadata);
				
	}
}
Os parâmetros para execução do método são:
  1. eventKey - Chave do evento cadastrado para envio de notificações
  2. loginSender - login do usuário que envia a notificação. (opcional)
  3. loginReceiver - login do usuário que irá receber a notificação
  4. object - objeto associado à notificação (opcional) - implementação padrão para a interface "AlertObject" é a classe "com.totvs.technology.foundation.alert.GenericAlertObject", da API de Notificações do Fluig.
  5. place - lugar onde a notificação foi gerada (opcional) - objeto e lugar são tratados com a mesma estrutura de dados - implementação padrão para a interface "AlertObject" é a classe "com.totvs.technology.foundation.alert.GenericAlertObject", da API de Notificações do Fluig.
  6. actions - ações disponibilizadas pela notificação (opcional) -  implementação padrão para a interface "AlertAction" é a classe "com.totvs.technology.foundation.alert.GenericAlertAction", da API de Notificações do Fluig.
  7. metadata - metadados da notificação (opcional)