Tengo un programa MVC, para mantener dos tablas específicas. El problema es el siguiente: - La persistencia del modelo es estándar Al finalizar la ejecución de la grabación no devuelve la tradicional ventana "Registro ingresado con éxito", si no que regresa al FWMBrowse original y cuando se presiona en la X para regresar al menú principal, recién allí es donde efectivamente termina de efectuar la persistencia, emitiendo la tradicional ventan a de "Registro ingresado con éxito". Ya he probado de mil formas y llegué a la conclusión que el problema radica en la función FWFormCommit(). Deduciendo, no libera la ventana de edición de las tablas, se queda "pensando" sobre la imagen del FWMBrowse y cuando se presiona sobre la X para cerrar la grilla, recién en ese momento devuelve el control al programa principal. Le he seguido desde del debbug y así se comporta. Alguien ha experimentado este inconveniente ?
Adiciona esses comandos no final da configuração da viewdef
oView:EnableControlBar(.T.)
oView:SetCloseOnOk( { || .T. } )
oView:SetProgressBar(.T.)
Já me deparei com essa situação, tem duas possibilidades:
- Você está usando o nome do objeto MVC o mesmo nome da user function da sua rotina. No seu ModelDef() quando instancia o objeto MpFormModel():New() o primeiro parâmetro desse método é o nome do objeto MVC, não pode ser o mesmo nome da user function usada no seu fonte. Esse parâmetro é para chamar o ponto de entrada padrão do MVC, se usar o mesmo nome da sua função, vai ficar chamando em loop, precisa ser um nome diferente.
- Execução de gatilhos extrangeiros, nunca usei esse tipo de gatilho mas já me deparei com essa situação, onde o sistema chama novamente a própria rotina. E a função chamadora é a de execução de gatilhos extrangeiros EvalGeneric(). Para resolver fiz o seguinte tratamento na minha função principal:
//Tive que fazer essa proteção porque o padrão está chamando esse fonte recursivamente por
// conta da função EvalTrigger()->EvalGeneric() dentro do ExecAuto
If FWIsInCallStack(‘EVALGENERIC’)
Return
EndIf