Abrindo uma tela MVC com FWExecView – Maratona AdvPL e TL++ 216

Nesse vídeo demonstraremos a utilização da função FWExecView, que serve para abrir uma tela em MVC.

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

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

/*/{Protheus.doc} User Function zExe216
Exemplo de função que abre uma tela em MVC
@type Function
@author Atilio
@since 20/02/2023
@see https://tdn.totvs.com/display/public/framework/FWExecView
@obs 

    Função FWExecView
    Parâmetros
        + cTitulo        , Caractere       , Título da Janela
        + cPrograma      , Caractere       , Nome do programa em MVC
        + nOperation     , Numérico        , Indica a operação se é inclusão (3); alteração (4) ou exclusão (5)
        + oDlg           , Objeto          , Parâmetro descontinuado
        + bCloseOnOK     , Bloco de Código , Bloco de código acionado no fechamento da janela
        + bOk            , Bloco de Código , Bloco de código acionado na validação ao clicar em Confirmar
        + nPercReducao   , Numérico        , Percentual de redução do tamanho da Janela
        + aEnableButtons , Array           , Botões que serão habilitados na Janela
        + bCancel        , Bloco de Código , Bloco de código na validação ao clicar em Cancelar / Fechar
        + cOperatId      , Caractere       , Identificação da operação (usado quando tem mais de um 4 no nOperation no programa MVC)
        + cToolBar       , Caractere       , Indica o relacionamento dos botões com a tela
        + oModelAct      , Objeto          , Model instanciado que será usado pela View
    Retorno
        + nValor        , Numérico  , 0 se foi clicado em Ok e 1 se foi clicado em Cancelar

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

User Function zExe216()
    Local aArea := FWGetArea()
    Local cFunBkp := FunName()
     
    DbSelectArea('SA2')
    SA2->(DbSetOrder(1)) //Filial + Código + Loja
     
    //Se conseguir posicionar
    If SA2->(DbSeek(FWxFilial('SA2') + "F00002"))
        SetFunName("MATA020")
        FWExecView('Visualizacao Teste', 'MATA020', MODEL_OPERATION_VIEW)
        SetFunName(cFunBkp)
    EndIf

    FWRestArea(aArea)
Return

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.

2 Responses

  1. Felipe disse:

    Excelente o exemplo e a explicação.
    gostaria de saber se tem um exemplo para abrir outra rotina MVC por cima da principal, por exemplo pelo Outras Ações, quando faço isso as legendas, visualização e outras ações permanecem da tela mvp principal.

    • Bom dia Felipe, tudo joia?

      Opa, primeiramente obrigado pelo feedback.

      Então, recentemente perguntaram algo parecido no nosso grupo do WhatsApp, segue a resposta que enviamos na ocasião:
      […]
      Supondo então que você precise acionar outra rotina em MVC por cima de uma, o que acontece que é a aRotina e outras variáveis ficarão com o conteúdo da principal.

      Para isso, o ideal é você fazer um backup da função e depois restaurar ela, por exemplo, supondo que você esteja na MATA010 (produtos), ai quer abrir o cadastro de clientes (CRMA980) através do Outras Ações. Sendo que ambas as rotinas são em MVC, como funcionaria?

      1. Você teria uma User Function que você vai adicionar no Outras Ações
      2. Dentro dessa User Function, você faz um backup da rotina atual (MATA010), pegando FunName em uso
      3. Ai você muda a função para a de cadastro de clientes (define FunName como CRMA980)
      4. Aciona o cadastro de clientes
      5. Ai quando o usuário fechar o cadastro de clientes, você volta o backup feito no passo 2, algo mais ou menos como a lógica abaixo

      User Function zTstCli()
      Local aArea := FWGetArea()
      Local cBkpFun := FunName()

      //Define a função como a de clientes, e aciona ela em seguida (dessa forma vai carregar o menu e as informações corretamente)
      SetFunName(“CRMA980”)
      CRMA980()

      //Volta o backup
      SetFunName(cBkpFun)

      FWRestArea(aArea)
      Return
      […]

      Um grande abraço.

Deixe uma resposta

Terminal de Informação