Tenho uma página de solicitação de orçamento, nesta página eu tenho um campo escondido chamado "numeroOrcamento" e uma rotina que a cada 2 segundos roda na página com setInterval() para verificar qual é o próximo número de orçamento deve ser gerado para aquele formulário. Mas talvez, essa não seja a melhor abordagem.
O que eu considero a melhor abordagem seria, que ao clicar no botão submit do formulário a aplicação fizesse o request perguntando qual é o próximo número de orçamento, pois assim eu não ficaria onerando o BD do site com essas requisições.
Eu tentei primeiramente criando um um evento de Click para o botão, mas como a chamada ao Web Module resulta numa Promisse, às vezes, isso causa problemas, porque a promisse pode não ter sido totalmente executada e aí eu não tenho o número do orçamento que eu preciso e o submit do form já aconteceu.
Eu também tentei via Hook, no beforeInsert ali funcionou muito bem, mas o e-mail enviado ao cliente vali sem a informação de número de Orçamento.
Aí fica a pergunta, é possível submeter o form apenas se ele uma determinada condição for verdadeira, no meu caso, se eu conseguir gerar o número do orçamento?
Como interceptar o click no botão para que eu adicione meu código e posteriormente liberar a aplicação para gravar no BD e mandar email para o cliente?
Primeiramente, obrigado pela ajuda!!!!
Pois é, mas....
O formulário que foi criado (por um terceiro), não está apoiado em um dataset explicitamente declarado na página, mas sim em uma tabela de envios (que no meu entendimento é também um dataset, mas que eu não tenho esse nível controle). E quando o formulário é submetido, as ações realizadas pela aplicação pela aplicação são: gravar os dados na tabela de envio e disparar e-mail para quem preencheu o formulário e para o remetente configurado no form.
Nesse cenário, se eu criar o evento de click no botão que já está la no formulário, eu consigo gerar o número de orçamento, garantir que será gravado no BD e ao mesmo tempo que esse informação gerada vá por e-mail?
Se não houve o que fazer eu teria que recriar o form, inclusive implementar a função que envia e-mail para nosso server SMTP. Digo que tentei fazer essa implementação também, mas a wix parece não conseguir se conectar no SMTP da minha empresa. Mas via SendGrid eu obtive sucesso. Já implementou via SMTP direto usado o NodeMailer?
Olá @jfcruz! Para evitar a submissão do formulário antes do termino da request basta adicionar a submissão ao .then do formulário.
Veja a seguir um pequeno exemplo:
import { gerarNumeroOrcamento } from 'backend/numeroOrcamento' export function btnEnviarForm_click(event) { // chamando função do backend gerarNumeroOrcamento().then(numeroOrcamento => { $w('#input1').numeroOrcamento //Salvar dados do form no BD $w('#dataset1').save() }) .catch(error => { //trate o erro console.log(error); }); }
Espero ter ajudado ;)