Como obter o nome do campo que disparou o evento?

Bom dia,

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:

Untitled

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

Bom dia @Rafael!

Sim, é possível.

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.

Procedimento

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.

Eventos

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:

Incluir um procedimento para cada botão é necessári para fazer a chamada do próximo Procedimento (ChamarJanela), passando os parâmetros.

Obrigado pela explicação Daniel,

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ó:

1 curtida

Obrigado pela sugestão @Rafael

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:

1 curtida

Obrigado pela solução, funcionou perfeitamente e posso adotar em outros formulários agora tbm.

Nesse caso fiquei com apenas uma janela e um procedimento para controlar todos os botões que na prática tem a mesma função.

1 curtida