Openerp 更新记录时不进行并发检查

Openerp 更新记录时不进行并发检查,openerp,Openerp,任何时候只有一个用户可以编辑合同。如果其他用户试图编辑该记录,我们需要弹出一个对话框,其中包含打开该记录的用户的详细信息 这个明显的特性似乎不是OpenERP的固有特性 是否有一个模块在整个系统中实现这一点 任何时候只有一个用户可以编辑合同。如果其他用户试图编辑该记录,我们需要弹出一个对话框,其中包含打开该记录的用户的详细信息。然后,应阻止第二个用户编辑记录,直到其解锁(即第一个用户保存或放弃记录) 记录锁定不是默认Openerp体系结构的一部分,这似乎很奇怪——您知道为什么吗 我们可以看看如何

任何时候只有一个用户可以编辑合同。如果其他用户试图编辑该记录,我们需要弹出一个对话框,其中包含打开该记录的用户的详细信息

这个明显的特性似乎不是OpenERP的固有特性

是否有一个模块在整个系统中实现这一点

任何时候只有一个用户可以编辑合同。如果其他用户试图编辑该记录,我们需要弹出一个对话框,其中包含打开该记录的用户的详细信息。然后,应阻止第二个用户编辑记录,直到其解锁(即第一个用户保存或放弃记录)

记录锁定不是默认Openerp体系结构的一部分,这似乎很奇怪——您知道为什么吗

我们可以看看如何实现这一点,然后提出一些想法吗。目前这不是一个优先考虑的问题,但只要有一个或两个用户“发现”这个问题,它就会成为优先考虑的问题。

OpenERP框架确实支持并发控制,以防止由于同时修改相同的文档而丢失数据,即使这不是一个常见问题(请参见下文的原因)

该机制通过实现,自OpenERP 5.0以来一直存在。悲观锁定不是一个选项,在无状态的基于web的环境中(用户可以随时离开办公桌)是非常不切实际的,而且在资源争用方面通常是一个糟糕的解决方案。大多数具有并发控制机制的现代框架都使用OCC(Rails、GoogleAppEngine等)

警告:OpenERP 7.0中当前存在一个未解决的错误,导致web界面跳过此机制并忽略并发编辑冲突。不过,框架支持已经存在,并且可以由自定义客户端使用

实施 OpenERP的OCC实现依赖于虚拟
\uu last\u update
字段的使用,客户可以在任何型号的常规呼叫中明确请求该字段。默认情况下,该值是从框架在任何记录上维护的
write_date
create_date
字段自动推断出来的。 当客户端稍后对同一记录进行调用时,它可以传递一个额外的上下文结构,其中包含原始的
\uuu last\u update
值,如果同时更新了记录,系统将自动引发错误。有关更多详细信息,请参见方法

当发生这种情况时,客户端堆栈可以做出适当的反应,例如显示记录详细信息并要求用户强制更新(在这种情况下,
\u last\u update
值可以简单地更新)或放弃其本地更改

实用 在实践中,这种情况下并发检查是有用的是相当罕见的。业务文档可以分为两类:主数据(合作伙伴、产品等)记录是长期存在的对象,而运营数据(发票、采购订单等)是短期工作流支持的对象

操作数据记录通常一次由一个负责的用户管理,在创建之后,它们大多会收到工作流状态更新和新的历史记录条目,这对于并发更新是安全的(所有内容都是事务性的)

主数据记录更有可能同时接收更新,但由于OpenERP客户端只保存实际修改过的字段,因此实际发生冲突的可能性非常有限

此外,OCC机制是每个记录,而不是每个字段,因此它倾向于阻止不一定冲突的编辑(例如,针对不同字段,或在多值字段中添加额外值)

一般来说,用户往往会在一段时间后忽略并发错误,如果客户端提供该解决方案选项,用户会心不在焉地单击“强制更新”,从而进一步降低其有用性…

OpenERP框架支持并发控制,以防止由于同时修改相同文档而导致数据丢失,即使这不是一个常见问题(请参见下文的原因)

该机制通过实现,自OpenERP 5.0以来一直存在。悲观锁定不是一个选项,在无状态的基于web的环境中(用户可以随时离开办公桌)是非常不切实际的,而且在资源争用方面通常是一个糟糕的解决方案。大多数具有并发控制机制的现代框架都使用OCC(Rails、GoogleAppEngine等)

警告:OpenERP 7.0中当前存在一个未解决的错误,导致web界面跳过此机制并忽略并发编辑冲突。不过,框架支持已经存在,并且可以由自定义客户端使用

实施 OpenERP的OCC实现依赖于虚拟
\uu last\u update
字段的使用,客户可以在任何型号的常规呼叫中明确请求该字段。默认情况下,该值是从框架在任何记录上维护的
write_date
create_date
字段自动推断出来的。 当客户端稍后对同一记录进行调用时,它可以传递一个额外的上下文结构,其中包含原始的
\uuu last\u update
值,如果同时更新了记录,系统将自动引发错误。有关更多详细信息,请参见方法

当发生这种情况时,客户端堆栈可以做出适当的反应,例如显示记录详细信息并要求用户强制更新(在这种情况下,
\u last\u update
值可以简单地更新)或放弃其本地更改

实用 在实践中,这种情况下并发检查是有用的是相当罕见的。业务文档可以分为两类:主数据(合作伙伴、产品等)记录是长期存在的对象,而运营数据(发票、采购订单等)、短期工作