Como alterar a ordenação de campos em um ponto de entrada em MVC

No artigo de hoje, vamos demonstrar em como alterar a ordenação padrão de campos, em um ponto de entrada em MVC.

Esse exemplo foi disponibilizado pelo grande Endreo Figueiredo ( LinkedIn ).

Basicamente, no ponto de entrada em MVC, você deve interceptar o FORMPRE, buscar a estrutura da tabela (referente a View) e usar o método SetProperty passando o MVC_VIEW_ORDEM.

Abaixo como ficou o código fonte completo, o trecho que esta a ordenação está entre 69 a 87:

#INCLUDE 'TOTVS.CH'
#INCLUDE "FWMVCDEF.CH"
 
/*/{Protheus.doc} FINA666 
Ponto de MVC rotina se Solicitação de viagem
@type function
@version 12.1.25
@author endreo.figueiredo
@since 16/08/2021
/*/
 
User Function FINA666()
 
    Local aParams   := ParamIXB            //Parâmetros do Ponto de Entrada
    Local oObj      := JsonObject():New()  //Objeto do formulário ou do modelo, conforme o caso
    Local xRet      := .T.                 //Retorno
    Local nX,nOper  
  
    //Verifica se possui os parâmetros
    If !(aParams == Nil)
 
        oObj['MODEL']   := aParams[01] //Objeto do formulário ou do modelo, conforme o caso
        oObj['EVENTO']  := aParams[02] //ID do local de execução do ponto de entrada
        oObj['IDFORM']  := aParams[03] //ID do formulário
  
        //Verifica se é TudoOK
        If oObj['EVENTO'] == "MODELPRE"
        //Verificação do model
        ElseIf oObj['EVENTO'] == 'MODELVLDACTIVE'
            nOper := oObj['MODEL']:nOperation
 
            If nOper == 3 .Or. nOper == 4
 
                oModel := oObj['MODEL']:GetModel('FW3MASTER')
                aadd(oModel:OFORMMODELSTRUCT:AFIELDS , { "Cid. Orig", "Cidade Origem" , "FW3_XNOMOR", "C", 40, 0, { || .T. } , NIL, {}, .F., NIL, .F., .F., .F., "" })
                aadd(oModel:OFORMMODELSTRUCT:AFIELDS , { "Cid. Dest", "Cidade Destino", "FW3_XNOMDE", "C", 40, 0, { || .T. } , NIL, {}, .F., NIL, .F., .F., .F., "" }) 
 
                oObj['MODELFW4'] :=  oObj['MODEL']:GetModel('FW4DETAIL'):OFORMMODELSTRUCT:AFIELDS
 
                For nX:= 1 to Len(oObj['MODELFW4'])
                    //Define campos como obrigatórios
                    If oObj['MODELFW4'][nX][3] $ 'FW4_TIPO|FW4_OBS'
                        oObj['MODELFW4'][nX][10] := .T.
                    EndIf 
                    //Define inicializador do campo
                    If oObj['MODELFW4'][nX][3] $ 'FW4_TIPO'
                        oObj['MODELFW4'][nX][11] := {|| '6' }
                    EndIf 
 
                Next nX
            EndIf 
 
        //Validação de Varios Eventos
        ElseIf oObj['EVENTO'] == 'FORMPRE'
 
            nOper := oObj['MODEL']:getoperation()
 
            If nOper == 3 .Or. nOper == 4
            
                //Model FW3MASTER
                If oObj['IDFORM'] == 'FW3MASTER'
 
                    oObj['OVIEW'] := FWViewActive()
 
                    If ( ValType(oObj['OVIEW']) == "O" ) 
 
                        oStruct := oObj['OVIEW']:GetViewStruct("FW3MASTER")
                         
                        If !( AScan(oStruct:GetFields(), {|x| AllTrim(x[01]) $ 'FW3_XNOMOR|FW3_XNOMDE' }) > 0 )
                            oStruct:AddField( "FW3_XNOMOR" , "06" , "Cid. Orig" , "Cidade Origem" , Nil , "GET" , "@!" , Nil , "" , .F. ,  "" ,  "" ,  {} ,  0 ,  "" , .F. ,  "" , .F. , 0 , )
                            oStruct:AddField( "FW3_XNOMDE" , "10" , "Cid. Orig" , "Cidade Origem" , Nil , "GET" , "@!" , Nil , "" , .F. ,  "" ,  "" ,  {} ,  0 ,  "" , .F. ,  "" , .F. , 0 , )
                        EndIf  
 
                        oStruct:SetProperty( 'FW3_SOLICI' ,  MVC_VIEW_ORDEM ,  '01' )      
                        oStruct:SetProperty( 'FW3_NACION' ,  MVC_VIEW_ORDEM ,  '02' )      
                        oStruct:SetProperty( 'FW3_CODORI' ,  MVC_VIEW_ORDEM ,  '03' ) 
                        oStruct:SetProperty( 'FW3_DESORI' ,  MVC_VIEW_ORDEM ,  '04' ) 
                        oStruct:SetProperty( 'FW3_XCDORI' ,  MVC_VIEW_ORDEM ,  '05' )  
                        oStruct:SetProperty( 'FW3_CODDES' ,  MVC_VIEW_ORDEM ,  '07' )   
                        oStruct:SetProperty( 'FW3_DESDES' ,  MVC_VIEW_ORDEM ,  '08' )   
                        oStruct:SetProperty( 'FW3_XCDDES' ,  MVC_VIEW_ORDEM ,  '09' )      
                        oStruct:SetProperty( 'FW3_DTINI'  ,  MVC_VIEW_ORDEM ,  '11' )      
                        oStruct:SetProperty( 'FW3_DTFIM'  ,  MVC_VIEW_ORDEM ,  '12' )      
                        oStruct:SetProperty( 'FW3_CLIENT' ,  MVC_VIEW_ORDEM ,  '13' )      
                        oStruct:SetProperty( 'FW3_LOJA'   ,  MVC_VIEW_ORDEM ,  '14' )   
                        oStruct:SetProperty( 'FW3_NOME'   ,  MVC_VIEW_ORDEM ,  '15' ) 
                        oStruct:SetProperty( 'FW3_STATUS' ,  MVC_VIEW_ORDEM ,  '16' ) 
 
                    EndIf
                 
                EndIf
             
            EndIf
 
        ElseIf oObj['EVENTO'] == 'FORMPOS'
        ElseIf oObj['EVENTO'] == 'FORMLINEPRE'
        ElseIf oObj['EVENTO'] == 'FORMLINEPOS'
        ElseIf oObj['EVENTO'] == 'MODELCOMMITTTS'
        ElseIf oObj['EVENTO'] == 'MODELCOMMITNTTS'
        ElseIf oObj['EVENTO'] == 'FORMCOMMITTTSPRE'
        ElseIf oObj['EVENTO'] == 'FORMCOMMITTTSPOS'
        ElseIf oObj['EVENTO'] == 'BUTTONBAR'
        EndIf
         
    EndIf
 
Return xRet

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação