Exemplo de P.E. em MVC para adição de coluna na Grid
Exemplo 1- Exemplo do P.E. GTPA283 para adição de coluna da tabela GIC:
#include "TOTVS.ch" #include "FWMVCDEF.CH" /*/{Protheus.doc} User Function GTPA283 Ponto de Entrada MVC Rotina GTPA283 (Cadastro de Requisições) @type Function @version 1 @param @return nil,null, sem retorno @example (examples) @see (links_or_references) /*/ User Function GTPA283() Local aParams := ParamIXB //Parâmetros do Ponto de Entrada Local oObj := Nil //Objeto do formulário ou do modelo, conforme o caso Local cIDEvent := Nil //ID do local de execução do ponto de entrada Local cIDForm := Nil //ID do formulário Local oMdlGIC := Nil //Model GRIDGIC Local oView := Nil //View Ativa Local oStruct := Nil //Struct Local oStruGIC := Nil //Struct Padrão da Tabela GIC Local aFieldsGIC := {} //Campos Padrões da Tabela GIC Local nPosCpo1 := 0 //Posição do Campo GIC_X_NOM Local nPosCpo2 := 0 //Posição do Campo GIC_X_RG Local lFieldOK := .F. //Campos já existem ? Local nI := 0 //Controle de FOR Local lRet := .T. //Retorno //Verifica se possui os parâmetros If !(aParams == Nil) oObj := aParams[01] //Objeto do formulário ou do modelo, conforme o caso cIDEvent := aParams[02] //ID do local de execução do ponto de entrada cIDForm := aParams[03] //ID do formulário //Verifica se é TudoOK If (AllTrim(cIDEvent) == "MODELPOS") oMdlGIC := oObj:GetModel('GRIDGIC') GIC->(DBSetOrder(01)) //GIC_FILIAL+GIC_CODIGO For nI := 01 To oMdlGIC:Length() oMdlGIC:GoLine(nI) If !(oMdlGIC:IsDeleted()) If Empty(oMdlGIC:GetValue('GIC_X_NOM')) lRet := .F. Help( ,, 'Help',"GIC_X_NOM", 'Campo GIC_X_NOM não preenchido na Linha: ' + cValToChar(nI), 1, 0 ) ElseIf Empty(oMdlGIC:GetValue('GIC_X_RG')) lRet := .F. Help( ,, 'Help',"GIC_X_RG", 'Campo GIC_X_RG não preenchido na Linha: ' + cValToChar(nI), 1, 0 ) EndIf EndIf Next nI //Verifica se é o Commit do Modelo ElseIf (AllTrim(cIDEvent) == "MODELCOMMITNTTS") oMdlGIC := oObj:GetModel('GRIDGIC') GIC->(DBSetOrder(01)) //GIC_FILIAL+GIC_CODIGO For nI := 01 To oMdlGIC:Length() oMdlGIC:GoLine(nI) If !(oMdlGIC:IsDeleted()) //Posicionar no Registro If (GIC->(DBSeek(FWxFilial('GIC') + oMdlGIC:GetValue('GIC_CODIGO')))) If (RecLock('GIC', .F.)) GIC->GIC_X_NOM := oMdlGIC:GetValue('GIC_X_NOM') GIC->GIC_X_RG := oMdlGIC:GetValue('GIC_X_RG') GIC->(MsUnlock()) EndIf EndIf EndIf Next nI //Verifica se está no Evento MODELPRE e se a View Ativa foi recuperada ElseIf (AllTrim(cIDEvent) == "MODELPRE" .AND. AllTrim(oObj:cID) == "GTPA283") oView := FWViewActive() If ValType(oView) == "O" //Pegando a Struct do Modelo oStruct := oView:GetViewStruct("GRIDGIC") //Verifica se os campos já existem lFieldOK := AScan(oStruct:GetFields(), {|x| AllTrim(x[01]) == "GIC_X_NOM"}) > 0 //Adicionando campos If (! lFieldOK) //GIC_X_NOM oStruct:AddField(; "GIC_X_NOM" ,; //<cIdField > "D1" ,; //<cOrdem > "Passageiro" ,; //<cTitulo > "Nome do Passageiro" ,; //<cDescric > Nil ,; //<aHelp > "GET" ,; //<cType > "@!" ,; //<cPicture > Nil ,; //<bPictVar > "" ,; //<cLookUp > .T. ,; //<lCanChange > "" ,; //<cFolder > "" ,; //<cGroup > {} ,; //<aComboValues > 0 ,; //<nMaxLenCombo > "" ,; //<cIniBrow > .F. ,; //<lVirtual > "" ,; //<cPictVar > .F. ,; //<lInsertLine > 0 ,; //<nWidth > ) //GIC_X_RG oStruct:AddField(; "GIC_X_RG" ,; //<cIdField > "D2" ,; //<cOrdem > "RG" ,; //<cTitulo > "Cedula de Identidade" ,; //<cDescric > Nil ,; //<aHelp > "GET" ,; //<cType > "@!" ,; //<cPicture > Nil ,; //<bPictVar > "" ,; //<cLookUp > .T. ,; //<lCanChange > "" ,; //<cFolder > "" ,; //<cGroup > {} ,; //<aComboValues > 0 ,; //<nMaxLenCombo > "" ,; //<cIniBrow > .F. ,; //<lVirtual > "" ,; //<cPictVar > .F. ,; //<lInsertLine > 0 ,; //<nWidth > ) lCtrl283 := .T. //Campos já inclusos EndIf EndIf EndIf EndIf Return lRet
Observações:
- Caso tenha dúvidas ou problemas com os exemplos, entre em contato;
- Se tiver sugestões de rotinas, pode entrar em contato;
- Exemplo enviado por Alison Lemes;