6

我的问题有点复杂,我对OpenERP.

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

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

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

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

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

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

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

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

4

3 回答 3

5

简短回答:查看 CSV 导入和导出向导的工作方式 - 导出记录会自动创建一个外部标识符,因此您可以重新导入相同的 CSV,并且记录将被更新而不是重新创建。

长答案
OpenERP 将外部 ID 存储在ir.model.data表中,您可以通过设置菜单1在用户界面中访问它。这个简单的表将表单中的“外部标识符”映射module_name.record_identifier(model,res_id)指向实际表和行的对。

这些外部 ID 用于查找与某个外部源创建的记录相对应的数据库本地行:module通常是模块(因此是基于 - 的命名空间)或导入的 CSV 文件。

例如,外部标识符base.EUR映射到在数据库中保存欧元货币的数据库记录,并由base模块拥有。

从 6.1 版开始,OpenERP 自动为使用侧栏导出向导导出的所有 OpenERP 记录创建新的外部标识符:它们被导出到名为 .csv 的 CSV 列中。id

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

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

参考:

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

1在 OpenERP 6.1 中,它位于Settings>Configuration>Sequences & Identifiers>External Identifiers下,在 OpenERP 版本 7 中位于Settings>Technical>Sequences & Identifiers>External Identifiers下。

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

于 2013-01-16T11:43:37.653 回答
3

每行的“id”列的内容甚至可以是外部行id?或者那个id是由OpenERP设置的?

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

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

ir.model.data 在 7.0 版中有 - 你是如何搜索它的?

也不是侧边栏导出向导。

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

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

于 2013-01-17T17:31:18.197 回答
0

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

于 2013-01-16T11:02:49.763 回答