Páginas filhas
  • Criando uma tela MVC só com GRID

Versões comparadas

Chave

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

...

Abaixo um exemplo de como fazer isso, criando um Grid de Produtos ( SB1 ) sem cabeçalho.


Bloco de código
titleGrid Sem CabeçalhoMVCSOGRID.prw
linenumberstrue
#include "#Include 'protheus.ch'"
#Include#include '"fwmvcdef.ch'"

#Define#define MVC_TITLE 'GRID Sem Cabeçalho' "Grid MVC sem cabeçalho"
#define MVC_ALIAS "SB1"
#define MVC_VIEWDEF_NAME "VIEWDEF.MVCSOGRID"

//-------------------------------------------------------------------
/*/{Protheus.doc} uU_semcabecMVCGRID
	Função principal da rotina MVC. Chama direto a inclusão

@author Daniel izac.ciszevskiMendes
@since   16.03.202010/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
Function u_xt18443()
	FWExecView( 'GRID Sem Cabeçalho', "VIEWDEF.SEMCABEC", MODEL_OPERATION_INSERT, , { || .T. }, , 30 )
Returnuser function MVCGRID()
//Inserção - Inclusão de itens
FWExecView( getTitle(MODEL_OPERATION_INSERT), MVC_VIEWDEF_NAME, MODEL_OPERATION_INSERT)

//Visualização - Verificar os itens incluídos
FWExecView( getTitle(MODEL_OPERATION_VIEW), MVC_VIEWDEF_NAME, MODEL_OPERATION_VIEW)

//Alteração - Por ser um grid, a alteração já vai permitir a exclusão
FWExecView( getTitle(MODEL_OPERATION_UPDATE), MVC_VIEWDEF_NAME, MODEL_OPERATION_UPDATE)

//Visualização - Verificar os itens adicionados, alterados ou excluidos
FWExecView( getTitle(MODEL_OPERATION_VIEW), MVC_VIEWDEF_NAME, MODEL_OPERATION_VIEW)
return

//-------------------------------------------------------------------
/*/{Protheus.doc} getTitle
Retorna o título para a janela MVC, conforme operação

@param nOperation - Operação do modelo

@return cTitle - String com o título da janela

@author Daniel Mendes
@since 10/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
static function getTitle(nOperation)
local cTitle as character

if nOperation == MODEL_OPERATION_INSERT
    cTitle := "Inclusão"
elseif nOperation == MODEL_OPERATION_UPDATE
    cTitle := "Alteração"
else
    cTitle := "Visualização"
endif

return cTitle

//-------------------------------------------------------------------
/*/{Protheus.doc} ModelDef
	Montagem do modelo dados para MVC

@return oModel - Objeto do modelo de dados

@author Daniel izac.ciszevskiMendes
@since   16.03.202010/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
Staticstatic Functionfunction ModelDef()
	Locallocal oModel as As Object
	Localobject
local oStrField Asas Objectobject
	Locallocal oStrGrid Asas Objectobject

	// Estrutura Fake de Field
	oStrField := FWFormModelStruct():New()

	oStrField:AddTable( '' addTable("", { '"C_STRING1' "} , MVC_TITLE , {|| ''""} )
	oStrField:AddFieldaddField( '"String 01' ", '"Campo de texto' ", '"C_STRING1' ", '"C' ", 15 )

	//Estrutura de Grid
	, alias Real presente no dicionário de dados
oStrGrid := FWFormStruct( 1, 'SB1' )

	MVC_ALIAS)
oModel := MPFormModel():New( '"MIDMAIN' ")

	oModel:AddFieldsaddFields('"CABID'", /*cOwner*/, oStrField, /*bPre*/, /*bPost*/, {|oMdl| loadHidFld()})

	oModel:AddGridaddGrid( '"GRIDID'", '"CABID'", oStrGrid, /*bLinePre*/, /*bLinePost*/, /*bPre*/, /*bPost*/, {|oMdl| loadGrid(oMdl)})

	oModel:SetRelation( 'GRIDID', { { 'C_STRING1', 'C_STRING1' } } )

	oModel:SetDescription( MVC_TITLE )
	oModel:SetPrimaryKey( { 'C_STRING1' } )

	// É necessário que haja alguma alteração na estrutura Field
	oModel:SetActivate( { | oModel | FwFldPut( "C_STRING1", "FAKE" ) } )

Return oModelsetDescription(MVC_TITLE)

// É necessário que haja alguma alteração na estrutura Field
oModel:setActivate({ |oModel| onActivate(oModel)})

return oModel

//-------------------------------------------------------------------
/*/{Protheus.doc} onActivate
Função estática para o activate do model

@param oModel - Objeto do modelo de dados

@author Daniel Mendes
@since 10/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
static function onActivate(oModel)

//Só efetua a alteração do campo para inserção
if oModel:GetOperation() == MODEL_OPERATION_INSERT
    FwFldPut("C_STRING1", "FAKE" , /*nLinha*/, oModel)
