Versão atual:

oModel:GetOperation está retornando 1

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)

Versões (2):

Ver a versão formatada

oModel:GetOperation está retornando 1

Comentário

new question