Administração do sistema

Ações customizadas disparadas a partir de blocos de interface

RT.FAQ-107582
Caso seja necessário incluir ações customizadas a partir das interfaces do sistema, pode-se proceder da seguinte forma:

Criar uma operação customizada

Usar a interface Operações customizadas para cadastrar a rotina que será executada quando a ação for disparada.
Para obter os valores do formulário de onde a ação foi disparada será necessário pegar pela variável de contexto ctx.
Exemplo Groovy:
String sid = ctx.getParameter("A_ID");
Exemplo TSL:
set sid ${ctx.getParameter("A_ID")};

Criar um event-listener

Criar um listener com o nome global da operação onde o botão deve ser incluído seguido de .ON_ACTION.
Exemplo:
CIDADE.CAD_CIDADES.VIEW.ON_ACTION : ROTINA_CUSTOM

Este listener irá incluir um botão na tela VIEW da interface CAD_CIDADES.
O título do botão será igual ao título da operação customizada.

Direitos de acesso

Apenas usuários com direito de acesso à operação terão acesso a esta ação. O botão não será apresentado para outros usuários.

Tecla de atalho

Se quiser incluir uma tecla de atalho, deve-se criar uma preferência:
ROTINA_CUSTOM.ACTION_HOTKEY=F4

Mensagem de confirmação

Se quiser que o sistema abra um diálogo para confirmar a execução da rotina, deve-se criar uma preferência da seguinte forma:
ROTINA_CUSTOM.ACTION_CONFIRMATION_MESSAGE=Tem certeza que deseja executar?

Executar rotina em uma nova janela

Se quiser que a ação abra uma nova janela/aba do navegador, incluir a seguinte preferência:
ROTINA_CUSTOM.ACTION_TARGET=_blank

Exemplo

Para incluir uma ação que abra o PDF diretamente a partir da tela de consulta do pedido, pode-se proceder da seguinte forma:
Cadastrar uma operação custom:
import br.com.telescope.t2.Redirector;

String id = ctx.getParameter("A_ID");

new Redirector()
        .block("PRO_IMPRIMIR_PEDIDO")
        .action("IMPRIMIR_PDF:SUBMIT")
        .newTab()
        .parameter("P_PEDIDO_ID", id)
        .parameter("A_ID", id)
        .run();

ctx.getEvent().getObject().doView();

Cadastrar preferência:




Alternativa 2

Outra forma de fazer algo semelhante é criar uma rotina que irá incluir a ação que deverá ser executada.
Esta forma permitirá alguns outros recursos como fazer a ação abrir em uma janela estilo pop-up e capturar informações sendo digitadas:
  1. Criar ação que fará a inclusão. Exemplo: Ver a implementação do método PROD.INTERESSES_PRODUTOS.INCLUIR_ACAO_SUGERIR_COMPRA.
  2. Criar um listener para injetar esta botão nas telas desejadas. Exemplo:
: PROD.INTERESSES_PRODUTOS.INCLUIR_ACAO_SUGERIR_COMPRA
PROD.CAD_PRODUTOS.VIEW.PRE_RECORD 
ORCAME06.CAD_ORCAMENTO_06_ITENS.INSERT.PRE_RECORD
ORCAME06.CAD_ORCAMENTO_06_ITENS.UPDATE.PRE_RECORD
PEDVEN06.CAD_PEDIDOS_06_ITENS.INSERT.PRE_RECORD
PEDVEN06.CAD_PEDIDOS_06_ITENS.UPDATE.PRE_RECORD
OS_VEICULOS.CAD_ORDENS_SERVICO_VEICULOS_ITENS.INSERT.PRE_RECORD
OS_VEICULOS.CAD_ORDENS_SERVICO_VEICULOS_ITENS.UPDATE.PRE_RECORD
ORCAME.CAD_ITENS_ORCAMENTO.INSERT.PRE_RECORD
ORCAME.CAD_ITENS_ORCAMENTO.UPDATE.PRE_RECORD

Ver também: