CSV数据能否通过API发送到OpenERP/Odoo?

CSV数据能否通过API发送到OpenERP/Odoo?,openerp,xml-rpc,odoo,Openerp,Xml Rpc,Odoo,我可以通过管理页面将逗号分隔值(CSV)数据导入大多数模型。此过程处理外部ID,以便在以后的CSV导入中适当地添加或修改数据。这是一个疯狂的行为 通过API,可以创建和修改相同的记录,并且可以设置外部ID。然而,这需要CSV导入器在使用API推送数据的外部应用程序中手动编写大量逻辑,否则这些逻辑将由CSV导入器处理。通过API推送数据可以实现自动化 是否有一种方法可以使用API(因此无需更改Odoo中的代码)来推送CSV数据(因此插入/更新/关系/外部ID/等的逻辑由Odoo处理)?这将是一种混

我可以通过管理页面将逗号分隔值(CSV)数据导入大多数模型。此过程处理外部ID,以便在以后的CSV导入中适当地添加或修改数据。这是一个疯狂的行为

通过API,可以创建和修改相同的记录,并且可以设置外部ID。然而,这需要CSV导入器在使用API推送数据的外部应用程序中手动编写大量逻辑,否则这些逻辑将由CSV导入器处理。通过API推送数据可以实现自动化

是否有一种方法可以使用API(因此无需更改Odoo中的代码)来推送CSV数据(因此插入/更新/关系/外部ID/等的逻辑由Odoo处理)?这将是一种混合方法,我试图避免在Odoo中创建导入模块

编辑:“外部ID”通常称为“XML ID”。我认为这是OpenERP早期版本沿用的术语,而不是与XML有任何特定关系

编辑 本页介绍一个load()函数,该函数通过管道将类似CSV的数据加载到系统中:

我看不出如何通过API将该页面上的摘要转换为操作,如果确实可行的话。我猜我需要接口(入口点)、模型、方法(
load()
),以及一些附加参数,但细节我无法理解。

我想答案是“否”

但是,我已经向我解释了这项技术:

  • 创建一个模块,其中几乎没有CSV文件用于导入
  • 安装模块
  • 当需要导入新的CSV文件时,将其传输到模块(FTP或类似文件)
  • 传输后,为模块运行update()方法。这可以通过API实现
  • 更新方法将扫描并加载模块内设置的所有CSV文件。需要注意确保在任何时候只运行一个上载/更新事务

    当我完成这项工作后,我会在这里发布更多详细信息,或者如果有更好的方法来处理,我会很乐意接受另一个答案。

    答案是“是”

    load()
    方法可用于任何模型来加载数据。此方法以CSV文件提供的相同结构获取数据

    • 第一个参数是字段名数组,就像CSV导入上的列标题一样
    • 第二个参数是记录数组。每个记录都是与每个字段匹配的值数组
    API将返回OpenERP处理的错误列表。然而,许多错误只会导致OpenERP上的数据库异常,因此需要作为API故障进行检查。这在很大程度上是因为OpenERP API不是作为通用API设计的,而是作为GUI的一部分设计的,因此发送到API的数据通过该GUI与应用程序的当前状态绑定在一起。换句话说,使用OpenERP GUI,无效数据很少会进入API

    我已经在我的PHP OpenERP API库中包装了加载程序功能,用于捕获错误和异常:


    希望这对其他人也有用。

    也能通过API导出CSV,那就太好了。直接从模型中获取数据是一个多步骤的过程,以便在主模型记录中获取外部ID及其所有查找值(例如,状态列表及其所在国家/地区-这些国家/地区仅由内部数据库ID返回,需要单独查找外部ID)。