ODOO 开发异步限制规范【表单类】
异步类型一:同时操作异步;
描述:两个访问者,同时对一张表单进行编辑。可能出现异步,导致最终存值出错。故此,需要在表单方法中添加检测是否有其他人在操作。
【未来,需要添加此表单正在被 N 人浏览及此表单正在被 partner_id 改写,等前端显示功能】
ODOO 框架支持并发控制,以防止由于同一文档的并发修改而导致数据丢失,即使这不是一个常见的问题(请参见下面的原因)。
该机制是通过乐观并发控制(OCC)实现的,并且自 Openerp5.0 开始就存在。不使用悲观锁,因为在无状态的基于 Web 的环境中(用户可以随时离开桌面)是不现实的, 而且在资源争用方面通常是一个不好的解决方案。大多数具有并发控制机制的现代框架都使用 OCC(Rails、Google 应用程序引擎等)。
实现方式;
ODOO 的 OCC 实现依赖于虚拟的 last_update 字段的使用,客户机可以在任何模型上作为常规 read()调用的一部分显式请求该字段。该值将从写入日期自动推断,并创建框架在任何记录上默认维护的日期字段。
当客户机稍后对同一条记录进行 write()调用时,它可以传递包含原始\上次\更新值的额外上下文结构,如果同时更新了记录,系统将自动引发错误。有关 last_update
详细信息,请参阅 _check_concurrency()方法。
当发生这种情况时,客户机堆栈可以做出适当的反应,例如显示记录详细信息并询问用户她想强制更新(在这种情况下,可以简单地更新最后一次更新的值)或放弃她的本地更改。
异步类型二:安装模块异步;
描述:在实际生产环境中,会出现系统运行时,安装模块的情况。这时,模块会把一些默认的值写入数据库,但没有更新缓存。
【因此,需要强制添加缓存更新方法】
为了保障:ODOO 在以下方法中,添加为了更新缓存,_cache.update
- create 方法
- new 方法
- write 方法
- _prefetch_field 方法