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 :
separa um submodelo e exibi-lo em uma tela separada (Tela Modal) do formulário.
Exemplo
Em um formulário de pedido de compras localizado, o analista quer implementar uma função de rateio por item do pedido. Esse rateio deve aparecer quando o usuário selecionar a linha e clicar no botão rateio.
O rateio deve ser gravado na base junto com o formulário, ou seja no mesmo commit.
Definição do Modelo
O modelo que irá aparecer na tela separada deve ser submodelo do formulário, para que o commit seja feito corretamente
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} ViewDefModelDef Definição do interface modelo de Dados Data Model definition @author alvaro.camillo @since 05/09/2016 @version 1.0 /*/ //------------------------------------------------------------------- Static Function ViewDefModelDef() Local oView oModel := FWLoadView("MLOC001"FWLoadModel('MLOC003') Local oStr2 := FWFormStruct(21, 'ZL0ZL4') oStr2oModel: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:
addGrid('ZL4DETAIL','ZC4DETAIL',oStr2)
oModel:SetRelation('ZL4DETAIL', { { 'ZL4_FILIAL', 'xFilial("ZL4")' }, { 'ZL4_COD', 'ZC3_COD' }, { 'ZL4_ITEM', 'ZC4_ITEM' } }, ZL4->(IndexKey(1)) )
oModel:getModel('ZL4DETAIL'):SetDescription('Rateio do Item Russo')
oModel:getModel('ZL4DETAIL'):SetOptional(.T.)
Return oModel
|
Definição da Tela (ViewDef)
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 UI definition @author alvaro.camillo @since 0506/09/2016 @version 1.0 /*/ //------------------------------------------------------------------- Static Function ViewDef() Local oView := FWLoadView("MLOC003") //Formulário 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 Continuo oView:SetContinuousForm(.T.) oView:AddUserButton("Rateio","FILTRO",{|oModel,oView| ML03Rat(oModel,oView)})//"Condição Filtro" Return oView //------------------------------------------------------------------- /*/{Protheus.doc} ML03Rat Tela modal com os dados do Rateio @author alvaro.camillo @since 06/09/2016 @version 1.0 /*/ //------------------------------------------------------------------- Static Function ML03Rat(oViewPai) Local oStr2 := FWFormStruct(2, 'ZL0ZL4') //Local IniciaoView a View com uma View ja existente Local oView := FWLoadView("MLOC001"):= Nil Local oExecView := FWViewExec():New() Local oModel:= oViewPai:GetModel() Local lRet := .T. oStr2:RemoveField( 'ZL0ZL4_LOJACOD' ) oStr2:RemoveField( 'ZL0ZL4_CODITEM' ) // Altera o Modelo de dados quer será utilizado oView := FWFormView():New(oViewPai) oView:SetModel( oModel ) // Adiciona no nosso View um controle do tipo gridoModel) oView:SetOperation(oViewPai:GetOperation()) oView:AddGrid('VIEWFORM_ZL0ZL4' , oStr2,'ZL0DETAILZL4DETAIL') // É 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 oViewoView:CreateHorizontalBox( 'BOXFORM_ZL4', 100) oView:SetOwnerView('FORM_ZL4','BOXFORM_ZL4') oView:AddIncrementField('FORM_ZL4' , 'ZL4_ITRAT' ) oView:EnableTitleView('FORM_ZL4' , 'Rateio do Item Russo' ) //Proteção para execução com View ativa. If oModel != Nil .And. oModel:isActive() oExecView:setModel(oModel) oExecView:setView(oView) oExecView:setTitle('Rateio do Item Russo') oExecView:setOperation(oViewPai:GetOperation()) oExecView:setReduction(50) oExecView:SetCloseOnOk({|| .t.}) oExecView:openView(.F.) If oExecView:getButtonPress() == VIEW_BUTTON_OK lRet := .T. Endif EndIf Return lRet |
Status do documento | Desenvolvimento |
---|---|
Data | |
Versão | 1.0 |
Autores | Alvaro Camillo Neto |
Índice | ||||||
|