Estou criando um form que contém alguns botões que abrem a mesma janela apenas alterando os argumentos passados para os parâmetros da consulta. Exemplo:
Existe alguma forma de criar um único procedimento vinculado a todos os botões e dependendo de qual acionou o evento, abrir a janela com parâmetros específicos?
Não gostaria de ter que incluir um procedimento e janela para cada botão
Você precisa fazer a associação dos parâmetros da janela usando variáveis ao invés de valores fixos, e quanto ao procedimento, você cria um único que vai receber como parâmetro/argumento o valor que você quer enviar para a janela.
Por exemplo:
Janela
Adicione uma Janela, usando variáveis para fazer a associação de parâmetros.
Crie um prodimento para abrir a Janela. Neste procedimento, crie os parâmetros necessários para receber os valores que devem ser repassados para as variáveis, que por sua vez, serão utilizados nos parâmetros da Janela.
Adicione um procedimento no evento Click de cada um dos botões. Em cada procedimento, adicione a ação “Chamar Procedimento”, selecione o procedimento responsável por abrir a janela e informa o valor que deseja passar como parâmetro:
A minha dúvida era realmente se seria necessário fazer um procedimento por botão, como vão ser 16 botões, vou precisar 16 procedimentos “idênticos” apenas para controlar as variáveis conforme o botão de chamada.
Fica a sugestão de mellhoria. Se tivesse a opção de dentro do if dos procedimentos verificar quem foi o campo de chamada, poderia centralizar todo esse direcionamento em um procedimento só:
Existe uma solução que pode ser aplicada no seu caso. Ela consiste em usar um código Javascript para inserir o nome do campo que disparou o evento em um argumento do procedimento que está vinculado ao evento.
Por exemplo, o código a seguir, intercepta eventos de quaisquer campos, e adiciona um argumento chamado “sender”, que será o nome do campo que disparou o evento:
latromi.formManager.setOnEventFiringCallback( function(e) {
// Intercepta qualquer evento de campo (Click, LostFocus, etc)
if (e.eventKind === 'Field') {
// Cria um novo argumento chamado "sender", cujo valor será o nome do campo
e.arguments.sender = e.field.name;
}
});
Adicione código acima na seção "Arquivos Javascript" do Formulário.
Agora, basta adicionar um parâmetro com o mesmo nome (sender) em qualquer procedimento vinculado à evento para receber o nome do campo que disparou o evento: