cOpenModeControler
Veja também:
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.
