Como disparar um gatilho através do aCols em AdvPL

Como disparar um gatilho através do aCols em AdvPL

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.

AdvPL
AdvPL

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

Esses e outros códigos, estão disponíveis gratuitamente no nosso GitHub, acesse em github.com/dan-atilio/AdvPL.

Bom pessoal, por hoje é só.
Abraços e até a próxima.

About Dan_Atilio

Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

2 comentários em “Como disparar um gatilho através do aCols em AdvPL

  1. 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

Deixe uma resposta

%d blogueiros gostam disto: