Bom Dia,
Criei uma tela em MVC que exibe uma modelo X com pai, filho e neto em modo de visualização.
Após atualizar um valor no banco, gostaria que esse valor refletisse na janela sem fechar a abrir novamente.
Tentei usar o FWViewActive e dar um refresh, mas mesmo assim os dados não são atualizados.
Alguém pode me ajudar, por favor?
Grato.
Rubens, tudo bom!
Como já foi falado neste post o certo é você utilizar a classe TTimer - TOTVSTEC - TDN, o objeto Timer setado na View irá te dar meios para atualizar a tela. Para que funcione perfeitamente, na função que você chamar no temporizador você tera que manipular a operação do modelo, exemplo, se abriu a tela como modo vizualização, esta operação não permite realizar nenhuma alteração de dados, você deverá trocar para a operação de alteração, realizar a mudança, e após voltar a operação original.
Fiz algo muito parecido com a sua duvida e funciona perfeitamente.
oView:SetTimer( nMlsTime, {|| U_fAtuTela( oModel, oView )})
User Function fAtuTela( oModel, oView )
Local nOperation := oModel:GetOperation()
oModel:DeActivate()
oModel:SetOperation(4)
oModel:Activate()
atualizando os campos....
oView:Refresh("FLDZP6")
oModel:DeActivate()
oModel:SetOperation( nOperation )
oModel:Activate()
Return .T.
Boa tarde,
Tenho uma rotina nessa mesma estrutura, para atualizar a View utilizo desse jeito.
If Type( 'oView' ) != "U"
oView:Refresh( 'V_FILHO2')
EndIf
Sendo que o oView é o retorno da funçõa viewdef()
Boa Tarde Ruann,
Fiz dessa forma:
oView:= FWViewActive()
oView:Refresh(“VIEW_SZ2”)
mas acontece o mesmo problema.
Se um outro usuário altera um dados, a tela aberta não reflete essa alteração após o refresh().
Rubens, no caso vocês está falando, o usuário A está com a tela aberta, ai o usuário B faz uma alteração, ai vc quer atualizar a tela do usuário A? Nesse caso vc tem q recarregar os dados novamente no modelo e atualizar a view.
Exatamente isso, até o momento estou precisando fechar a tela e abrir novamente. Tem alguma forma de dar o refresh nos dados?
Complementando o que o Ruann disse.
Segue o link da função Refresh http://tdn.totvs.com/display/framework/FWFormView.
Att
Saudações Rubens,
Veja a classe https://tdn.totvs.com/display/tec/TTimer
Ela cria um objeto que executa um bloco de código respeitando o temporizador, atrelado a um componente da interface visual.
Fala Rubens,
Acho que isso pode te ajudar. Funcionou comigo.
oModel := FWModelActive()
If oModel:IsActive()
oModel:DeActivate()
EndIf
oModel:Activate()
//restante do código