我在Odoo中的两个数据库之间进行同步。如果它在远程上没有任何问题,那么它在两侧同步。但是如果远程出现问题,则提交本地数据库更改,但远程不提交。 换句话说,数据库不同步。
是否有办法在本地数据库中进行更改,如果出现问题,尝试同步远程数据库,则将本地数据库回滚到以前的状态。
有这种方法:
@api.one
def order_process_now(self):
servers = self._synchro_before_sale()
# Process local order
inv_id = self.action_invoice_create()
if inv_id:
inv = self.env['account.invoice'].search([('id', '=', inv_id)])
inv.signal_workflow('invoice_open')
for picking in self.picking_ids:
picking.force_assign()
picking.action_done()
# Process remote orders
self._remote_order_action('order_process_now', servers)
正如您所看到的,它分为两部分。首先,它对本地数据库进行更改,然后在远程进行更改(使用xmlrpclib
和erppeek
包装器进行更改。
如何将此方法作为一个事务,因此如果执行方法出错,对数据库的任何更改都会回滚?
答案 0 :(得分:0)
您需要查看two phase commits。基本上,这允许您在每个单独的系统上进行试验提交,然后只有当两个成功完成最终的“真正”提交时才会进行。
你还需要处理以下情况:客户崩溃了。然后你就会准备好挂起的东西,你会想要回滚它们并重新开始。