FWFormStruct
Gera estrutura de campos a partir da SX3 pra usar em ModelDef (tipo 1) ou ViewDef (tipo 2) do framework MVC.
Assinatura: FWFormStruct(nTipo, cAlias, bFiltro) -> oStruct
Retorna: object
FWFormStruct automatiza a criacao de estrutura de campos lendo o dicionario SX3 da tabela. Voce nao precisa declarar manualmente cada campo do cadastro — o framework lista todos os ativos da SX3.
Sintaxe
oStruct := FWFormStruct(nTipo, cAlias, bFiltro)
// nTipo: 1 = ModelDef (regras), 2 = ViewDef (visual)
// cAlias: tabela ("SB1", "SE1", etc.)
// bFiltro: bloco de codigo opcional pra filtrar camposUso basico
// No ModelDef:
Static Function ModelDef()
Local oStruct := FWFormStruct(1, "SB1")
Local oModel := MPFormModel():New("FooMDL", , , {|o| .T.})
oModel:AddFields("SB1MASTER", , oStruct)
Return oModel
// No ViewDef:
Static Function ViewDef()
Local oStruct := FWFormStruct(2, "SB1")
Local oView := FWFormView():New()
oView:SetModel(FWLoadModel("Foo"))
oView:AddField("VIEW_SB1", oStruct, "SB1MASTER")
Return oViewFiltrar campos visiveis
Pra mostrar so um subset (nao todos os 200 da SB1):
// So campos especificos
Local aCampos := {"B1_COD", "B1_DESC", "B1_TIPO", "B1_UM", "B1_GRUPO"}
Local oStruct := FWFormStruct(2, "SB1", {|cCampo| aScan(aCampos, AllTrim(cCampo)) > 0})Diferenca entre tipo 1 e 2
- Tipo 1 (Model): regras de negocio (obrigatoriedade, gatilhos, validacao). Pode incluir TODOS os campos da SX3 mesmo os invisiveis
- Tipo 2 (View): visual (largura, posicao, label). So inclui campos com
X3_VISUAL = 'A'ou que voce filtrou explicitamente
Pegadinhas
- Campos nao cadastrados na SX3 nao aparecem — sempre cadastre antes
- Mudancas na SX3 exigem recompilacao do cadastro pra refletir
- Performance: pra tabelas com 100+ campos visiveis, considere filtro pra abrir mais rapido
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
nTipo | Numeric | sim | 1 = ModelDef, 2 = ViewDef |
cAlias | Character | sim | Alias da tabela (deve estar na SX2) |
bFiltro | CodeBlock | não | Bloco {|cCampo| condicao} pra filtrar |
Exemplos
Struct simples
oStruct := FWFormStruct(1, "SA1")