Objeto NodeTransaction

.html ›› .html ›› .html ››
Parent Previous Next

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:


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