cOpenModeControler

Pacote

A classe cOpenModeControler está definida no pacote cOpenModeControler.pkg.

Hierarquia

A classe cOpenModeControler é uma subclasse da classe cObject do DataFlex e herda todas as propriedades, eventos e métodos existentes nesta classe.

Para que serve

A classe cOpenModeControler fornece um mecanismo de controle do modo de abertura das tabelas, permitindo otimizar o travamento delas em rotinas que usam o comando Begin_Transaction, Reread ou Lock.

Estes comandos sempre travam todas as tabelas que estiverem abertas em modo normal.

Este objeto permite que você especifique quais tabelas e/ou dicionários de dados você realmente irá alterar em sua rotina e faz com que apenas estas tabelas sejam travadas, proporcionando uma melhor performance para o sistema.

Exemplos

Send LimpaTabelas      of ghoOpenModeController
Send AdicionaTabela    of ghoOpenModeController Menuf.File_Number
Send AdicionaTabela    of ghoOpenModeController Menu.File_Number
Send ConfiguraReadOnly of ghoOpenModeController
Begin_Transaction
    If (PosicionaMenufByIndex1(nIdMenuf)) Begin
        // Mudando a Ordem dos Itens
        Clear Menu
        Move iOrdem to Menu.Nr_Ordem
        Move nIdPai to Menu.Id_Menu_Pai
        If bSobe Find lt Menu.Nr_Ordem
        Else Find gt Menu.Nr_Ordem
        If (Found and Menu.Id_Menu_Pai = Menuf.Id_Menu_Pai) Begin
            Move Menu.Nr_Ordem to Menuf.Nr_Ordem
            Move 9999 to Menu.Nr_Ordem
            SaveRecord Menu
            SaveRecord Menuf
            Move iOrdem to Menu.Nr_Ordem
            SaveRecord Menu
        End
    End
End_Transaction

Send RestauraFileMode of ghoOpenModeController

No exemplo acima, somente a tabela Menu será travada quando o comando Begin_Transaction for executado (Menuf é fantasma de Menu).

Send LimpaTabelas of ghoOpenModeController
Send AdicionaDDO of ghoOpenModeController oDireito_DD
Send ConfiguraReadOnly of ghoOpenModeController

Begin_Transaction
// Posicionando Usuário
If (not(PosicionaDDUsuariofByIndex1(oUsuariof_DD,nIdUsuariof))) Begin
    Error Dferr_Program "Erro inexperado: grupo não localizado!"
    Procedure_Return
End

 

// Posicionando Menuf
If (not(PosicionaDDMenufByIndex1(oMenuf_DD,nIdMenu))) Begin
Error Dferr_Program “Erro inexperado: item do menu não localizado!”
Procedure_Return
End

// Dando permissão para todos os menus pais
Move Menuf.Id_Menu_Pai to nIdMenuPai
While (PosicionaDDMenufByIndex1(oMenuf_DD,nIdMenuPai) and Menuf.Id_Menu_Pai > 0)
Send Update_Status (“Adicionando” * Trim(Menuf.Ds_Menu))
Move Menuf.Id_Menu_Pai to nIdMenuPai
Move Menuf.Id_Menu to nIdMenu
If (not(PosicionaDDDireitoByIndex2(oDireito_DD,nIdUsuariof,nIdMenu)) or ;
Direito.Cd_Permissoes = -1) Begin
If (Direito.Cd_Permissoes <> -1) Begin
Send Clear oDireito_DD // Posicionando DDOs pais
Move (PosicionaDDUsuariofByIndex1(oUsuariof_DD,nIdUsuariof)) to bVoid
Move (PosicionaDDMenufByIndex1(oMenuf_DD,nIdMenu)) to bVoid
End
Set Field_Changed_Value of oDireito_DD Field DIREITO.Cd_Permissoes to 0
Send SalvarDD oDireito_DD
End
Loop
End_Transaction

Send RestauraFileMode of ghoOpenModeController

No exemplo acima, é usado um objeto de dicionário de dados para a gravação. Quando o método AdicionaDDO é usado, ele se encarrega de acrescentar automaticamente todos os DDOs superiores na hierarquia e também as tabelas externas. Portanto, se você usar o método AdicionaDDO para um DDO filho, não é necessário executá-lo novamente para adicionar nenhum dos DDOs superiores hierárquicos.

Observações

  • Você não deve criar nenhum objeto desta classe. Um objeto global chamado oOpenModeControler já é criado dentro do pacote e seu identificador é armazenado na variável global ghoOpenModeController. Utilize esta variável global para referenciar este objeto em seus programas.
  • Os seguintes arquivos possuem exemplos de utilização deste objeto global:
    • AdicionaMenusPaisGrupo.bp
    • AdicionaMenusPaisUsuario.bp
    • CriaUsuarioAdmin.bp
    • InicializaPrograma.pkg
    • Menu.vw
    • ParametrosProgramasExternos.bp

Métodos

Confira abaixo a documentação dos métodos da classe cOpenModeControler:

 

AdicionaDDO

Tipo

Procedure

Parâmetros

Handle hoDDO: o identificador do objeto DDO cuja tabela será adicionada na lista interna.

Para que serve

Este procedimento permite adicionar tabelas na lista interna de tabelas que deverão ser travadas no processo de gravação/exclusão que será executado.

Ela adiciona o número da tabela principal do DDO passado como parâmetro e também o número de todas as tabelas que estão na estrutura de gravação do DDO e estrutura externa do DDO.

Exemplo

Send AdicionaDDO of ghoOpenModeControler oDireito_DD

AdicionaTabela

Tipo

Procedure

Parâmetros

Handle hTabela: o número da tabela que será adicionada na lista interna.

Para que serve

Este procedimento permite adicionar uma tabela na lista interna de tabelas que deverão ser travadas no processo de gravação/exclusão que será executado.

Exemplo

Send AdicionaTabela of ghoOpenModeControler Direito.File_Number

 

CloseTables

Tipo

Procedure

Para que serve

Fecha todas as tabelas que foram adicionadas na lista interna de tabelas através dos métodos AdicionaDDO e AdicionaTabela.

 

ConfiguraReadOnly

Tipo

Procedure

Para que serve

Muda o modo de abertura de todas as tabelas abertas no sistema para Read_Only, com excessão daquelas que foram adicionadas na lista interna de tabelas através dos métodos AdicionaDDO e AdicionaTabela.

 

LimpaTabelas

Tipo

Procedure

Para que serve

Remove todas as tabelas da lista interna de tabelas.

 

ReOpenTables

Tipo

Procedure

Para que serve

Abre todas as tabelas que foram adicionadas na lista interna de tabelas através dos métodos AdicionaDDO e AdicionaTabela. Só faz sentido usar este método se o método CloseTables foi usado antes.

 

RestauraFileMode

Tipo

Procedure

Para que serve

Restaura o modo de abertura original de todas as tabelas que foram alteradas para Read_Only na execução do método ConfiguraReadOnly.