Nesse vídeo demonstraremos a utilização das funções ExistTrigger e RunTrigger, sendo que a primeira valida se existem gatilhos para um campo e a segunda dispara a execução desses gatilhos.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zExe162 Valida se gatilhos existem e executa eles @type Function @author Atilio @since 19/12/2022 @see https://tdn.totvs.com/pages/releaseview.action?pageId=6815032 @obs Função ExistTrigger Parâmetros + Nome do campo a ser verificado Retorno + .T. Se o campo possui gatilhos (X3_TRIGGER) ou .F. se não possui Função RunTrigger Parâmetros + nTipo , Numérico , Qual é o tiipo do gatilho (1=Enchoice; 2=Grid GetDados; 3=Consulta Padrão F3) + nLin , Numérico , Qual é a linha (quando o tipo for 2) + cMacro , Caractere , Compatibilidade + oObj , Objeto , Objeto da tela quando o tipo for 1 + cField , Caractere , Nome do campo que os gatilhos serão disparados Retorno Função não tem Retorno **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe162() Local aArea := FWGetArea() Local cCampo := "" //Inicia o controle de transações Begin Transaction //Joga a tabela para a memória (M->) RegToMemory(; "SA1",; // cAlias - Alias da Tabela .T.,; // lInc - Define se é uma operação de inclusão ou atualização .F.; // lDic - Define se irá inicilizar os campos conforme o dicionário ) //Preenche o estado e o código da cidade M->A1_EST := "SP" M->A1_COD_MUN := "06003" //Chama gatilho caso exista cCampo := "A1_COD_MUN" If ExistTrigger(cCampo) RunTrigger( ; 1,; //nTipo (1=Enchoice; 2=GetDados; 3=F3) Nil,; //Linha atual da Grid quando for tipo 2 Nil,; //Não utilizado ,; //Objeto quando for tipo 1 cCampo; //Campo que dispara o gatilho ) EndIf //Mostra a cidade preenchida conforme gatilho disparado FWAlertInfo("Cidade: " + M->A1_MUN, "Teste de ExistTrigger e RunTrigger") //Cancela a transação para não incluir nenhum registro DisarmTransaction() End Transaction FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Atílio, bom dia! Feliz 2024. Gostaria de acrescentar que muitas vezes alguma pessoa desaviada crie o gatilho via APSDU diretamente na tabela SX7. Sendo assim, pode ocorrer de um flag não ser gerado que é o X3_TRIGGER do campo que acionará o referido gatilho. Por conta desse flag, a função ExistTrigger retornará falso indicando que o gatilho não existe. Espero ter contribuído.
Boa tarde Robson, tudo joia?
Opa, um feliz e abençoado 2024 para você e para a família.
Agradecemos também o comentário e adendo, é de muita valia.
Se tiver outros feedbacks ou sugestões pode nos enviar.
Um grande abraço.