Most Powerful Open Source ERP

Technical Note Restore Deleted Objects in ERP5

Shows example on how to restore deleted objects from the history of the ZODB.
  • Last Update:2018-05-30
  • Version:001
  • Language:en

This is a guide to show how to restore a deleted object in ERP5.

Table of Contents

ZODB Object System

The ZODB contains every operation done since the begining (or the latest pack). It means that every objects and all their modifications stay forever in the ZODB database.

Restoring a Deleted Object from ZODB

For instance, right after an upgrade, one of you module was replaced to a new one with the same ID. All your document in this module are gone and you need to retreive them back.

The goal is to use the ZODB api to get the OID of the previous module and then apply it as current OID.

We can do it thanks to an external method, but I suggest to use pdb instead, as it is more easy to get an output and to react according to them :

(Pdb) x = self._p_jar.db()  # self is the portal

Output the list of latest 123 entries of the history and locate the transaction that replaced the module by ID (TID)

(Pdb) pp x.history(self._p_oid, 123)
[..]
(Pdb) tid = x.history(self._p_oid, 123)[X]["tid"]  # where X is the number you just located

Get the old module OID from its TID

(Pdb) z = x.open(before=tid)
(Pdb) oid = z.get(self._p_oid).my_module._p_oid
(Pdb) z.close()

Get the old module from its OID

(Pdb) y = self._p_jar.get(oid)

Replace new module by old module and done

(Pdb) self._delOb('my_module')
(Pdb) self._setOb('my_module', y)
(Pdb) c

Now, you may want to reindex your entire module by going to your browser URL bar and typing <URL>/my_module/Folder_reindexAll.