Fechando uma tela em MVC através de comandos | Ti Responde 0214

No vídeo de hoje, vamos demonstrar em como acionar o fechar de uma tela em MVC utilizando código fonte.

A dúvida de hoje, nos perguntaram, se teria como encerrar uma tela em MVC, igual era nas dialogs antigas onde usávamos o método :End().

 

Pensando nisso, montamos um exemplo, onde vamos mostrar em como interceptar o bloco de código do fechar (através do bAction) e depois executar ele via código fonte.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

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

/*/{Protheus.doc} User Function zVid0214
Função para simular o fechar em MVC sem clicar no botão Fechar
@type  Function
@author Atilio
@since 30/09/2024
/*/

User Function zVid0214()
    Local aArea   := FWGetArea()
    Local cFunBkp := FunName()
     
    DbSelectArea('SA2')
    SA2->(DbSetOrder(1)) //Filial + Código + Loja
     
    //Se conseguir posicionar no Fornecedor
    If SA2->(DbSeek(FWxFilial('SA2') + "F00002"))
        //Define o atalho
        SetKey(K_CTRL_H, { || fFechaMVC() }) 
        
        //Abre a tela de fornecedores
        SetFunName("MATA020")
        FWExecView('Visualizacao Teste', 'MATA020', MODEL_OPERATION_VIEW)
        SetFunName(cFunBkp)

        //Desativa o atalho, após sair da tela de fornecedores
        SetKey(K_CTRL_H, Nil) 
    EndIf

    FWRestArea(aArea)
Return

Static Function fFechaMVC()
    Local aArea := FWGetArea()
    Local nAtual
	Local bAction := {|| }
    //Busca a tela e os objetos dentro dela
    Private nAtuPvt
    Private oPai       := GetWndDefault()
    Private aControles := oPai:aControls
 
    //Percorre todos os objetos da tela
    For nAtual := 1 To Len(aControles)
        nAtuPvt := nAtual
 
        //Intercepta o botão de fehcar e tela
        If ValAtrib("aControles[nAtuPvt]:bAction") != "U" 
            //Se o texto do botão for Fechar
			If Upper(Alltrim(aControles[nAtuPvt]:cCaption)) == "FECHAR"

                //Captura o bAction do botão e dispara ele
                bAction := aControles[nAtuPvt]:bAction
                eVal(bAction)
			EndIf
        EndIf
 
    Next
 
    FWRestArea(aArea)
Return

Static Function ValAtrib(cVar)
Return Type(cVar)

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