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 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.
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
//------------------------------------------------------------------- /*/{Protheus.doc} ModelDef Definição do modelo de Dados Data Model definition @author alvaro.camillo @since 05/09/2016 @version 1.0 /*/ //------------------------------------------------------------------- Static Function ModelDef() Local oModel := FWLoadModel('MLOC003') Local oStr2 := FWFormStruct(1,'ZL4')oModel: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)
Na definição da interface principal, o analista devem criar o botão, passando no bloco de execução a view original.
No exemplo, a função ML03Rat cria a tela modal, instanciando um novo objeto de FwFormView, passando como parâmetro a view original.
Com isso ao clicar no botão "Rateio"
Ao confirmar o formulário, o sistema irá gravar os itens do pedido e o rateio.
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
//------------------------------------------------------------------- /*/{Protheus.doc} ViewDef Definição do interface UI definition @author alvaro.camillo @since 06/09/2016 @version 1.0 /*/ //------------------------------------------------------------------- Static Function ViewDef() Local oView := FWLoadView("MLOC003") //Formulário 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,'ZL4') Local oView := Nil Local oExecView := FWViewExec():New() Local oModel:= oViewPai:GetModel() Local lRet := .T. oStr2:RemoveField( 'ZL4_COD' ) oStr2:RemoveField( 'ZL4_ITEM' ) oView := FWFormView():New(oViewPai) oView:SetModel(oModel) oView:SetOperation(oViewPai:GetOperation()) oView:AddGrid('FORM_ZL4' , oStr2,'ZL4DETAIL') oView: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 | ||||||
|