【问题标题】:Adding external Ids to Partners in OpenERP withouth a new module在没有新模块的情况下向 OpenERP 中的合作伙伴添加外部 ID
【发布时间】:2023-03-22 09:45:02
【问题描述】:

我的问题有点复杂,我是 OpenERP 的新手。

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: python xml-rpc openerp


    【解决方案1】:

    简短回答:查看 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 记录创建新的外部标识符:它们被导出到名为id.

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

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

    参考资料:

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

    1 在 OpenERP 6.1 中,它位于 Settings>Configuration>Sequences & Identifiers>External Identifiers 下,在 OpenERP 版本 7 中位于 Settings>Technical >序列和标识符>外部标识符

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

    【讨论】:

    • 每行“id”列的内容甚至可以是外部行id?还是那个 id 是由 OpenERP 设置的?
    【解决方案2】:

    每行的“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

    【讨论】:

    • 太棒了!如果我只是将导入模块与 CSV 一起使用并自动化它,我可以同步两个不同的数据库!谢谢!
    【解决方案3】:

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

    【讨论】:

    • 但是添加字段意味着制作插件,不是吗?我在 7.0 中也找不到任何 base_synchronization ...
    • 没关系。上面的新订单:我需要创建一个处理同步的 OpenERP 模块。尽管如此,还是感谢你的帮助。
    • @Anoma:跟踪数据库记录的外部标识符是 OpenERP 框架的内置功能,不需要额外的列或模块。例如,它适用于模块数据或导入/导出的 CSV 文件。
    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 2017-07-27
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多