1

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

我正在尝试同步两个数据库。所以我几乎不需要删除记录的模型名称和 ID,这样我就可以从另一个数据库中删除相应的记录

4

4 回答 4

2

您可以基于base_action_rule模型制作类似replication_automated_rule的东西。addons/base_action_rule/base_action_rule.py中查找代码。

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

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

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

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

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

祝你好运 !!

于 2013-09-13T07:31:24.280 回答
1

当您在 openerp 中单击从 UI 中删除时,您可以访问 ORM MenthodUNLINK原型 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,如果没有特别的努力,您将无法在视图中看到该记录,但棘手的部分是您仍然在表上有活动的记录=False,因此您可以使用域非常轻松地访问它们。

于 2012-06-11T06:53:06.597 回答
1

我得到了答案。

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

于 2012-06-13T05:04:09.740 回答
0

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

如果您只想复制整个数据库,您还可以研究数据库级别的复制工具。

于 2012-06-12T18:18:58.833 回答