Estou encontrando um problema ao utilizar javascript pra encontrar o valor de um campo e setar o valor de uma variavel do latromi. O código executa porém o valor da variável não está atribuído para a próxima execução dentro do procedimento.
Tenho um procedimento simples com apenas 2 instrucoes que busca o valor e tenta exibir uma mensagem com a variavel setada:
O Cenário que relatou é uma confusão muito pertinente e para apoiar na resposta dela será necessário nos aprofundarmos no motor, que faz a plataforma LATROMI funcionar.
Para isso criamos um novo tópico de documentação em nossa comunidade.
Primeiramente, obrigado pelo retorno e pelo post. No entanto ainda não sei como resolver o meu problema. A opção “executar código javascript” não estava nos grupos servidor/cliente, mas imagino que seja cliente por estar sendo executada depois.
Eu alterei um pouco os procedimentos, separando em mais de um pra ver se resolvia já que “chamar procedimento” está no escopo de servidor, mas nem assim funciona:
Primeiramente obtenho o valor do campo com o código js já mostrado:
Excelente ideia para organização de código, a separação por procedimento.
porém, as ações que ocorrem no lado do cliente, independente da localização/sequência nos blocos de código. Sempre irão ocorrer no final da execução dos procedimentos.
Levando em consideração o cenário informado, seria necessário popular a variável ou usando as ações de Executar código C# ou Popular campos e variáveis, para conseguir usar a ação Executar código SQL com os valores corretos da variável.
Questionamentos, para podermos dar um apoio mais preciso na solução:
O campo js-obs-texto é um campo nativo Latromi?
Caso não seja um campo nativo. Qual o objetivo do campo personalizado? (ex.: estilização, eventos personalizados, etc.)
O js-obs-texto é personalizado atraves de um elemento html, nao é nativo do latromi (sei que usando um funcionaria mais facilmente), mas optei por fazer assim pra facilitar a estilizacao mesmo. Seria interessante conseguir obter o valor dele mantendo a lógica sequencial do programa.
Entendi, sendo assim vamos usar o seguinte procedimento.
Criaremos um Arquivos Javascript, no formulário, para interceptar o click no botão aprovar, semelhante ao seguinte:
const myForm = (function () {
// Adiciona Callbacks no Formulário
latromi.formManager.setOnFormCreatedCallback(onFormCreated);
latromi.formManager.setOnEventFiringCallback(onEventFiring);
latromi.formManager.setOnFieldValueChangedCallback(onFieldValueChanged);
// Ocorre logo após o form ser inicializado
function onFormCreated(ev) { }
// Ocorre quando um evento é disparado no Form
function onEventFiring(ev)
{
if (ev.eventName === "Click" && ev.field.name === "TROCAR_PELO_NOME_DO_BOTAO") {
// Adicione aqui a lógica javascript para ser executada
var observacao = document.getElementById('js-obs-texto').value.trim();
ev.form.setVariableValue("obsValidacao", observacao);
}
}
// Ocorre quando o valor de um campo é alterado no Form
function onFieldValueChanged(ev) { }
// Todas as funções acima são "privadas", e não podem ser chamadas externamente.
// As únicas funções que podem ser chamadas externamente são as que compões o resultado a seguir:
return {
test: function() { }
}
})();
Depois da interceptação segue o fluxo do procedimento do botão normalmente, sem a necessidade do código Javascript no bloco de procedimento.
Testei aqui e funcionou perfeitamente de acordo com o que eu precisava. Agradeço pelo apoio e explicações nessa questão. Sei que daria pra resolver mais facilmente com as funções nativas do latromi mas agora aprendi a lidar com essa diferença de comportamento usando js e facilita nas customizações daqui pra frente. Novamente, obrigado pela ajuda.