Fechar janela MVC

Em uma tela MVC, ao clicarmos no botão FECHAR, aparece essa tela com as opções ("Continuar Editando","Salvar","Sair da Página"). Existe algum método que possamos inibir essa telinha e fechar o formulário diretamente? Ou até então, inibir o botão 'Salvar' desta telinha?

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Bom dia Adriano,

Essa mensagem é exibida somente se houve alguma alteração em seu modelo, não é possível remover a mesma.

Caso nenhuma alteração tenha sido efetuada em tela, significa que o seu modelo está sendo alterado de alguma forma antes da view ser aberta, essa alteração pode estar sendo executada por conta de alguma condição no dicionário, ponto de entrada ou diretamente no código fonte.

Daniel, o problema é que na minha tela eu tenho várias validações, que são acionadas ao clicar no botão Confirmar. Daí, se eu alterar o alguma coisa, por exemplo digitar algo inválido e clicar no botão Fechar, vai aparecer a telinha com as três opções e uma delas é Salvar. Esse botão salvar não executa as validações do TudoOK do modelo entende? Logo o usuário grava um registo completamente inválido, pois não ter passado por nenhuma validação. Por isso eu queria uma forma de inibir aquele botão Salvar ou até então chamar todas as validações do modelo nele.

Adriano, não tem como, é padrão de todas as telas MVC, uma vez que o modelo consta como alterado, essa mensagem será exibida.

Não tem problema ela aparecer, mas o botão salvar dessa tela, tem que executar todas as validações do modelo e ela não faz, entende?

tenta no FWFormView():New() utilizar:

/ Desabilita o novo botao "salvar e criar novo" / oView:SetCloseOnOK({ || .T. })

Já testei e não resolve a situação. O botão salvar da telinha que aparece, não faz as validações do modelo.

Boa Tarde,

Já me vi nesta situação a um tempo atrás, senão me falha a memória atuei de forma que no commit identifica-se se ele havia passado pelas validações necessárias, caso não, retornava False na rotina, não realizava a gravação e não permitia sair da tela! Desta maneira o usuário da rotina não conseguiria prosseguir sem fazer o procedimento correto!

Atenciosamente,

A solução para meu problema foi a seguinte:
A rotina era chamada pela função FWExecView, passando os parâmetros assim como a função de validação geral da tela:
FWExecView( AllTrim(FwFilialName()) , “EXEMPLO1”, MODEL_OPERATION_INSERT, , { || .T. },{||u_VldGravacao()} )
Então, dentro do modelo, na declaração do mesmo, adicionei uma função no TudoOk: oModel := MPFormModel():New(‘MYMVC01R’,{ | | fTudoOk( FwModelActive() ) } )
E dentro dessa função ‘fTudoOk’ eu chamei a função de validação geral: u_VldGravacao(). Dessa forma, o botão ‘Salvar’ da telinha executa as validações do modelo.

Se tiver usando FWExecView(), no parâmetro responsável pelo botão cancelar (bCancel), adicione um bloco de código conforme exemplo:

FWExecView([ cTitulo ], , [ nOperation ], /[ oDlg ]/, [ bCloseOnOK ], [ bOk ], [ nPercReducao ], [ aEnableButtons ], [ bCancel ], [ cOperatId ], [ cToolBar ], [ oModelAct ])

Substituir bCancel por {|| MeuCancelar() }

Faça sua função da seguinte forma:


Static Function MeuCancelar()
    Local oModel := FWModelActive()

    If (!Empty(oModel))
        oModel:lModify := .F.
    EndIf
Return .T.

1 curtida