我的问题有点复杂,我不熟悉OpenERP
。
我有一个外部数据库和一个OpenERP。外部的不是PostgreSQL。 我的工作是我需要同步两个数据库中的合作伙伴。 外部的一个更重要。这意味着如果外部数据的数据发生了变化,那么OpenERp的数据会发生变化,但如果OpenERP的数据发生变化则外部数据没有任何变化。
我可以访问外部数据库,并使用XML RCP我有访问权限 也是OpenERP的。
我可以使用XML RCP从外部数据库导入数据,但是 问题是同步。
我不能只是插入修改过的合作伙伴并删除旧的合作伙伴 因为我无法识别旧的。
我需要更新它。但后来我需要一个id,说哪个是哪个。 和外部ID。
据我所知,OpenERP可以处理外部ID。
这是如何工作的?以及如何使用此功能向我的res.partner添加外部ID?
有人告诉我,我不能单独创建一个新模块,我需要使用内部ID工作。
答案 0 :(得分:5)
简短回答:查看CSV导入和导出向导的工作方式 - 导出记录会自动创建外部标识符,以便您可以重新导入CSV和记录将被更新而不是重新创建。
答案很长:
OpenERP在ir.model.data
表中存储外部ID,您可以通过设置菜单 1 在用户界面中访问这些ID。这个简单的表格将module_name.record_identifier
形式的“外部标识符”映射到指向实际表格和行的一对(model,res_id)
。
这些外部ID用于查找与某个外部源创建的记录对应的数据库本地行:模块(因此基于module
的命名空间)或导入的CSV文件,通常。
例如,外部标识符base.EUR
映射到数据库中包含EUR货币的数据库记录,并由base
模块拥有。
自版本6.1起,OpenERP会使用侧栏导出向导自动为导出的所有OpenERP记录创建新的外部标识符:它们将导出到名为CSV列的CSV列中id
。
如果通过导入向导id
列,则OpenERP还会创建一个外部标识符以便记住它。当外部标识符已存在时,记录将被更新而不是创建。
理论上,您所要做的就是从主数据库中生成一个带有额外id
列 2 的正确CSV文件(您甚至可以使用实际的数据库) ID),并在OpenERP中导入它。然后,您应该可以随时重新导入此CSV文件的更新版本。
<强>参考文献:强>
ir.model.data
模型存储外部标识符(历史上称为XML ID,因为它对应于模块数据文件中XML记录的id
字段)。 1 可以是任何字符串,其中没有点“.
”字符:它将存储在特殊的__export__
模块命名空间中)
答案 1 :(得分:3)
'id'列的每行内容甚至可以是外部行id?或者该ID由OpenERP设置?
如果不存在,则由OpenERP设置id,否则它使用您放入的任何外部行ID。
我在7.0中看不到ir.model.data
ir.model.data存在于7.0版本 - 你是如何搜索它的?
也不是侧边栏导出向导。
在版本7中,您现在需要启用导出/导入。
答案 2 :(得分:0)
在res partner表中添加一个整数字段,用于在两个数据库上存储外部id。从外部服务器恢复数据并添加到openerp数据库时,将外部ID存储在本地服务器中res伙伴的记录中,并将新创建的伙伴记录的ID保存在外部服务器的伙伴记录中。因此,下次更新外部合作伙伴记录时,我们可以在本地服务器中搜索外部ID并更新该记录。 请检查openerp模块base_synchronization并阅读代码,这对您有所帮助。