Bom dia
Existe alguma propriedade que retorna o ID do campo que está sendo editado (grid MVC) ?
Exemplo: (crio uma função no WHEN do campo e nesta função pego o ID do campo que está sendo alterado)
Obrigado
Se alguma pergunta ou resposta lhe foi útil, não deixe de dar seu voto positivo!
Bom dia
Existe alguma propriedade que retorna o ID do campo que está sendo editado (grid MVC) ?
Exemplo: (crio uma função no WHEN do campo e nesta função pego o ID do campo que está sendo alterado)
Obrigado
Olá Thyago, boa tarde. Eu necessitei saber o objeto que eu estava posicionado e fiz da seguinte forma:
Private oModel := FWModelActivate()
Private oView := FWViewActive()
Private aId := oView:GetCurrentSelect()
Sintaxe FWFORMVIEW():GetCurrentSelect()-> Array
Descrição Obtem o ID do último campo que obteve foco na view.
Retorno Array com a estrutura abaixo: [1] ExpC: ID do formulário [2] ExpC: ID do campo
https://tdn.totvs.com/display/framework/FWFormView
Espero ter ajudado!
Bom dia, Thyago!
Você se refere ao Recno ou o nome do campo?
O Recno você consegue pegar através do método GetDataId estando posicionado na linha. Segue documentação: https://tdn.totvs.com/display/framework/FWFormGridModel
Caso for o campo, tu pode usar a validação bLinePre do MpFormModel. Utilizando a variável cIdField, é possível verificar qual campo está sendo editado. E pela variável cAction você consegue pegar a ação (edição, delete, etc). Segue exemplo abaixo:
Static Function ModelDef()
Local oModel
Local oStruZA1:= FWFormStruct(1,'ZA1')
Local oStruZA2 := FWFormStruct( 1, 'ZA2')
Local bLinePre := {|oGridModel, nLine, cAction, cIDField, xValue, xCurrentValue| linePreGrid(oGridModel, nLine, cAction, cIDField, xValue, xCurrentValue)}
Local bLoad := {|oGridModel, lCopy| loadGrid(oGridModel, lCopy)}
oModel := MPFormModel():New('COMP021')
oModel:AddFields('ZA1MASTER',,oStruZA1)
oModel:AddGrid( 'ZA2DETAIL', 'ZA1MASTER', oStruZA2, bLinePre, , , ,bLoad)
Return oModel
Static Function loadGrid(oGridModel, lCopy)
Local aLoad := {}
aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "01", "000100","AUTOR1","AUTOR"}})
aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "02", "000102","AUTOR2","AUTOR"}})
aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "03", "000104","AUTOR3","AUTOR"}})
aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "04", "000105","AUTOR4","AUTOR"}})
aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "05", "000106","AUTOR5","AUTOR"}})
Return aLoad
Static Function linePreGrid(oGridModel, nLine, cAction, cIDField, xValue, xCurrentValue)
Local lRet := .T.
If cAction == "SETVALUE"
If oGridModel:GetValue("ZA2_TIPO") == "AUTOR"
lRet := .F.
Help( ,, 'HELP',, 'Não é possível alterar linhas do tipo Autor', 1, 0)
EndIf
EndIf
Return lRet
Bom dia Giordano,
Na verdade eu tenho uma função de validação que é utilizada no WHEN de vários campos diferentes. Quando a função é executada, não sei qual campo que executou a mesma.
Eu resolvi de forma paliativa passando o nome do campo como parâmetro (Ex.: U_LibCampo("MeuCampo") , mas queria saber se tem como eu descobrir via função o nome do campo.
Obrigado pelo retorno.
local aCampos := oView:GetListFields() local oStruPCJ := oModel:GetModel("PCJMASTER"):GetStruct() local oStruPCK := oModel:GetModel("PCKDETAIL"):GetStruct()
// se usuário logado pertencer ao grupo de portaria impede alteração em todos os campos da estrutura AEval(aCampos, {|x| IIf(cPortaria .And. x[1] == "VIEW_PCJ",; oStruPCJ:SetProperty(x[2], MODEL_FIELD_WHEN, {||.F.}),; oStruPCK:SetProperty(x[2], MODEL_FIELD_WHEN, {||.F.}))})