Páginas filhas
  • Interceptação do Commit e Validação MVC - FWModelEvent

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Conceito

Utilizando a tecnologia MVC para construir o seu formulário é possível reaproveitar a interface em outros contextos como por exemplo em uma localização para outro país.

Existem os métodos para realizar esse reaproveitamento de interface, dependendo da sua necessidade :

  • Utilizando o formulário contínuo.
  •  

     

    Criando uma nova box ( horizontal ou vertical).

    Utilizando o formulário contínuo

    Com esse método você pode incluir novos componentes (Grids e Fields) incluindo abaixo dos componentes originais num formulário contínuo como uma página web.

    Para isso é preciso configurar o FwFormView com o método SetContinuousForm (FWFormView). 

    Importante salientar que a definição dessa propriedade deve ser feita somente no novo formulário. Não é preciso configurar o formulário contínuo no fonte original.

    Bloco de código
    languagecpp
    themeEclipse
    firstline1
    titleExemplo de herança de interface (formulário continuo)
    linenumberstrue
    //-------------------------------------------------------------------
    /*/{Protheus.doc} ViewDef
    Definição do interface
    @author alvaro.camillo
    @since 05/09/2016
    @version 1.0
    /*/
    //-------------------------------------------------------------------
    Static Function ViewDef()
    Local oView	:= FWLoadView("MLOC001")
    Local oStr2	:= FWFormStruct(2, 'ZL0')
    oStr2:RemoveField( 'ZL0_LOJA' )
    oStr2:RemoveField( 'ZL0_COD' )
    //Formulário Continuo 
    oView:SetContinuousForm(.T.)
    oView:AddGrid('FORM3' , oStr2,'ZL0DETAIL') 
    //Criação da box com tamanho 00 pois o formulario continuo irá calcular o tamanho da tela. 
    oView:CreateHorizontalBox( 'BOXFORM3', 00)
    oView:SetOwnerView('FORM3','BOXFORM3')
    oView:AddIncrementField('FORM3' , 'ZL0_ITEM' ) 
    oView:EnableTitleView('FORM3' , 'Endereço Russo' ) 
    Return oView

     

    Criando uma nova box (horizontal ou vertical).

    Esse método pode ser utilizado quando existe a necessidade de personalizar ainda mais a tela, podendo alterar inclusive a disposição dos componentes da tela.

    Porém esse método possui as seguintes desvantagens:

    • O analista precisa conhecer os detalhes da implementação do fonte de origem, pois é preciso saber o nome do painel(box) do fonte original.
    • Caso o mantenedor do fonte de origem resolva mudar a disposição ou refatorar os nomes do elementos, o fonte derivado deverá ser alterado para continuar funcionando.

    Para realizar essa operação, é preciso criar um novo box para o novo componente.É preciso criar sempre um box vertical dentro de um horizontal e vice-versa.

    Nesse ponto é preciso verificar no fonte de origem qual é o ID do box e qual é a sua orientação.


    Bloco de código
    languagecpp
    themeEclipse
    firstline1
    titleExemplo de herança de interface (criando um novo box)
    linenumberstrue
    //-------------------------------------------------------------------
    /*/{Protheus.doc} ViewDef
    Definição do interface
    @author alvaro.camillo
    @since 05/09/2016
    @version 1.0
    /*/
    //-------------------------------------------------------------------
    Static Function ViewDef()
    // Cria um objeto de Modelo de Dados baseado no ModelDef do fonte informado
    Local oModel := FWLoadModel( 'MLOC001View' )
    // Cria a estrutura a ser acrescentada na View
    Local oStr2	:= FWFormStruct(2, 'ZL0')
    // Inicia a View com uma View ja existente
    Local oView	:= FWLoadView("MLOC001")
    oStr2:RemoveField( 'ZL0_LOJA' )
    oStr2:RemoveField( 'ZL0_COD' )
    // Altera o Modelo de dados quer será utilizado
    oView:SetModel( oModel )
    // Adiciona no nosso View um controle do tipo grid
    oView:AddGrid('VIEW_ZL0' , oStr2,'ZL0DETAIL')
    // É preciso criar sempre um box vertical dentro de um horizontal e vice-versa
    // como na MLOC001 o box é horizontal, cria-se um vertical primeiro
    // Box existente na interface original
    oView:CreateVerticallBox( 'TELANOVA' , 100, 'BOXFORM1' )
    // Novos Boxes
    oView:CreateHorizontalBox( 'SUPERIOR' , 50, 'TELANOVA' )
    oView:CreateHorizontalBox( 'INFERIOR' , 50, 'TELANOVA' )
    // Relaciona o identificador (ID) da View com o "box" para exibicao
    oView:SetOwnerView( 'FORM1', 'SUPERIOR' )
    oView:SetOwnerView( 'VIEW_ZL0', 'INFERIOR' )
     
    Return oView


    Status do documentoDesenvolvimento
    Data 
    Versão1.0
    Autores

    Alvaro Camillo Neto

    Índice
    Índice
    outlinetrue
    indent10px

    ...