endif

return

//-------------------------------------------------------------------
/*/{Protheus.doc} loadGrid
Função estática para efetuar o load dos dados do grid

@param oModel - Objeto do modelo de dados

@return aData - Array com os dados para exibição no grid

@author Daniel Mendes
@since 10/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
static function loadGrid(oModel)
local aData as array
local cAlias as character
local cWorkArea as character
local cTablename as character

cWorkArea := Alias()
cAlias := GetNextAlias()
cTablename := "%" + RetSqlName(MVC_ALIAS) + "%"

BeginSql Alias cAlias
    SELECT *, R_E_C_N_O_ RECNO
      FROM %exp:cTablename%
    WHERE D_E_L_E_T_ = ' '
EndSql

aData := FwLoadByAlias(oModel, cAlias, MVC_ALIAS, "RECNO", /*lCopy*/, .T.)

(cAlias)->(DBCloseArea())

if !Empty(cWorkArea) .And. Select(cWorkArea) > 0
    DBSelectArea(cWorkArea)
endif

return aData

//-------------------------------------------------------------------
/*/{Protheus.doc} ViewDefloadHidFld
Função estática para load dos dados do ViewDef field escondido

@param oModel - Objeto do modelo de dados

@return Array - Dados para o load do field do modelo de dados

@author Daniel izac.ciszevskiMendes
@since   16.03.202010/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
Staticstatic Functionfunction ViewDefloadHidFld(oModel)
Local oView    As Object
Local oModel   As Object
Local oStrCab  As Object
Local oStrGrid As Object
return {""}

//-------------------------------------------------------------------
/*/{Protheus.doc} ViewDef
Função estática do ViewDef

@return oView - Objeto da view, interface

@author Daniel Mendes
@since 10/07/2020
@version 1.0
/*/
//-------------------------------------------------------------------
static function viewDef()
local oView as object
local oModel as object
local oStrCab as object
local oStrGrid as object

// Estrutura Fake de Field
oStrCab := FWFormViewStruct():New()

oStrCab:AddFieldaddField( '"C_STRING1' ", '"01'" , '"String 01' ", '"Campo de texto'", , '"C'" )

//Estrutura de Grid
oStrGrid := FWFormStruct( 2, 'SB1'MVC_ALIAS )

oModel  := FWLoadModel( 'SEMCABEC' "MVCSOGRID")
oView   := FwFormView():New()

oView:SetModelsetModel( oModel )

oView:AddFieldaddField('"CAB'", oStrCab, '"CABID'")
oView:AddGridaddGrid('"GRID'", oStrGrid, '"GRIDID'")

oView:CreateHorizontalBox( 'TOHID'createHorizontalBox("TOHIDE", 0 )
oView:CreateHorizontalBoxcreateHorizontalBox( '"TOSHOW'", 100 )

oView:SetOwnerViewsetOwnerView('"CAB' ", 'TOHID'"TOHIDE" )
oView:SetOwnerViewsetOwnerView('"GRID'", '"TOSHOW'")

oView:SetDescriptionsetDescription( MVC_TITLE )

Returnreturn oView