Olá pessoal…
Hoje vou mostrar para vocês como percorrer todas as linhas de um aCols e disparar um gatilho através da função RunTrigger.
Para executar o gatilho na grid, primeiro nós percorremos o acols, depois verificamos se existe um gatilho criado para ele (tabela SX7), posicionamos no gatilho, e enquanto existir gatilhos para esse campo, a gente chama a função RunTrigger.
No exemplo abaixo é isso que fazemos com o campo C6_X_CAMPO, onde ele percorre todas as linhas, e dispara todos os gatihos do C6_X_CAMPO. Lembrando que a maioria das rotinas a variável n e aCols são variáveis públicas.
cCampoAux := "C6_X_CAMPO" nLinBkp := n For n := 1 To Len(aCols) //Se tiver gatilhos no campo If ExistTrigger(cCampoAux) //Posiciona no gatilho DbSelectArea("SX7") SX7->(DbSetOrder(1)) //Campo + Sequencia SX7->(DbGoTop()) If SX7->(DbSeek(cCampoAux)) //Percorrendo todos os gatilhos While ! SX7->(EoF()) .And. Alltrim(SX7->X7_CAMPO) == Alltrim(cCampoAux) //Dispara o Gatilho cCpoTrigger := SX7->X7_CAMPO RunTrigger( 2,; //nTipo (1=Enchoice; 2=GetDados; 3=F3) n,; //Linha atual da Grid quando for tipo 2 Nil,; //Não utilizado ,; //Objeto quando for tipo 1 cCpoTrigger) //Campo que dispara o gatilho SX7->(DbSkip()) EndDo EndIf EndIf Next n := nLinBkp
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Grande Daniel!
Que post sensacional cara!!! Há muito estava procurando uma solução dessas, mas como leitor assíduo do Terminal de Informação, estava convicto que a qualquer hora este post chegaria!
Me ajudou muito mesmo parceiro, utilizei o conceito apresentado para personalizar a rotina MATA103 ficou top!
Sucesso meu caro…
Forte abraço!
Att,
Roque Freitas
O mano Roque, muito obrigado jovem.
Um grande abraço.
Preciso atualizar os campos da tela em tempo “real”. Eu criei um gatilho onde na regra eu executo uma função. Nessa função eu insiro o valor nas variáveis de memória e no Return eu retorno a informação que irá preencher a conta domínio. Eu queria que além de preencher o campo domínio, preencher outros campos também. Por exemplo: gatilho é no campo DA3_ATIVO, domínio para o campo DA3_LOG e preciso que no retorno também sejam preenchidos os campos DA3_COD, DA3_MUNPLA etc.
Bom dia Igor, tudo bem?
A função está em MVC? Se sim, você não irá conseguir usando o “M->”, apenas com o SetValue no model, ou com o FWFldPut.
Abraços.
Dan Boa Noite, como vai?
Uma dúvida? Onde executo esta função? função do usuário ou ponto de entrada? O que quero é inserir dados de um campo craido da SB1 (Preço frete unit por produto) e quando eu efetuar o faturamento do produto,ele levar o valor deste campo SB1 para um campo criado tambem na tabela de itens da NF (SD2).
Bom dia Alessandro, tudo bem graças a Deus e você?
Certo, essa função você adicionar o trecho dela dentro de algum valid de campo ou pode ser também em um ponto de entrada na validação da linha (LinOk).
Mas no seu caso, talvez seria interessante, criar um gatilho do campo C6_PRODUTO para o campo C6_X_????? (Campo de preço frete unit por produto), e assim gravar essa informação na sc6.
Ai você faz um ponto de entrada na geração do documento de saída, ai basta olhar esse campo C6_X_????? que já vai estar posicionado.