6

我可以通过管理页面将逗号分隔值 (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()可能)和一些额外的参数,但细节超出了我的范围。

4

2 回答 2

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

希望这对其他人也有用。

于 2014-10-04T11:21:30.943 回答
0

我认为答案是“不”。

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

  1. 创建一个模块,其中包含少量但用于导入的 CSV 文件。
  2. 安装模块。
  3. 当需要导入新的 CSV 文件时,将其传输到模块(FTP 或类似模块)。
  4. 传输后,运行模块的 update() 方法。这可以通过 API 完成。

更新方法将扫描并加载模块中设置的所有 CSV 文件。需要注意确保在任何时候只运行一个上传/更新事务。

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

于 2014-08-06T13:32:27.450 回答