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).
- Criando uma nova view.
Informações | ||
---|---|---|
| ||
Para o filtro de campos funcionar corretamente, na definição da view deve ser utilizada a função FwLoadModel para carregar o modelo. Não utilize ModelDef() |
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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
//------------------------------------------------------------------- /*/{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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
//------------------------------------------------------------------- /*/{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 |
Criando uma nova View
Esse método pode ser utilizado quando existe a necessidade de reposicionamento dos elementos do fonte padrão, nele você irá montar uma nova view com o modelo.
Para melhorar o reaproveitamento, você pode utilizar o método GetViewStruct para utilizar a estrutura de campos da view do fonte padrão.
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Static Function ViewDef()
Local oModel := FWLoadModel( 'POC001' )
Local oViewPad := FWLoadView( 'POC001' )
Local oStruLoc := FWFormStruct(2, 'XXX',{|cCampo| ALLTRIM(cCampo) $ "XX_FILIAL|XX_NUM|XX_PRODUTO" })
Local oStruCab := oViewPad:GetViewStruct('VIEW_CAB') // Busca Estrutura do padrão
Local oStruItem := oViewPad:GetViewStruct('VIEW_DETAIL')// Busca Estrutura do padrão
Local oView := Nil
oView := FWFormView():New()
oView:SetModel(oModel)
oView:AddField('VIEW_CAB' , oStruCab , 'XXMASTER' )
oView:AddField('VIEW_LOC' , oStruLoc , 'XXLOC' )
oView:AddGrid( 'VIEW_DETAIL' , oStruItem, 'XXDETAIL' )
oView:CreateHorizontalBox( 'SUPERIOR', 20 )
oView:CreateHorizontalBox( 'MEIO' , 10 )
oView:CreateHorizontalBox( 'INFERIOR', 70 )
oView:SetOwnerView( 'VIEW_CAB' , 'SUPERIOR' )
oView:SetOwnerView( 'VIEW_LOC' , 'MEIO' )
oView:SetOwnerView( 'VIEW_DETAIL' , 'INFERIOR' )
Return oView |
Status do documento | Desenvolvimento |
---|---|
Data | |
Versão | 1.0 |
Autores | Alvaro Camillo Neto |
Índice | ||||||
|