在openerp中删除记录的列表

List of deleted records in openerp

有没有办法在OpenERP中获取已删除记录的列表? 我听说openerp记录了删除的记录列表..但我不知道在哪里浏览它..

我正在尝试同步两个数据库。 所以我几乎不需要删除记录的模型名称和id,以便我可以从其他数据库中删除相应的记录


您可以基于base_action_rule模型创建类似replication_automated_rule的内容。在addons / base_action_rule / base_action_rule.py中查找代码。

操作规则将服务器操作链接到完成给定条件(由过滤器定义)的对象(给定模型)。即使在管理界面上,操作规则也非常易于使用。

在创建和更新时检查对象,但您可以从base_action_rule继承并定义对删除的检查。它的工作原理是创建自定义包装器来创建和写入模型对象的内存表示的方法,然后告诉它工作。您需要添加基于_wrap_create的_wrap_unlink方法,并向_register_hook添加一行:

1
model_obj.unlink = self._wrap_unlink(model_obj.unlink, model)

_wrap_create和_wrap_update中的包装器方法在执行其正常函数后执行钩子。当你在_wrap_unlink中定义包装器方法时,你应该在unlink的正常函数之前执行钩子,因为取消链接擦除对象并且它不可用于钩子。

此外,您应该定义一个服务器操作,该操作会为复制队列或日志保存必要的数据。

祝好运 !!


我得到了答案。

我从osv.osv继承了class object_proxy,里面有一个名为execute的函数,def execute(self, db, uid, model, method, *args, **kw):我只是覆盖了这个函数,如果方法是unlink,那么我将record_id和model name保存到数据库中的一个新表中


当您在openerp中单击从UI中删除时,您可以访问ORM Menthod UNLINK原型od方法是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def unlink(self, cr, uid, ids, context=None)
   """
    #Delete records with given ids
    Param cr:  database cursor
    Param uid: current user id
    Param ids: id or list of ids
    Param context:   (optional) context arguments, like lang, time zone
    Return : True
    Raise AccessError:
        if user has no unlink rights on the requested object
        if user tries to bypass access rules for unlink on the requested object
    Raise UserError:

        if the record is default property for other records
   """

这里的Ids包含要取消链接的ID列表,所以在删除之前你可以使用它们。

但是如果记录一旦从OpenERP中删除,就无法访??问,因为它们不再是db。

可选的,这里的机制可以是active字段。 OE中的活动字段是特殊字段,如果您在模型上定义活动布尔字段,那么如果任何记录设置为活动false,哟无法在没有特别努力的情况下在视图上看到该记录,但是Tricky部分是您仍然在桌面上有活动的那些记录= False,因此您可以使用域轻松访问它们。


我认为jam的建议是在你想要复制的任何模型上覆盖unlink()方法,并将删除的id记录到一个单独的表中。然后,您的同步过程可以读取和清除该表。

如果您只想复制整个数据库,也可以在数据库级别查看复制工具。