Páginas filhas
  • FWModelActive

Sintaxe

FWModelActive() →  oModelActive


Descrição

Retorna a referência ao último modelo utilizado. O modelo pode estar ativo ou não, assim como nulo. Deve-se fazer guardas do mesmo.

Exemplo de proteção
oModel := FWModelActive()

If oModel != nil .and. oModel:isActive()
Endif



Retorno
oModelActive → Objeto do Model ativo, o modelo também pode estar desativo e em algumas situações, também um valor nulo dado o valor ser uma referência.


Observações
A partir da LIB 20190319, ao efetuar a destruição ( método destroy ) do modelo ativo, o mesmo limpara a referência presente no retorno na função FWModelActive, portanto a mesma passará a retornar Nil e não mais um modelo destruído, evitando o falso positivo de um modelo válido.




  • Sem rótulos

3 Comentários

  1. Acredito que deveriam alterar a descrição para "fornece o último objeto da classe FWFormModel que esteve ativo (mesmo após sendo utilizado o 'Destroy()'), para ser utilizado nas regras
    de validação do sistema Microsiga Protheus.".

    Pois do jeito que está hoje permite uma margem muito grande para erros no ERP inteiro!

  2. A descrição mais correta para essa função seria:

    "Esta função fornece o último objeto da classe FWFormModel que esteve ativo, para ser utilizado nas regras de validação do sistema Microsiga Protheus."

    Ainda se se utilize a sequência abaixo:

    oModel:DeActivate()
    oModel:Destroy()
    oModel := Nil

    e após se utilize um

    oModel := FWModelActive()

    o objeto oModel terá uma estrutura e será diferente de NIL ainda que o oModel, tecnicamente, deveria estar inativo.

    Convém, nos casos de funções genéricas onde não se tem o controle de qual model vai estar ativo, a utilização da validação abaixo

    oModel::IsActive()
    para a utilização do mesmo.




  3. Usuário desconhecido (norbertom)

    Olá bom dia!


    Na verdade ele retorna uma referência à última instância criada independente desta estar ativa e independente também de ter sido executado o método Destroy().

    Aliás, por recomendação da Equipe do Frame, seria uma boa prática efetuar o seguinte tratamento:

    oModel := FWModelActive()

    If oModel:IsActive()

    ...

    EndIf