在openerp中删除记录的列表

时间:2012-06-11 05:17:38

标签: openerp

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

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

4 个答案:

答案 0 :(得分:2)

您可以根据 base_action_rule 模型制作类似 replication_automated_rule 的内容。在 addons / base_action_rule / base_action_rule.py 中查找代码。

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

创建更新上检查对象,但您可以继承 base_action_rule 并定义对删除也。它的工作原理是为创建创建自定义包装器,并为模型对象的内存表示创建 write 方法。您需要添加基于 _wrap_create _wrap_unlink 方法,并在 _register_hook 中添加一行:

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

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

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

祝你好运!!

答案 1 :(得分:1)

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

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,因此您可以使用域名轻松访问它们。

答案 2 :(得分:1)

我得到了答案。

我从osv.osv继承了类 object_proxy ,在其中有一个名为执行的函数,def execute(self, db, uid, model, method, *args, **kw):我只是覆盖了这个函数,如果方法取消链接然后我将record_id和模型名称保存到数据库中的新表

答案 3 :(得分:0)

我认为jam's suggestion是您在要复制的任何模型上覆盖unlink()方法,并将已删除的ID记录到单独的表中。然后,您的同步过程可以读取并清除该表。

如果您只想复制整个数据库,也可以查看replication tools at the database level