O conceito de iTag resume-se a uma forma de agrupar alterações na tabela iLog. Com ela, é possível marcar dados a serem removidos posteriormente. Desta forma, em casos de teste, por exemplo, é possível criar e gravar dados em nossa estrutura de dados e, após terminados os testes, pode-se desfazer todas as alterações que foram realizadas e registradas sob uma iTag. Podemos então dividir o uso de iTags em dois momentos: gravação de alterações utilizando iTag; desvazimento de alterações marcadas com a iTag do primeiro momento. Vejamos como realizar estes dois momentos.
O applyUpdates do objeto DatabaseProxy foi melhorado para considerar a existência de uma iTag. Assim, para marcar as alterações realizadas com uma iTag deve-se alterar a propriedade changeLogTag de um objeto DatabaseProxy com uma tag única (recomenda-se o uso de GUID). Feito isto, todas as chamadas do método applyUpdates deste objeto gravarão as alterações na iLog preenchendo o campo iTag da iLog. Uma vez gravadas as alterações na iLog com o campo iTag preenchido, essas alterações poderão ser desfeitas mais facilmente em um segundo momento.
var db, ds;
db = new DatabaseProxy('localhost:80','minhaBase');
db.login('usuario','senha');
db.changeLogTag = ngin.util.createGUID(false);
ds = database.query("SELECT * FROM ivfs WHERE iKey in (-1111111,-222222,-333333)");
tratamento1(ds); // método fictício que abstrai a manipulação e alteração dos dados do dataset.
db.applyUpdates([ds]);
tratamento2(ds);
db.applyUpdates([ds]); // método fictício que abstrai a manipulação e alteração dos dados do dataset.
No exemplo acima, na linha 5, temos a iTag sendo gerada e configurada no DatabaseProxy. As alterações realizadas nos métodos de tratamento 1 e 2, e gravados nos applyUpdates consequentes, são gravadas na iLog com a iTag configurada na linha 5.
Uma vez de posse da iTag que marcou as alterações gravadas na iLog, pode-se reverter as alterações facilmente com o método ngin.db.undoLogByTag(iTag).
__includeOnce('ufs:/ngin/db.js');
var iTag = recuperaITag() // método fictício que abstrair a persistencia de uma iTag.
var undoVersions = ngin.db.undoLogByTag(iTag);
O exemplo acima desfaz todas as versões de alteração contidas na iLog com a tag informada no parâmetro do método undoLogByTag.