Pular para conteúdo

MVC no Protheus

Status: parcial — afirmações verificadas, com lacunas declaradas. [n · F] remete à fonte n da lista de fontes; a letra marca a procedência: F fato em fonte oficial TOTVS/TDN · S fonte secundária (blog, fórum) · unverified sem fonte que sustente.

Escopo desta seção

A anatomia de uma tela MVC — ModelDef, ViewDef, MenuDef e BrowseDef —, a nomenclatura Modelo 1 / Modelo 3 (e por que ela merece ressalva) e o par FWFormModel / FWFormView que sustenta a separação entre regra e interface.

As três funções reservadas

  • As três funções reservadas: ModelDef constrói a definição do Model, que contém as regras de negócio; ViewDef constrói a View, ou seja, a interface; MenuDef define as operações disponíveis para o modelo de dados.[69 · F]
  • Cada fonte MVC em .PRW só pode conter uma ModelDef, uma ViewDef e uma MenuDef.[69 · F]
  • A cadeia completa inclui BrowseDef(); ModelDef devolve FWFormModel (regras de negócio) e ViewDef devolve FWFormView (layout visual).[50 · F]

Sobre a fonte [50]

É documento escrito para agentes de IA no repositório oficial TOTVS engpro-advpl-tlpp-skills — oficial pela origem, mas não a página canônica do framework. Mantido como fonte oficial por procedência, não por autoridade de manual.

Modelo 1, Modelo 3, Modelo X — com ressalva

  • "Modelo 1" é uma entidade/tabela; "Modelo 3" é mestre-detalhe com cabeçalho e grid; existe ainda "Modelo X" com três níveis. O exemplo citado é SBM (Modelo 1), SBM+SB1 (Modelo 3) e SBM+SB1+SB2 (Modelo X).[62 · S]

A nomenclatura não é normativa

"Modelo 1/3" não aparece no manual oficial do MVC[69] nem na página "Fontes em MVC"[32]. É convenção de mercado — útil para conversar, ruim para citar como termo do manual.

A estrutura, na prática

  • FWFormView fornece interface gráfica para um model (FWFormModel/MPFormModel) e suporta formulário do tipo FormField, com um registro por vez, e do tipo FormGrid.[30 · F]
  • Padrão de ViewDef: FWFormView():New(), FWFormStruct(2,"SA1"), SetModel(oModel) e AddField(...).[30 · F]
  • No ModelDef usa-se FWFormStruct(1, alias); em fonte existente, FWLoadModel("MATA010_MVC") carrega o model pronto.[30 · F]
  • FWFormStruct faz a carga dos campos do dicionário para a estrutura.[30 · F]
  • Rotinas MVC padrão declaram Model e componentes (master mais grid), o que evidencia o padrão mestre-detalhe: TECA080 com AddFields AA6MASTER e AddGrid AA6GRID.[32 · F]

Lacunas declaradas

Lacuna: as páginas TDN próprias de FWFormModel, FWFormBrowse e FWFormStruct não foram lidas. A evidência de MVC aqui vem de FWFormView[30] e do manual oficial em PDF[69].

Lacuna: a correspondência com TLPP — desde quando o MVC roda em .tlpp — está em Migração.

Fontes

[30] · [32] · [50] · [62] · [69] — ver lista completa.