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.
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 arquivoSã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 adicionar | Onde |
|---|---|
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:
| Controle | Quem define | O que verifica |
|---|---|---|
ok(DepartamentoManager.F_ACESSO_MODULO) | Permissão do usuário — configurada no Painel de Controle | Se 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 administrador | Se 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ção | Exemplo |
|---|---|
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.