advpl-mvclisted
Install: claude install-skill JoniPraia/plugadvpl
# advpl-mvc — Framework MVC do Protheus
A partir do release 11 da TOTVS, cadastros e processos no Protheus usam o framework **MVC** (FWMVC). O padrão legado `AxCadastro`/`Modelo2`/`Modelo3` é deprecado (catalogado como `MOD-004` no lint).
Uma rotina MVC tem **3 funções estáticas obrigatórias** + um menu:
- `MenuDef()` → retorna `aRotina` (entradas de menu, ações disponíveis).
- `ModelDef()` → retorna `oModel` (estrutura de dados, validações, hooks).
- `ViewDef()` → retorna `oView` (interface gráfica, vinculação ao model).
## Quando usar
- Criar/editar cadastro Protheus (CRUD) — sempre MVC pra código novo.
- Adicionar validação a cadastro existente (via PE `<Rotina>MOD` ou InstallEvent).
- Trabalhar com sub-models (cabeçalho/itens, ex: pedido + itens).
- Refatorar `AxCadastro`/`Modelo2`/`Modelo3` legado (`MOD-004`).
- Edit em arquivo MVC identificado por `/plugadvpl:tables` ou `/plugadvpl:arch`.
## Estrutura mínima moderna (TLPP-style)
```advpl
#include "TOTVS.CH"
#include "FWMVCDef.CH"
User Function XYZCAD()
Local oBrowse := FWMBrowse():New()
oBrowse:SetAlias("ZZZ")
oBrowse:SetMenuDef("XYZCAD") // referencia a propria MenuDef
oBrowse:SetDescription("Cadastro XYZ")
oBrowse:Activate()
Return Nil
Static Function MenuDef()
Return FWMVCMenu("XYZCAD") // gera aRotina padrao (View/Insert/Update/Delete/Print/Copy)
End
Static Function ModelDef()
Local oModel := MPFormModel():New("XYZCADMD") // 5 params; hoje passa só cIDModel