CSV数据可以通过API发送到OpenERP / Odoo吗?

时间:2014-07-23 11:27:36

标签: openerp xml-rpc odoo

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

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

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

编辑:“外部ID”通常称为“XML ID”。我认为这是一个与早期版本的OpenERP相悖的术语,而不是与XML有关的任何内容。

修改

此页面描述了一个load()函数,该函数通过管道将类似CSV的数据推送到系统中:

http://openerp-server.readthedocs.org/en/latest/06_misc_import.html

如果可能的话,我无法看到如何将该页面上的摘要转换为通过API的操作。我猜我需要接口(入口点),模型,方法(可能是load())和一些其他参数,但细节超出了我的范围。

2 个答案:

答案 0 :(得分:4)

答案有点“是”。

load()方法可用于对任何模型加载数据。此方法采用与CSV文件相同的结构数据。

  • 第一个参数是字段名称数组,例如CSV导入的列标题。
  • 第二个参数是记录数组。每条记录都是与每个字段匹配的值数组。

API将返回OpenERP为其提供的错误列表。但是,许多错误只会导致OpenERP上出现数据库异常,因此需要将其作为API故障进行处理。这主要是因为OpenERP API并非设计为通用API,而是作为GUI的一部分,因此发送到API的数据与通过该GUI的应用程序的当前状态非常相关。换句话说,无效数据很少会使用OpenERP GUI找到API。

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

https://github.com/academe/openerpapi/blob/master/src/App/Loader.php

希望这对其他人也有用。

答案 1 :(得分:0)

我认为答案是"没有"。

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

  1. 创建一个内容很少的模块,但要导入CSV文件。
  2. 安装模块。
  3. 当需要导入新的CSV文件时,将其传输到模块(FTP或类似文件)。
  4. 转移后,运行模块的update()方法。这可以通过API完成。
  5. 更新方法将扫描并加载模块中设置的所有CSV文件。需要注意确保只能在任何时间运行一个上传/更新交易。

    当我有这个工作时,我会在这里发布其他详细信息,或者如果有更好的方法来处理这个问题,我会乐意接受替代答案。