我的问题有点复杂,我是 OpenERP
的新手。
我有一个外部数据库和一个 OpenERP。外部的不是 PostgreSQL。 我的工作是我需要同步两个数据库中的伙伴。 外在的更重要。这意味着如果外部数据发生变化,OpenERp 的数据也会发生变化,但如果 OpenERP 的数据发生变化,则外部数据不会发生任何变化。
我可以访问外部数据库,使用 XML RCP 我可以访问 对 OpenERP 也是如此。
我可以简单地使用 XML RCP 从外部数据库导入数据,但是 问题是同步。
我不能只插入修改过的搭档并删除旧的搭档
因为我无法识别旧的。我需要更新它。但是然后我需要一个 id 来说明哪个是哪个。 和外部 ID。
据我所知,OpenERP 可以处理外部 ID。
这是如何运作的?以及如何使用它向我的 res.partner 添加外部 ID?
有人告诉我,我不能单独为此创建一个新模块,我需要使用内部 ID 作品。
最佳答案
简短回答:查看 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 列中id
.
如果这样的 id
列存在于通过导入向导导入的 CSV 文件中,OpenERP 还将创建一个外部标识符来记住它。当外部标识符已经存在时,将更新而不是创建记录。
理论上,您所要做的就是生成一个带有额外 id
列的正确 CSV 文件 2 来自您的主数据库(您甚至可以使用实际的数据库 ID),并将其导入 OpenERP。然后,您应该可以随时重新导入此 CSV 文件的更新版本。
引用资料:
- 导入 和导出 向导基本上调用 API 方法 export_data和 import_data ,因此您可以根据需要通过 XML-RPC 编写脚本。
ir.model.data
模型存储外部标识符(过去称为 XML ID,因为它对应于模块数据文件中 XML 记录的id
字段)。
1 在 OpenERP 6.1 中,它位于设置>配置>序列和标识符>外部标识符下,而在 OpenERP 版本 7 中,它位于设置>技术>序列和标识符>外部标识符.
2 可以是任何不带点“.
”字符的字符串:它将存储在一个特殊的 __export__
模块命名空间中)
关于python - 在没有新模块的情况下向 OpenERP 中的合作伙伴添加外部 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14356218/