Administração do sistema
Como customizar o cabeçalho e o rodapé das interfaces?
RT.FAQ-8201
O cabeçalho e rodapés das páginas do sistema são regidos pelas preferências "APP.UI.HEADER_CONTENT" e "APP.UI.FOOTER_CONTENT" que contém o respectivo código HTML. Estes códigos permitem o uso de placeholders identificados na forma ${nome}. Os placeholders disponíveis devem estar registrados na classe PlaceHoldersMap. Por padrão, a T2 registra automaticamente os seguintes placeholders:
- ${logo}: Logotipo (ou nome) da aplicação registrado no parâmetro APP.UI.LOGO com um link para a página de entrada do sistema. Esta página é definida através das preferencias RT.UI.HOME_INTERFACE e RT.UI.USER_HOME_INTERFACE.
- ${menu}: Estrutura completa de HTML do menu do usuário no sistema.
- ${auth}: Informações sobre o usuário que está logado, bem como link para fazer login ou logout;
- ${version}: Versão do sistema retirado do WebXML (APP.VERSION)
- ${build}: Versão do build (APP.BUILD)
- ${notifications}: Representa o Código HTML (Área) para apresentação das notificações do sistema
- ${time}: Data e hora da aplicação
- ${globalName}: Nome global da interface acessada no momento
- ${interfaceName}: Nome da interface, sem o nome do sistema/subsistema.
- ${interfaceTitle}: Título da interface
- ${user}: Nome do usuário que está logado
- ${company}: Nome da empresa (APP.EMPRESA)
- ${memoryUsage}: Percentual de memória ocupado (objetos Java)
- ${instance}: Nome da instancia definido pelo parâmetro APP.NAME.
- ${nodeName}: Nome do node da rede de replicação.
- ${context}: Path de contexto do servidor. Ex: /ADS2
Importante
Caso esta configuração seja realizada por preferencia de sistema e a replicação estiver ativada, as configurações serão atualizadas em todas as bases replicadas.
Para que isto não ocorra, deve-se utilizar as configurações em arquivos .css, por instância de sistema - ver Como alterar as cores do cabeçalho e/ou rodapé do Eligo?.
Como criar placeholder customizados
Para criar novos placeholders com conteúdos específicos para uma aplicação, deve-se simplesmente registrar um objeto na classe PlaceHoldersMap. Este registro deve ser feito preferencialmente na inicialização do sistema (evento ON_START de algum sub-sistema). O placeholder é apenas um objeto cujo método toString() retorna o conteúdo desejado.
Exemplo:
Digamos que se deseja criar um placeholder que apresente o nome do banco de dados em uso:
PlaceHoldersMap.getInstance().put("build", new Object() {
@Override
public String toString() {
BaseRuntime ctx = BaseRuntime.getContext();
try {
return ctx.getDbName();
} catch (AdsException ignore) { }
return "";
}
});
Notas:
- Como o placeholder precisa apenas da implementação do método toString(), o uso de inner-class anônima é bastante conveniente.
- Os placeholders são objetos instanciados uma única vez e reutilizados por todas as sessões da aplicação, portanto, estes objetos NÃO DEVEM MANTER ESTADO a não ser de elementos que são objetos não mutantes entre as sessões.
- A package br.com.telescope.t2.view.placeholder possui vários exemplos de placeholders que podem servir como exemplo.
Valor default para APP.UI.HEADER_CONTENT
${logo}
<nav id=\"main\">${menu}</nav>
<section class=\"user-options\">${auth}</section>
Valor default para APP.UI.FOOTER_CONTENT
<section class=\"global-name\">${globalName}</section>
<section class=\"version\">${version}</section>
<section class=\"current-time right\">${time}</section>
${notifications}
Sugestão de código para o footer do Eligo
Criar preferência de sistema APP.UI.FOOTER_CONTENT com o seguinte conteúdo:
<table width="100%">
<tr>
<td>
<section class="global-name">${globalName}</section><section class="version">v${version}</section>
<section class="build">(${build})</section>
<section class="memory-usage">Memory used: ${memoryUsage}</section>
</td>
<td>
<section class="current-time">${time}</section>
</td>
<td>${notifications}
</td>
<td align="right">
<section class="links">
<ul>
<li>
<a href="http://www.prd.inf.br/wiki/index.php?title=${interfaceName}" target="_blank">Documentação</a>
</li>
<li>
<a href="http://www.prd.inf.br/suporte/client.php?locale=pt-br&name=${user} (${company})" target="_blank">Atendimento on-line</a>
</li>
<li>
<a href="http://www.prd.inf.br" target="_blank">PRD Tecnologia de Gestão</a></li>
</ul>
</section>
</td>
</tr>
</table>
Alterando/Removendo cabeçalho via variáveis de sessão
Configurar um EVENT_LISTNER ver mais: Eventos de sistema, com evento de POS_LOGIN apontando para um operação customizada p.ex:
Preferência
RODAPE.EVENT_LISTENER
Valor
RT.POS_LOGIN:MODIFICAR_RODAPE
Onde RT.POS_LOGIN é o nome do evento e MODIFICAR_RODAPE é o nome da operação customizada.
Deixa em branco o conteúdo da preferência APP.UI.FOOTER_CONTENT.
Na operação customizada criar uma regra parecida com:
String key = "APP.UI.FOOTER_CONTENT";
if (ctx.getSession().getCurrentUser().isSuperUser()) {
ctx.setSessionString(key, ctx.getPreference(key + "_DEFAULT"));
}
Neste caso só irá apresentar o rodapé para usuários que são super usuários
Ver também: