HomeDesk editar arquivo

0:00 / 0:00

Tela do desk — o ambiente principal que o usuário vê após o login. É aqui que ficam os ícones de entrada de cada módulo. Para que o novo módulo apareça nessa tela, é preciso adicionar um m.add(...) no método menuDesk() e importar as duas classes do módulo.

CÓDIGO COMPLETO
package br.xt.acore.desk;

import br.jasap.core.Effect;
import br.jasap.dao.Query;
import br.jasap.effect.Response;
import br.jasap.gui.JasapPage;
import br.jasap.gui.SideMenu;
import br.jasap.util.*;
import br.xt.AppsRootAction;
import br.xt.app.painel.cfg.PcfgModel;
import br.xt.app.painel.sup.lng.LngBean;
import br.xt.app.painel.sup.lng.LngModel;
import br.xt.app.painel.sup.slg.SlgModel;
import br.xt.app.painel.udb.PudbBean;
import br.xt.app.painel.udb.PudbModel;
import br.xt.app.painel.usu.PusuBean;
import br.xt.app.painel.usu.PusuModel;

import br.xt.app.painel.usu.PusuAction;
import br.xt.acore.view.XtPage;
import br.xt.app.departamento.DepartamentoHome;
import br.xt.app.departamento.DepartamentoManager;

import br.xt.app.laboratorio.LaboratorioHome;
import br.xt.app.laboratorio.LaboratorioManager;

import br.xt.app.ged.GedHome;
import br.xt.app.ged.GedManager;

import br.xt.app.painel.PnlCfg;
import br.xt.app.painel.PnlHome;
import br.xt.app.painel.sup.lng.LngPass;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.PrintStream;

public class HomeDesk extends AppsRootAction  {

    // ... (Refresh, AtualizaProc, execute, render, rightBox, procSQL, find, header)

    public String menuDesk() throws Exception {
        SideMenu m = new SideMenu();

        m.add(ok(LaboratorioManager.F_ACESSO_MODULO) && PnlCfg.hasLaboratorio(getManager()),
                "LABORATÓRIO",
                link(LaboratorioHome.class).childWindow("__WD_XT_LABORATORIO"),
                null).setImage("res/ico/mn_cto_colaboradores.png");

        m.add(ok(DepartamentoManager.F_ACESSO_MODULO) && PnlCfg.hasDepartamento(getManager()),
                "DEPARTAMENTO",
                link(DepartamentoHome.class).childWindow("__WD_XT_DEPARTAMENTO"),
                null).setImage("res/ico/mn_cto_colaboradores.png");

        m.add(ok(GedManager.F_ACESSO_MODULO) && PnlCfg.hasGED(getManager()),
                "GED",
                link(GedHome.class).childWindow("__WD_XT_GED"),
                null).setImage("res/ico/main_ged2.png");

        m.add(ok(HomeManager.F_ACESSO_MODULO),
                "Painel de Controle",
                link(PnlHome.class).childWindow("__WD_XT_PAINEL"),
                null).setImage("res/ico/main_gear.png");

        return m.toHtml();
    }

    // ... (usuModel, cfgModel, lngModel, updModel, lngBean)
}

O que muda neste arquivo

São duas adições independentes: os dois imports no topo e o bloco m.add(...) dentro de menuDesk(). Sem os imports o compilador não encontra as classes; sem o m.add o ícone do módulo não aparece no desk.

O que adicionarOnde
import br.xt.app.departamento.DepartamentoHome;Bloco de imports — necessário porque menuDesk() referencia DepartamentoHome.class
import br.xt.app.departamento.DepartamentoManager;Bloco de imports — necessário porque menuDesk() referencia DepartamentoManager.F_ACESSO_MODULO
bloco m.add(...)Dentro de menuDesk(), entre os outros módulos

menuDesk()

public String menuDesk() throws Exception {
    SideMenu m = new SideMenu();

    m.add(ok(DepartamentoManager.F_ACESSO_MODULO) && PnlCfg.hasDepartamento(getManager()),
            "DEPARTAMENTO",
            link(DepartamentoHome.class).childWindow("__WD_XT_DEPARTAMENTO"),
            null).setImage("res/ico/mn_cto_colaboradores.png");

    return m.toHtml();
}

Monta o menu lateral do desk — a lista de ícones que o usuário vê ao fazer login. Cada m.add(...) corresponde a um ícone. O método retorna o HTML gerado e ele é injetado no sidebar via update().

O SideMenu processa os itens na ordem em que foram adicionados — a posição do m.add do novo módulo entre os outros determina onde o ícone aparece na tela.

Parâmetro do m.add()O que é
ok(DepartamentoManager.F_ACESSO_MODULO) && PnlCfg.hasDepartamento(getManager())Condição de visibilidade. O item só aparece se o usuário tiver permissão (ok()) e o módulo estiver habilitado na configuração do sistema (PnlCfg.hasDepartamento()). Se qualquer uma das duas for falsa, o item some do desk para aquele usuário
"DEPARTAMENTO"Rótulo exibido abaixo do ícone no desk
link(DepartamentoHome.class).childWindow("__WD_XT_DEPARTAMENTO")Link gerado ao clicar no ícone. childWindow abre o módulo em uma janela filha com o ID informado — esse ID identifica a janela para que o Jasap saiba onde abrir e reutilizar
nullÍcone alternativo (texto) — não utilizado aqui porque a imagem é definida via setImage()
.setImage("res/ico/mn_cto_colaboradores.png")Imagem exibida no desk. O caminho é relativo à raiz do projeto web

ok() e PnlCfg.hasDepartamento()

A condição de visibilidade combina dois controles independentes:

ControleQuem defineO que verifica
ok(DepartamentoManager.F_ACESSO_MODULO)Permissão do usuário — configurada no Painel de ControleSe o usuário logado tem permissão de acesso ao módulo. A chave F_ACESSO_MODULO foi registrada via regFun() no DepartamentoManager
PnlCfg.hasDepartamento(getManager())Configuração do sistema — ligada ou desligada por um administradorSe o módulo está habilitado globalmente na configuração da aplicação. Independe do usuário — se desligado, some para todos

childWindow("__WD_XT_DEPARTAMENTO")

Cada módulo é aberto em sua própria janela filha, identificada por uma string única. Essa string funciona como um "slot" — se o usuário clicar no ícone do módulo enquanto ele já está aberto, o Jasap encontra a janela existente e a traz para frente em vez de abrir uma segunda.

ConvençãoExemplo
Prefixo __WD_XT_ + nome do módulo em maiúsculas__WD_XT_DEPARTAMENTO, __WD_XT_LABORATORIO, __WD_XT_GED

O ID deve ser único entre todos os módulos — reutilizar o ID de outro módulo faria os dois compartilharem a mesma janela, sobrescrevendo um ao outro.