Diferenças onApplicationInit, onScriptInit e onLoad

Notei que no webhelp trás assim:

onApplicationInit - Este evento é executado quando o aplicativo é carregado apenas pela primeira vez

onScriptInit - Este evento é executado quando o aplicativo está carregando

onLoad - Este evento ocorre quando a página é carregada, ou seja, quando estiver a navegar a partir de um registro para outro, clicando nos botões (novo, inserção, etc.)

Muitos iniciantes como eu se perdem nesta explicações simplistas do WebHelp.
E por vezes fazem coisas erradas como acessar as variáveis locais da aplicação no onScriptInit de um formulário.

Exemplo: Quero substituir o “campoteste” que tem seu conteúdo buscado na base de dados pela palavra “oi;”
{campoteste} = “oi”; —> Isto so vai funcionar no onLoad.
Se colocar no onApplicationInit ou no onScriptInit ele irá continuar a carregar a string do banco de dados. O único local onde permite eu trabalhar o campo após executad o sql é no onLoad

Por isto coloco aqui a explicação que achei mais válida e que encontrei no help dos metódos.

#####################################################################################################
onApplicationInit

Este evento ocorre antes da aplicação executar o SQL. Só é executada ao carregar a aplicação.
É usado para verificações de variáveis e para verificações de segurança.
Ex:
if ([glo_var_depto] != ‘financeiro’){
sc_redir(app_x.php);
}

Notou a frase verificação de segurança e de variávieis? viu que ocorre antes da aplicação executar o SQL?

#####################################################################################################
onScriptInit

Para formulário: Este evento ocorre antes da inicialização do formulário, neste momento, as variáveis locais da aplicação, não estão disponíveis.

Para um formulário de controle: Este evento ocorre antes da inicialização do formulário de controle.

O código é executado antes que a aplicação seja iniciada, neste momento, as variáveis locais da aplicação, não estão disponíveis para uso. E o SQL ainda não foi executado.

Aqui o sql ainda não foi executado e se guardar algo em uma variável de campo o sql irá substituir o que você fez.
Também as variáveis locais não estão disponíveis.

#####################################################################################################
onLoad

Este evento é executado antes que o formulário seja carregado. Neste momento todas as variáveis da aplicação estão disponíveis.

Podemos neste evento mover alguns valores padrão para os campos do formulário.

Ex:
{empresa} = [glo_empresa];

//movendo uma variavel de sessão [glo_empresa] para o campo do form {empresa}.

#####################################################################################################

Espero que isto ajude os iniciantes como me ajudou.

2 Curtidas

Show de bola Alexandre! Ajudou e muito! Parabéns pela iniciativa.

Grande abraço! :smiley:

Parabéns Alexandre, boa explicação acredito que com um pouco de pesquisa os iniciantes encontram tudo que precisam aqui no forum.

Começou a clarear… a NM tem que contratar pessoas como vc para montar o webhelp deles…
Obrigado pela explanação. !

Cara, muito bom, o post é antigo mas claro. parabens

Excelente explicação!

Mas tenho dúvida de onde inserir a seguinte lógica:

Ao clicar no botão “Novo”, faço uma verificação de valores lançados no banco e gostaria de sugerir a diferença em um campo da tela. Ou seja: em um total de 400, verifico que já lancei 100 então já inicio a tela com o valor preenchido com 300.

Desde já, grata!

No Evento: OnLoad

Obrigada!!

Complementando a explicação:

onApplicationInit:

  • não permite acessar os métodos e diversas macros.
  • Pode iniciar Globais.

onScriptInit:

  • Executada sempre na carga da aplicação, vale lembrar que em enventos ajax a aplicação é recarregada, então a onScriptInit é executada nos eventos ajax.
  • Para controlar quando a onScriptInit é executada a primeira vez e nos eventos ajax utilize a flag interna:
    $this->NM_ajax_flag que para valor igual a 1 a execução vem de um evento ajax.

onLoad:

  • Executada após a carga dos objetos e após o select principal da aplicação.
  • Aqui você pode aplicar valores para os campos das aplicações, principalmente em campos calculados e campos em memória.

Parabéns Alexandre, excelente explicação! Tenho certeza que ajudou muitos por aqui, sendo experientes ou não.

Obrigado Haroldo por complementar.
Obrigado Marcelo