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

NaG*_*182 6 python xml-rpc openerp

我的问题有点复杂,我不知道OpenERP.

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

  • 我可以访问外部数据库,使用XML RCP我也可以访问OpenERP.

  • 我只需使用XML RCP即可从外部数据库导入数据,但问题是同步.

  • 我不能只是插入修改后的伙伴并删除旧伙伴,
    因为我无法识别旧的伙伴.

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

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

这是如何运作的?以及如何使用此方法向res.partner添加外部ID?

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

odo*_*ony 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列中.id

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

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

参考文献:

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

1在OpenERP 6.1中,它位于设置>配置>序列和标识符>外部标识符下,在OpenERP版本7下的设置>技术>序列和标识符>外部标识符下.

2可以是任何没有点"."字符的字符串:它将存储在特殊的__export__模块命名空间中