当我按下复制品时会发生什么?

时间:2013-12-02 18:43:04

标签: openerp

我对OpenERP副本感到疯狂,如果我在Employee Directory中复制一个User,它会复制一切(系统的每个用户),如果我复制一个组,它只复制一些东西,显然它不会创建副本。 ..如果我复制一个菜单,它不会复制子菜单选项。

WTF确实重复做“引擎盖下”?副本和副本一样吗?它是否创建指向同一对象的新引用?它是浅的还是深的副本?

我在使用OpenERP 7 LTS。

2 个答案:

答案 0 :(得分:4)

重复菜单调用OpenERP copy方法,默认情况下,该方法实现为浅层副本,但one2many关系除外。

浅拷贝表示创建记录的新副本,并尽可能复制所有字段值作为参考。例如,如果您复制了员工,则复制员工的部门将被设置为与正在复制的部门相同的部门,系统将创建部门的副本。

对于one2many关系(通常是将父记录与其子记录连接的关系,如发票及其行之间的关系),子记录也是重复的,因为原始记录不能是扯掉原来的父母 当one2many关系将记录连接到仅仅不是其子项的“相关记录”时,此默认行为可能会导致无法预料的副作用:例如,one2many关系可以将Employee链接到她的时间表条目,但是当员工重复时,这些条目肯定会重复。

出于这个原因,OpenERP的各种对象模型可以在copy操作期间实现额外的逻辑,并明确关闭不包含真正“子”的one2many关系的重复,以及更改任何复制的值(如在记录名称中附加“(copy)”。)

如果您在仅使用标准OpenERP模块复制记录时看到不正确的行为,则可能是应在official bugtracker上报告的错误。如果您使用额外的模块,请确保他们没有在某些模型上添加one2many字段,而不会相应地覆盖copy方法。

PS:如果您正在复制“员工目录”中的记录,那么您实际上是在复制员工(HR资源),而不是用户(具有登录访问权限的用户帐户)。这些是OpenERP中的单独概念,因为一些员工可能不需要登录(没有用户帐户),而某些用户可能不是员工(例如承包商或系统帐户)。

更新:当前在OpenERP 7.0中存在a bug,在复制用户时会导致相关员工无效重复,并且在复制员工时会导致类似的下级重复。这个错误说明了当模块无法正确处理他们定义的one2many关系的重复时会发生什么。

答案 1 :(得分:1)

由于重复的名称建议它只是复制记录,在后台调用ORM's复制方法,

如果仅复制某些特定模型的内容,则copy方法覆盖,这会阻止所有字段的重复。

如果您不想要现有功能,可以通过创建子模块覆盖它并根据您的要求进行更改。