veja também:

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:  ...

+ veja mais