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 oViewCodigos de OPERATION
- 1: Pesquisar
- 2: Visualizar
- 3: Incluir
- 4: Alterar
- 5: Excluir
- 8: Imprimir
Pegadinhas comuns
- Tabela tem que estar cadastrada em SX2 (e dicionario SX3 com campos) ANTES de fazer MVC
- SetPrimaryKey obrigatorio: nomes exatos dos campos da chave primaria
- Static Function: ModelDef/ViewDef/MenuDef PRECISAM ser Static, nao User Function
- Naming:
FWLoadModel("CadProd")usa o nome da User Function, nao do arquivo
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