Telescope (core)
T2 - Como usar as Notifications?
ADS.FAQ-12818
As notifications permitem notificar eventos para os usuários de forma assíncrona. Para isso, é necessário:
- Criar um objeto Notification
- Registrar este objeto no gerenciador de notificações
- Manipular as propriedades deste objeto (ícone, mensagens, etc.)
- Remover o objeto do gerenciador de notificações
Para entender as notifications, vamos usar um exemplo:
Crie um regra de pos-update de uma entidade qualquer e inclua a implementação abaixo:
Runnable r = new Runnable() {
@Override
public void run() {
// Criar uma mensagem de notificação
Notification n = new Notification()
.title("Mudança nos clientes")
.icon("replicator-working")
.cycle(1);
// Registrar esta mensagem no ambiente
NotificationManager mgr = NotificationManager.getInstance();
mgr.add(n);
// Ficar alterando as propriedades da mensagem
for (int i = 0; i < 10; i++) {
n.setQuantity(i);
n.setTitle("A contagem está em " + i);
n.setContent("Esse é um texto que aparece quando o<br>usuário clica - "
+ System.currentTimeMillis());
try {
Thread.sleep(2000);
} catch (InterruptedException ignore) { }
}
// Remover a mensagem
mgr.remove(n);
}
};
Thread t = new Thread(r);
t.start();
Para testar:
- Abra a tela de cadastramento da entidade em questão
- Altere os dados do registro
- Verifique o surgimento de um ícone na parte inferior do sistema - este ícone irá alterando a contagem de 1 a 9 a cada 2 segundos e depois desaparecer
- Posiciona o mouse sobre o ícone - Irá aparecer um hint com o texto "A contagem está em X"
- Clique sobre o ícone - irá aparecer um balão com um conteúdo HTML.
Caso se deseje direcionar a notificação apenas para o usuário da sessão corrente, basta incluir o ID da sessão no Notification:
Notification n = new Notification()
.title("Mudança nos clientes")
.icon("replicator-working")
.session(ctx.getSession().getId()) // Apenas janelas da mesma sessão serão notificadas
.cycle(1);
Caso não informado, cada notification criado recebe um ID de identificação automaticamente. Quando for necessário que múltiplas rotinas acessem o mesmo objeto de notificação, pode-se definir um ID fixo para ele e pega-lo do próprio gerenciador (e criando apenas quando não for encontrado):
NotificationManager mgr = NotificationManager.getInstance();
Notification n = mgr.getNotification("rotina-de-integracao");
if (n == null) {
n = new Notification()
.title("Mudança nos clientes")
.icon("replicator-working")
.session(ctx.getSession().getId())
.urgent(true)
.cycle(1);
mgr.add(n);
}
Observações:
- Quando o usuário está em um atela qualquer, a frequência de atualização das notificações irá depender da maior frequência das notificações atualmente ativas. Caso nenhuma estiver ativa, o tempo de atualização é de 60 segundos ou o valor configurado na preferencia RT.UI.NOTIFICATIONS_INTERVAL;