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.