Mestre-Detalhe - Como executar o onApplicationInit do Detalhe

Amigos, boa-tarde!

Não encontrei por aqui nenhum tópico sobre meu “problema”.
Reparei hoje que num formulário Mestre/Detalhe, onde no Detalhe faço uso do evento onApplicationInit antes do select da aplicação, este evento só é executado quando o Mestre é iniciado. Ou seja, se percorrer os registros do Mestre o Detalhe é recarregado, mas o onApplicationInit do Detalhe não é executado.

Eu imaginava que ao mudar o registro do Mestre, o Detalhe seria recarregado por completo.

Alguma solução para isso?

OBS: Já até encontrei uma outra forma de resolver meu problema específico (retirei o select que era feito no onApplicationInit do Detalhe e levei para o onNavigate do Mestre, passando o resultado como parâmetro pro Detalhe), mas fiquei curioso sobre esse comportamento.

Onload acho mais apropriado.

Ocorre que precisava atribuir um parâmetro (resultado do select) a uma variável que é usada no select de um Lookup de Edição. No Onload esse select do Lookup já teria sido executado. Por isso precisei usar o onApplicationInit.

Tive que transferir o select para o onNavigate do Mestre porque o parâmetro muda a cada registro.

Mas acho estranho o onApplicationInit não ser executado sempre que o Detalhe é recarregado.

Conforme relatado acima, já havia contornado o problema. Mas o Haroldo (Muito Obrigado!) me passou uma solução que achei muito melhor. Fiz a alteração e funcionou perfeitamente, encapsulando tudo no Detalhe sem ter que alterar nada no Mestre. Vou deixar registrado aqui, pois mais algum desavisado como eu pode precisar de algo semelhante.

Algumas considerações:

  • O evento onApplicationInit do Detalhe só é executado quando a aplicação Mestre é iniciada e não é executado quando navegamos nos registros do Mestre;
  • Já o evento onScriptInit do Detalhe não é executado quando a aplicação Mestre é iniciada e é executado quando navegamos nos registros do Mestre;

Sendo assim, um evento complementou o outro no caso da minha necessidade.

Outra dica que o Haroldo me passou:
Como o evento onScriptInit é iniciado sempre que há um evento ajax dos campos (caso possua), faz-se necessário colocar a seguinte condição no onScriptInit:

if ($this->NM_ajax_flag == 0 ) {
seu código…
}

Desta forma o código não será executado nos eventos ajax dos campos.

2 Curtidas