Pular para conteúdo

Objeto NodeTransaction

Objeto NodeTransaction

Este objeto representa uma transação em um NodeDatabase, um mecanismo que dá maior controle ao programador sobre as mudanças locais.

Uma Transação é um objeto que armazena localmente todas as mudança realizadas em um NodeDatabase para que você possa decidir, mais tarde, se quer descartá-las ou confirmá-las.

 

Como instanciar um NodeTransaction

É possível instanciar um NodeTransaction através do método ndb.newTransaction

Observação importante:

Apenas criar um NodeTransaction não faz com que os dados sejam controlados. É preciso também utilizar os métodos ndb.pushTransaction e ndb.popTransaction para isso.

Características

O objeto NodeTransaction possui as seguintes características:

Propriedades e atributos

Propriedade Tipo Descrição
     
     

 

Métodos

 

Nome do método Descrição
transaction:commit() Confirma as mudanças que estavam armazenadas localmente.  Ao realizar Commit, os dados serão salvos em arquivo/Servidor RRPG e compartilhados com os demais usuários. 
transaction:rollback() Desfaz as mudanças que estavam armazenadas localmente. 
transaction:createUndoData() Cria um objeto NodeUndoData que contem as instruções necessário para desfazer todas as mudanças que estão armazenadas localmente.  Você pode, então, depois, decidir se deseja desfazer as mudanças guardadas utilizando o método transaction:applyUndoData  Observações: Armazenar o NodeUndoData é uma ótima forma de criar recursos parecidos com o famoso "ctrl+z" Esta função deve ser chamada antes de invocar "commit" para ter o efeito esperado. 
transaction:applyUndoData(undoData) Aplica as instruções de um objeto NodeUndoData para desfazer mudanças previamente feitas.  Parâmetros: undoData - O objeto NodeUndoData que contém o material/instruções para desfazer mudanças, criado previamente pela função transaction:createUndoData()  Observações: Após invocar este método, ainda é necessário invocar "commit" para que os dados sejam de fato desfeitos Materiais de undo devem ser aplicados na ordem reversa que ocorreram e apenas uma vez. Desfazer mudanças fora de ordem ou mais de uma vez leva a um comportamento indefinido 

 

Exemplos

Exemplo 1 - Exemplo de uso do Transaction

 

local tr1 = ndb.newTransaction(sheet); local tr2 = ndb.newTransaction(sheet);   sheet.nome = "Maria"; -- Mudança 1   ndb.pushTransaction(sheet, tr1);        sheet.idade = 20; -- Mudança 2   ndb.pushTransaction(sheet, tr2); sheet.nome = "Ana";  -- Mudança 3 ndb.popTransaction(sheet);   sheet.altura = "1.60m";  -- Mudança 4 ndb.popTransaction(sheet);   tr2:rollback();   --[[     Ao final da execução:     * Mudança 1 -         Será salva e compartilhada com todos, pois foi realizada fora de qualquer transação.             * Mudanças 2 e 4 -         Será mantida APENAS localmente e ninguém mais enxergará as mudanças, pois foram feitas na transação "tr1" e esta não recebeu nem commit e nem rollback.         Esta mudança local existirá enquanto o objeto "tr1" existir. Quando ele for destruído pelo coletor de lixo do Lua, as mudanças serão desfeitas.             * Mudança 3 -         Será desfeita pois foi realizada na transação "tr2" e ela recebeu uma chamada de "rollback" ]]-- 

 

 

Exemplo 2 - Perguntando ao usuário se ele deseja salvar mudanças feitas

 

local tr = ndb.newTransaction(sheet);    ndb.pushTransaction(sheet, tr); sheet.nome = "maria"; sheet.idade = 20; sheet.altura = "1.60m" ndb.popTransaction(sheet);    dialogs.confirmYesNo("Deseja salvar as alterações?",     function(resposta)         if resposta then             tr:commit();         else             tr:rollback();         end;     end); 

 


Created with the Personal Edition of HelpNDoc: Benefits of a Help Authoring Tool