@cirilorocha Bom dia, segue o código abaixo!
//Bibliotecas
#Include “Totvs.ch”
#Include “FWMVCDef.ch”
//Variveis Estaticas
Static cTitulo := “Cadastro Motivo Cancelamento NF”
Static cAliasMVC := “Z37”
User function motCancNF()
Local o_Browse
//Instancia da classe do browse
o_Browse := FWMBrowse():New()
//Definicao da tabela
o_Browse:SetAlias(cAliasMVC)
//Titulo do Browse
o_Browse:SetDescription(cTitulo)
//Ativacao da classe
o_Browse:Activate()
return Nil
Static Function MenuDef()
Local a_Rotina := {}
//Adicionando opcoes do menu
ADD OPTION a_Rotina TITLE "Visualizar" ACTION "VIEWDEF.MOTCANCNF" OPERATION 2 ACCESS 0
ADD OPTION a_Rotina TITLE "Incluir" ACTION "VIEWDEF.MOTCANCNF" OPERATION 3 ACCESS 0
ADD OPTION a_Rotina TITLE "Alterar" ACTION "VIEWDEF.MOTCANCNF" OPERATION 4 ACCESS 0
ADD OPTION a_Rotina TITLE "Excluir" ACTION "VIEWDEF.MOTCANCNF" OPERATION 5 ACCESS 0
return a_Rotina
Static Function ModelDef()
Local o_StruModel
Local o_Model
//Carrega a estrutura dp dicionario de dados para o objeto do modelo, podendo alterar as propriedades
o_StruModel := FWFormStruct(1, cAliasMVC)
//Iniciativa o modelo de dados com validacoes em blocos de codigo
o_Model := MPFormModel():New("MODELZ37", Nil, { |o_Model| Z37OK(o_Model)}, Nil, Nil)
//Atribuir o formulario ao modelo
o_Model:AddFields("Z37MASTER", , o_StruModel)
//Adiciona Chave primaria
o_Model:SetPrimaryKey({"Z37_CODIGO"})
//Definimos o Titulo
o_Model:SetDescription(cTitulo + " - Model")
return o_Model
Static Function ViewDef()
Local o_Model
Local o_StruModel
Local o_View
//Carrega o Objeto do modelo de dados do fonte do parametro
o_Model := FWLoadModel("MOTCANCNF")
//Carrega a estrutura dp dicionario de dados para o objeto da view
o_StruModel := FWFormStruct(2, cAliasMVC)
//Inicia o objeto da view
o_View := FWFormView():New()
//Define qual modelo de dados sera utilizado na View
o_View:SetModel(o_Model)
//Adiciona a view vinculando a Modelo de dados
o_View:AddField("VIEW_Z37", o_StruModel, "Z37MASTER")
//Cria um box horizontal
o_View:CreateHorizontalBox("TELA", 100)
//titulo interno da tela do CRUD
o_View:EnableTitleView("VIEW_Z37", cTitulo + " - View")
//Relaciona a view a tela principal
o_View:SetOwnerView("VIEW_Z37", "TELA")
return o_View
Static Function Z37OK(o_Model)
Local l_Ret := .T.
Local n_Operation := o_Model:GetOperation()
//Validacao da inclusao ou alteracao
if n_Operation == 3 .or. n_Operation == 4
If o_Model:GetValue("Z37MASTER", "Z37_MSBLQL") == "1"
if !MsgYesNo("Deseja realmente bloquear o Motivo de Cancelamento?", "ATENCAO")
l_Ret := .F.
EndIf
EndIf
EndIf
Return l_Ret