MVC mestre-detalhe com AddFields e AddGrid
MPFormModel():New(); AddFields(); AddGrid(); SetRelation()Define mestre e detalhe com IDs e relação explícitos.
Visão geral
AddFields cria o primeiro submodelo, do tipo Field, para o mestre; AddGrid cria o detalhe com owner apontando para esse ID. SetRelation define como os dados do filho se ligam ao mestre e sua ordenação. O exemplo comunitário usa SBM/SB1; a adaptação usa tabelas fictícias ZZ1/ZZ2 para não sugerir alteração de cadastro padrão. A filial do filho é calculada por xFilial("ZZ2"), pois o compartilhamento pode diferir do mestre. O esquema e o índice devem ser criados e conferidos em homologação antes de avaliar o bloco. (Fontes: refs. 1–5.)
Sintaxe
MPFormModel():New(); AddFields(); AddGrid(); SetRelation()Exemplo comentado
#Include "Protheus.ch"
#Include "FWMVCDef.ch"
User Function Ed554()
// Exige dicionario de teste ZZ1/ZZ2.
Local bConstruir := {|| BuildModel()}
ConOut(ValType(bConstruir))
Return Nil
Static Function BuildModel()
Local oModelo := MPFormModel():New("ED554M")
Local oEstrutura := FWFormStruct(1,"ZZ1")
oModelo:AddFields("ZZ1MASTER",Nil,oEstrutura)
oModelo:AddGrid("ZZ2DETAIL","ZZ1MASTER",FWFormStruct(1,"ZZ2"))
oModelo:SetRelation("ZZ2DETAIL",{{"ZZ2_FILIAL",'xFilial("ZZ2")'},;
{"ZZ2_COD","ZZ1_COD"}},"ZZ2_FILIAL+ZZ2_COD+ZZ2_ITEM")
oModelo:SetPrimaryKey({"ZZ1_FILIAL","ZZ1_COD"})
Return oModeloImprime B; o helper não é avaliado e não cria nem grava tabelas. Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.
- Conferir tipos e tamanhos de campos, chave primária, relação e índice real antes de ativar. Testar validação, cancelamento e persistência separadamente; a View deve apontar para os IDs dos submodelos corretos.
- Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.

Comentários
Ainda não há comentários aprovados.
Entre com Google ou Microsoft para comentar.