Criando gatilhos com a FWStruTrigger – Maratona AdvPL e TL++ 248

Nesse vídeo demonstraremos a utilização da classe FWStruTrigger, que serve para criar gatilhos em telas usando MVC.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "Totvs.ch"
#Include "FWMVCDef.ch"

//Variveis Estaticas
Static cTitulo := "Grupo de Produtos"
Static cAliasMVC := "SBM"

/*/{Protheus.doc} User Function zExe248
Grupo de Produtos (teste de FWStruTrigger)
@author Atilio
@since 20/02/2023
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see https://tdn.totvs.com/display/public/framework/FwStruTrigger e http://autumncodemaker.com
@obs 
    
	Função FWStruTrigger
    Parâmetros
		+ cDom           , Caractere       , Campo Origem
		+ cCDom          , Caractere       , Campo Destino
		+ cRegra         , Caractere       , Regra de Preenchimento
		+ lSeek          , Lógico          , Irá Posicionar?
		+ cAlias         , Caractere       , Alias de Posicionamento
		+ nOrdem         , Numérico        , Índice de Posicionamento
		+ cChave         , Caractere       , Chave de Posicionamento
		+ cCondic        , Caractere       , Condição para execução do gatilho
		+ cSequen        , Caractere       , Sequência do gatilho
    Retorno
        + aRetorno       , Array           , Array com os dados que serão necessários para a Struct

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe248()
	Local aArea   := FWGetArea()
	Local oBrowse
	Private aRotina := {}

	//Definicao do menu
	aRotina := MenuDef()

	//Instanciando o browse
	oBrowse := FWMBrowse():New()
	oBrowse:SetAlias(cAliasMVC)
	oBrowse:SetDescription(cTitulo)
	oBrowse:DisableDetails()

	//Ativa a Browse
	oBrowse:Activate()

	FWRestArea(aArea)
Return Nil

/*/{Protheus.doc} MenuDef
Menu de opcoes na funcao zExe248
@author Atilio
@since 20/02/2023
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/

Static Function MenuDef()
	Local aRotina := {}

	//Adicionando opcoes do menu
	ADD OPTION aRotina TITLE "Visualizar" ACTION "VIEWDEF.Exemplo_248_Funcao_FWStruTriggger" OPERATION 1 ACCESS 0
	ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.Exemplo_248_Funcao_FWStruTriggger" OPERATION 3 ACCESS 0
	ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.Exemplo_248_Funcao_FWStruTriggger" OPERATION 4 ACCESS 0
	ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.Exemplo_248_Funcao_FWStruTriggger" OPERATION 5 ACCESS 0

Return aRotina

/*/{Protheus.doc} ModelDef
Modelo de dados na funcao zExe248
@author Atilio
@since 20/02/2023
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/

Static Function ModelDef()
	Local oStruct := FWFormStruct(1, cAliasMVC)
	Local oModel
	Local bPre := Nil
	Local bPos := Nil
	Local bCommit := Nil
	Local bCancel := Nil
    Local aGatilhos := {}
    Local nAtual

    //Adicionando um gatilho, do codigo para data
    aAdd(aGatilhos, FWStruTriggger( ;
        "BM_GRUPO",;                                //Campo Origem
        "BM_DESC",;                                 //Campo Destino
        "'Grupo ' + Replicate('x', 10)",;           //Regra de Preenchimento
        .F.,;                                       //Irá Posicionar?
        "",;                                        //Alias de Posicionamento
        0,;                                         //Índice de Posicionamento
        '',;                                        //Chave de Posicionamento
        NIL,;                                       //Condição para execução do gatilho
        "01");                                      //Sequência do gatilho
    )

    aAdd(aGatilhos, FWStruTriggger( ;
        "BM_DESC",;                                 //Campo Origem
        "BM_PROORI",;                               //Campo Destino
        "'1'",;                                     //Regra de Preenchimento
        .F.,;                                       //Irá Posicionar?
        "",;                                        //Alias de Posicionamento
        0,;                                         //Índice de Posicionamento
        '',;                                        //Chave de Posicionamento
        NIL,;                                       //Condição para execução do gatilho
        "01");                                      //Sequência do gatilho
    )
 
    //Percorrendo os gatilhos e adicionando na Struct
    For nAtual := 1 To Len(aGatilhos)
        oStruct:AddTrigger( ;
            aGatilhos[nAtual][01],; //Campo Origem
            aGatilhos[nAtual][02],; //Campo Destino
            aGatilhos[nAtual][03],; //Bloco de código na validação da execução do gatilho
            aGatilhos[nAtual][04];  //Bloco de código de execução do gatilho
        )
    Next


	//Cria o modelo de dados para cadastro
	oModel := MPFormModel():New("zExe248M", bPre, bPos, bCommit, bCancel)
	oModel:AddFields("SBMMASTER", /*cOwner*/, oStruct)
	oModel:SetDescription("Modelo de dados - " + cTitulo)
	oModel:GetModel("SBMMASTER"):SetDescription( "Dados de - " + cTitulo)
	oModel:SetPrimaryKey({})
Return oModel

/*/{Protheus.doc} ViewDef
Visualizacao de dados na funcao zExe248
@author Atilio
@since 20/02/2023
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/

Static Function ViewDef()
	Local oModel := ModelDef()
	Local oStruct := FWFormStruct(2, cAliasMVC)
	Local oView

	//Cria a visualizacao do cadastro
	oView := FWFormView():New()
	oView:SetModel(oModel)
	oView:AddField("VIEW_SBM", oStruct, "SBMMASTER")
	oView:CreateHorizontalBox("TELA" , 100 )
	oView:SetOwnerView("VIEW_SBM", "TELA")

Return oView

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação