FwMVCDef

Header que define o framework MVC do Protheus. Padrao de cadastro moderno: ModelDef (dados) + ViewDef (interface) + MenuDef (acoes).

Assinatura: #INCLUDE "FWMVCDEF.CH" + Static Function ModelDef|ViewDef|MenuDef

Retorna: object

FwMVCDef.ch e o header obrigatorio pra criar cadastros MVC modernos no Protheus. Substitui o velho AxCadastro e o MBrowse antigo. Permite cadastros mais elaborados com multiplas tabelas relacionadas.

Estrutura tripla

#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"

User Function CadProd()
    Local oBrowse := FWMBrowse():New()
    oBrowse:SetAlias("SB1")
    oBrowse:SetDescription("Produtos")
    oBrowse:Activate()
Return

// ============================================================
// MenuDef - acoes do browse
// ============================================================
Static Function MenuDef()
    Local aRot := {}
    ADD OPTION aRot TITLE "Visualizar" ACTION "VIEWDEF.CadProd" OPERATION 2 ACCESS 0
    ADD OPTION aRot TITLE "Incluir"    ACTION "VIEWDEF.CadProd" OPERATION 3 ACCESS 0
    ADD OPTION aRot TITLE "Alterar"    ACTION "VIEWDEF.CadProd" OPERATION 4 ACCESS 0
    ADD OPTION aRot TITLE "Excluir"    ACTION "VIEWDEF.CadProd" OPERATION 5 ACCESS 0
Return aRot

// ============================================================
// ModelDef - estrutura de dados
// ============================================================
Static Function ModelDef()
    Local oModel  := NIL
    Local oStruct := FWFormStruct(1, "SB1")

    oModel := MPFormModel():New("CadProdMDL", , , {|oMdl| Commit(oMdl)})
    oModel:AddFields("SB1MASTER", , oStruct)
    oModel:SetDescription("Cadastro de Produto")
    oModel:SetPrimaryKey({"B1_FILIAL", "B1_COD"})
Return oModel

// ============================================================
// ViewDef - interface visual
// ============================================================
Static Function ViewDef()
    Local oView   := NIL
    Local oModel  := FWLoadModel("CadProd")
    Local oStruct := FWFormStruct(2, "SB1")

    oView := FWFormView():New()
    oView:SetModel(oModel)
    oView:AddField("VIEW_SB1", oStruct, "SB1MASTER")
    oView:CreateHorizontalBox("PRINCIPAL", 100)
    oView:SetOwnerView("VIEW_SB1", "PRINCIPAL")
Return oView

Codigos de OPERATION

Pegadinhas comuns

Pra cadastros pais-filhos

FwMVCDef suporta sub-modelos (1:N). Use oModel:AddGrid() em vez de AddFields() pra adicionar tabela filha (ex: pedido + itens).

Exemplos

Skeleton MVC minimo

Static Function ModelDef()
    Local oModel := MPFormModel():New("FooMDL", , , {|o| .T.})
    oModel:AddFields("FOOMASTER", , FWFormStruct(1, "SB1"))
Return oModel

Veja também