- conheça também:
acronsoft
acrondesign
DeveloperFlex - Soluções para Desenvolvedores Visual DataFlex
contato@developerflex.com.br | (55 11) 4378-1115
A classe cOpenModeControler está definida no pacote cOpenModeControler.pkg.
A classe cOpenModeControler é uma subclasse da classe cObject do DataFlex e herda todas as propriedades, eventos e métodos existentes nesta classe.
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.
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.