MVC alterar status do formulário

Olá pessoal,

gostaria de saber se existe algum método ou algumas variáveis que pudesse ser alteradas, para que um formulário MVC possa ser considerado como alterado mesmo que o formulário não tenha sido realmente alterado. Necessito disso pois na minha tela MVC eu adicionei um "OtherObject" onde em algumas situações eu posso alterar apenas o conteúdo dele (que não é padrão MVC) porém eu necessito que o form seja considerado como "sujo" e o sistema faça o commit como se eu tivesse realmente alterado algum campo dele.

1 curtida

Anderson, já tentou fazer a atualização de um valor do model quando o seu OtherObject for alterado? Mesmo voltando ao valor anterior, acredito que o MVC vai compreender que houve alteração.

Também é possível tentar criar um campo virtual no modelo, alterando o mesmo quando seu dados do OtherObject forem alterados.

Daniel, tentei e por algum motivo que eu não descobri, o valor do model não é alterado, não sei se é porque é chamado de dentro de um OtherObject, mas isso foi uma das primeiras coisas que experimentei.

Vou tentar com campo virtual.

Consegui alterando um campo do formulário mesmo sem ser virtual. O que estava faltando era um refresh na View, o que eu acho desnecessário uma vez quem deveria ser consultado da alteração é o model.

Anderson tudo bem ? Tenho a mesma necessidade que você. Poderia passar o trecho de codigo em que conseguiu aplicar está regra ? Muito obrigado

Edvar, fiz o seguinte:

oModel:SetValue(“SA2MASTER”, “A2_BLQPOR”, " ")
oModel:SetValue(“SA2MASTER”, “A2_BLQPOR”, cOrigVal)
oView:Refresh()

em cOrigVal eu salvo o valor original no início da função, altero para vazio e em seguida coloco o valor original novamente e dou o refresh na view.

Muito obrigado deu certo !!!

Anderson, boa tarde!

Infelizmente não conheço nenhuma função que altere o Status do Formulário para "alterado", mas gostaria de indicar uma possível alternativa: https://tdn.totvs.com/pages/viewpage.action?pageId=269552294

Dá uma olhada nessa documentação e vê se ela te atende para uma possível validação no teu commit.

A questão não é validar o commit e sim forçar um commit mesmo sem alteração no formulário. Acho que o modelo que foi criado o MVC, deveria permitir a confirmação do formulário mesmo sem alterações, gravando apenas os campos realmente alterados ou um método para alterar o status do formulário.
Fuçando no objeto eu já percebi que após alterado, se eu mudar a propriedade lModify do MPFormModel, ele deixa cancelar sem perguntar se o usuário deseja cancelar a edição de um formulário alterado, porém se ele ainda não foi alterado, não permite fazer o contrário.

Tive este mesmo problema a solução que encontrei, foi colocar meu form como opcional.


oModel:SetOptional('FormCons',.T.)

Não consegui usar o SetOptional. Ele dá vários erros logs e eu continuo com o problema para salvar o formulário!

Local oModel := Nil

Local oModelDet := Nil

Local oView := Nil

Local oObj := NIL

oModel := FWModelActive()

oModelDet := oModel:GetModel("ZZ1MASTER")

cProd := oModel:GetValue("ZZ1MASTER","ZZ1_COD" )

cLocal := oModel:GetValue("ZZ1MASTER","ZZ1_LOCAL")

F4Lote(,,,"MPCP051F", cProd, cLocal, Nil, "")

oModel:SetValue("ZZ1MASTER", "ZZ1_LOTECT", M->ZZ1_LOTECT)

oModel:LoadValue("ZZ1MASTER", "ZZ1_LOTECT", M->ZZ1_LOTECT)

oView := FwViewActive()

oView:Refresh()

Faça isso que vai funcionar, tenho um formulário parecido com o seu.

oView:lModify := .T.

1 curtida

Anderson, eu vi o seu comentário do dia 29 de Sep de 2020, como você conseguiu resolver. Preciso que um formulário já entre como se tivesse sido alterado pelo usuário