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:
  1. Criar um objeto Notification
  2. Registrar este objeto no gerenciador de notificações
  3. Manipular as propriedades deste objeto (ícone, mensagens, etc.)
  4. 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:

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: