Recarga Detalhes do Mestre/Detalhes

Certo, muito certo… o trabalho pra fazer o mau feito é o mesmo pra fazer o bem feito!

Vovô já me dizia isso. rsrsrs

Assim como: “SONHAR PEQUENO DÁ O MESMO TRABALHO DE SONHAR GRANDE”…

Dário,
Deixe seu campo para responde com o evento ajax que você escolher.
Depois no “Eventos AJAX” Crie um evento e faça uso da macro sc_ajax_javascript.
Na função javascritp tente executar o comando document.getElementById(FrameID).contentDocument.location.reload(true);
Lembre de trocar o FrameID pelo nome do frameid gerado pelo SC.

Alexandre, boa noite!

Pra pegar esse FrameID gerado pelo sc, só olhando nos fontes ou é o nome do detalhe criado no sc?

Abraço.
Rodrigo

Esqueça o que eu falei primeiro.
Veja o procedimento:

  1. o iframe no sc geralmente tem este nome:
    nmsc_iframe_liga_nomedoseuform
    em nomedoseuform ele diferencia maiúscula da minúscula.
    Para saber corretamente tem que ir até o fonte gerado e procurar por iframe.

  2. No form vá no menu esquerdo em Javascritp
    Selecione o objeto (campo) e depois o evento onchange.
    Observação: No meu caso selecionei o campo DEPT NO na demostração que coloquei na web.
    clique em editar
    Coloque então esta função javascritp:
    document.getElementById(“nmsc_iframe_liga_nomedoseuform”).contentDocument.location.reload(true);
    clique em atualizar.

Observações: Não esqueça que função tem que ter o true ou não vai funcionar no firefox.
Somente testei no Firefox e no IE.

  1. O reload é muito rápido se o detalhe não tem muita informação.
    Pode notar aqui na minha página de teste.
    www.simaoebuhler.com.br/teste/
    Deverá colocar a barra de rolagem horizontal do detalhe para direita ante de ir no campo DEPT NO e alterar o valor para ver o reload.
    No caso no DEPT NO altere de 600 para 500 por exemplo e mude o foco para outro campo.
    Ao dar o reload ele irá recarregar o iframe e colocar a barra de rolagem de novo para esquerda.

Observação: Você pediu reload do detalhe. Ai esta a função que faz isto. Agora se ela atualiza o detalhe no reload so testando.

  1. Se necessitar passar parametros entre o javascritp e o php fica como dever de casa.
    Mas a idéia e mais ou menos a que tem no livro: “Dominando AJAX As melhores práticas ligadas a aplicações web escritas tanto em Java como em PHP 5 utilizando Ajax” de Edson Gonçalves - editora ciência moderna, página 118 a 125.
    Não é como está lá, somente terá que usar a cabeça, captar a idéias e adptar ao sc.

  2. Se houver disponibilidade manda umas moedinhas para eu comprar um refri e tomar com a família aqui.

Apesar do post não ser originalmente criado por mim eu gostaria de agradecer a dica do Alexandre.

No meu caso eu preciso atualizar um detalhe a partir do onAfterDelete de outro detalhe.

Abraço!

Isso aqui é suporte de verdade, ajuda verdadeira, com exemplo de funcionamento e tudo mais e explicação detalhada.

Dizem o que o verdadeiro amor é aquele onde doamos de coração, sem orgulho, a verdadeira caridade, sem espera de retorno.

Obrigado meu desconhecido amigo Alexandre, por seu empenho em querer ajudar de verdade.

Valeu Alê,

Parabéns mermão!
É isso aí… tou dizendo, daqui a pouco a NM não ganhar um centavo furado com suporte…

[]´s

No meu caso tenho 2 detalhes, ambos apl form:
Itens do pedido
Itens removidos

Quando excluo um registro do “itens do pedido” eu insiro na tabela de itens_removidos os dados do registro excluido e quero atualizar o detalhe “itens removidos” que é apenas pra exibir estes registros. Tentei fazer com apl consulta e usar o refresh, mas o sc desloca a consulta pra direita ao navegar no form mestre, não sei pq.

Tentei:
No onAfterDelete do detalhe “itens do pedido” dar um
echo "";
Não funcionou.

Na opção javascript, no objeto Form, evento onLoad e onSubmit
document.getElementById(‘nmsc_iframe_liga_form_pedidos_itens_removidos’).contentDocument.location.reload(true);
Também não funcionou.

Há algo mais a tentar?

Rodrigo

Antes de tudo obirgado a todos,

Rodrigo,
Houve uma mudança do sc5 para sc6.
Antes o sc5 colocava o javascritp que você digitava no onafterdelete ou outros luganes no ou antes de tudo, mas não via ele colocar no . Então tudo funcionava ok.
Agora o sc6 coloca no isto fez algumas coisas minhas pararem.
O local onde ele coloca o javascript gera algumas pequenas diferenças na hora de executar as coisas.

Isto é bem explicado aqui:
http://www.w3schools.com/js/js_whereto.asp
Então as vezes não é so usar um echo como se fazia no SC5, mas achar onde ele será executado corretamente no SC6.
Logo, temos que abrir o código fonte e analisar onde ele esta colocando o:
"";
Para ver se ele será executado.

Mais um detalhe.
Quando você coloca:
document.getElementById(‘nmsc_iframe_liga_form_pedidos_itens_removidos’).contentDocument.location.reload(true);
O document.getElementById irá ser válido somente para o Form itens do pedido
Para ele enxergar o outro form com a sintaxe que está usando ele deveria estar no Form mestre.
A sintaxe do comando com certeza deverá mudar.
Não me lembro bem mas talvez tenha que ficar:
parent.document.getElementById(‘nmsc_iframe_liga_form_pedidos_itens_removidos’).contentDocument.location.reload(true);
Assim funcionará de dentro do iframe para o outro iframe.
Mais informações: https://developer.mozilla.org/pt-BR/

Criando metodo javascript e acessando o mesmo via macro ajax funciona nos eventos ajax bem.

Rodrigo,
Veja este exemplo:
http://www.truquesedicas.com/tutoriais/javascript/00021a.htm

Rodrigo,
Deu certo colocando “parent”?

Alexandre,

Era isso mesmo que queria, muito obrigado e Parabéns pelo post.

Grato,

Dário

alguem conseguiu implementar passando parametros tbm??