在没有新模块的情况下向OpenERP中的合作伙伴添加外部ID

时间:2013-01-16 10:27:12

标签: python xml-rpc openerp

我的问题有点复杂,我不熟悉OpenERP

我有一个外部数据库和一个OpenERP。外部的不是PostgreSQL。 我的工作是我需要同步两个数据库中的合作伙伴。 外部的一个更重要。这意味着如果外部数据的数据发生了变化,那么OpenERp的数据会发生变化,但如果OpenERP的数据发生变化则外部数据没有任何变化。

  • 我可以访问外部数据库,并使用XML RCP我有访问权限 也是OpenERP的。

  • 我可以使用XML RCP从外部数据库导入数据,但是 问题是同步。

  • 我不能只是插入修改过的合作伙伴并删除旧的合作伙伴 因为我无法识别旧的。

  • 我需要更新它。但后来我需要一个id,说哪个是哪个。 和外部ID。

  • 据我所知,OpenERP可以处理外部ID。

这是如何工作的?以及如何使用此功能向我的res.partner添加外部ID?

有人告诉我,我不能单独创建一个新模块,我需要使用内部ID工作。

3 个答案:

答案 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

如果通过导入向导 导入的CSV文件中存在id列,则OpenERP还会创建一个外部标识符以便记住它。当外部标识符已存在时,记录将被更新而不是创建。

理论上,您所要做的就是从主数据库中生成一个带有额外id 2 的正确CSV文件(您甚至可以使用实际的数据库) ID),并在OpenERP中导入它。然后,您应该可以随时重新导入此CSV文件的更新版本。

<强>参考文献:

  • 导入导出向导基本上调用API方法export_dataimport_data,因此如果需要,您可以通过XML-RPC编写脚本
  • ir.model.data模型存储外部标识符(历史上称为XML ID,因为它对应于模块数据文件中XML记录的id字段)。

在<>>设置&gt;配置&gt;序列&amp;标识符&gt;外部标识符,以及在设置&gt;技术&gt;序列&amp ;;下的OpenERP版本7中。标识符&gt;外部标识符

1 可以是任何字符串,其中没有点“.”字符:它将存储在特殊的__export__模块命名空间中)

答案 1 :(得分:3)

  

'id'列的每行内容甚至可以是外部行id?或者该ID由OpenERP设置?

如果不存在,则由OpenERP设置id,否则它使用您放入的任何外部行ID。

  

我在7.0中看不到ir.model.data

ir.model.data存在于7.0版本 - 你是如何搜索它的?

  

也不是侧边栏导出向导。

在版本7中,您现在需要启用导出/导入。

http://forum.openerp.com/forum/topic35830.html

答案 2 :(得分:0)

在res partner表中添加一个整数字段,用于在两个数据库上存储外部id。从外部服务器恢复数据并添加到openerp数据库时,将外部ID存储在本地服务器中res伙伴的记录中,并将新创建的伙伴记录的ID保存在外部服务器的伙伴记录中。因此,下次更新外部合作伙伴记录时,我们可以在本地服务器中搜索外部ID并更新该记录。 请检查openerp模块base_synchronization并阅读代码,这对您有所帮助。