Boa noite!
Estou realizando umas alterações em um fonte e estou com uma dúvida referente ao uso do oModel:GetOperation.
Static Function ModelDef
Local oModel := Nil
Local oStruHead := FwFormStruct(1,'ZF1')
Local oStruGrid := FwFormStruct(1,'ZD1')
//Monta o modelo principal
oModel := MpFormModel():New('FATA20MVC',{ |oModel| fPreVld(oModel) },/*Validação*/,{ |oModel| fCommit(oModel) })
//Monta os dados do cabeçalho
oModel:AddFields('ModelHead',,oStruHead)
oModel:SetPrimaryKey({'ZF1_FILIAL'},{'ZF1_NUM'},{'ZF1_VEND'},{'ZF1_CODCLI'},{'ZF1_LOJA'})
oModel:GetModel('ModelHead'):SetDescription('Cabecalho')
If(!lRotAuto)
If(ALTERA .and. ZF1->ZF1_STATUS >= 2)
oStruHead:SetProperty('ZF1_VEND' , MODEL_FIELD_WHEN, {|| .F. })
oStruHead:SetProperty('ZF1_CODCLI' , MODEL_FIELD_WHEN, {|| .F. })
oStruHead:SetProperty('ZF1_LOJA' , MODEL_FIELD_WHEN, {|| .F. })
oStruHead:SetProperty('ZF1_LACRE' , MODEL_FIELD_WHEN, {|| .F. })
oStruHead:SetProperty('ZF1_DATA' , MODEL_FIELD_WHEN, {|| .F. })
oStruHead:SetProperty('ZF1_OBSERV' , MODEL_FIELD_WHEN, {|| .F. })
Endif
Endif
//Monta os dados dos itens
oModel:AddGrid('ModelGrid','ModelHead',oStruGrid,,{ |oGrid| fLinOK(oGrid) },/*bPreGrid*/,/*bProsGrid*/)
oModel:SetRelation('ModelGrid',{{'ZD1_FILIAL','ZF1_FILIAL'},{'ZD1_NUM','ZF1_NUM'},{'ZD1_VEND','ZF1_VEND'},{'ZD1_CODCLI','ZF1_CODCLI'},{'ZD1_LOJA','ZF1_LOJA'}}, ZD1->(IndexKey(2)))
oModel:GetModel('ModelGrid'):SetDescription('Itens')
oModel:GetModel('ModelGrid'):SetDelAllLine(.T.)
oModel:GetModel('ModelGrid'):SetOptional(.F.)
//Seta o nome da rotina na enchoice
oModel:SetDescription('Pedidos de Troca')
Return(oModel)
Static Function ViewDef
Local oView := Nil
Local oModel := FwLoadModel('ELFATA20')
Local oStruHead := FwFormStruct(2,'ZF1')
Local oStruGrid := FwFormStruct(2,'ZD1')
If(ZF1->ZF1_STATUS < 5)
oStruHead:RemoveField('ZF1_MOTCAN')
Endif
//Não exibe o folder visual caso algum campo esteja inserido em um
oStruHead:SetNoFolder()
oView := FwFormView():New()
oView:SetModel(oModel)
oView:AddUserButton('Enviar e-mail','',{|oView| U_ELFATA01() },,,{MODEL_OPERATION_VIEW, MODEL_OPERATION_UPDATE},.F.)
//Crio o cabeçalho e os grids de acordo com o modelo
oView:AddField('ViewHead', oStruHead, 'ModelHead')
oView:AddGrid('ViewGrid', oStruGrid, 'ModelGrid')
//Crio uma layer com 40% da tela e outra com 60% da tela, similar a FwLayer
oView:CreateHorizontalBox('MAIN',40)
oView:CreateHorizontalBox('GRID',60)
//Informo os devidos títulos das telas
oView:EnableTitleView('ViewHead','Informações do Pedido de Troca')
oView:EnableTitleView('ViewGrid','Produtos do Pedido de Troca')
//Informo a porcentagem da tela que cada view deve ocupar
oView:SetOwnerView('ViewHead','MAIN')
oView:SetOwnerView('ViewGrid','GRID')
Return(oView)
Estou pensando em remover a parte do bloco de código onde altero o When do campo do ModelDef e passando o mesmo para a ViewDef.
No ModelDef, utilizei a variável Altera para verificar se o usuário está alterando o formulário. Ela também me serviria para a ViewDef, mas além de gerar warning ao compilar, acho que não seria o ideal para este caso. Estava pensando em utilizar a GetOperation, mas quando utilizo a chamada da função oModel:GetOperation(), sempre é retornado 1, independente da operação realizada (seja inclusão ou alteração).
Além disso, quando realizo a chamada do oModel:GetValue('ZF1_STATUS') ou oModel:GetValue('ModelHead','ZF1_STATUS') dentro da ViewDef, sempre é retornado como nulo.
Como posso realizar essas tratativas? É recomendável fazer diretamente na ViewDef ou devo deixar no ModelDef?
--EDITADO
Segue como está o meu MenuDef:
Static Function MenuDef
Local aRotina := {}
Add Option aRotina Title 'Pesquisar' Action 'AxPesqui' Operation 1 Access 0
Add Option aRotina Title 'Visualizar' Action 'VIEWDEF.ELFATA20' Operation 2 Access 0
Add Option aRotina Title 'Incluir' Action 'VIEWDEF.ELFATA20' Operation 3 Access 0
Add Option aRotina Title 'Alterar' Action 'VIEWDEF.ELFATA20' Operation 4 Access 0
Add Option aRotina Title 'Imprimir' Action 'VIEWDEF.ELFATA20' Operation 8 Access 0
Add Option aRotina Title 'Liberar Recolhimento' Action 'U_FATA20LB' Operation 6 Access 0
Add Option aRotina Title 'Efetuar Recolhimento' Action 'U_FATA20EF' Operation 6 Access 0
Add Option aRotina Title 'Cancelar Recolhimento' Action 'U_FATA20CR' Operation 6 Access 0
Add Option aRotina Title 'Cancelar Pedido' Action 'U_FATA20CP' Operation 6 Access 0
Add Option aRotina Title 'Finalizar Pedido' Action 'U_FATA20FP' Operation 6 Access 0
Add Option aRotina Title 'Gerar Pré-Nota' Action 'U_ELCOMA05' Operation 6 Access 0
Add Option aRotina Title 'Observações do Pedido' Action 'U_ELCOMA06' Operation 6 Access 0
Return(aRotina)