1

我正在调用 Odoo 对象/搜索 API,并尝试返回 IR 记录列表以获取外部 ID 列表。

我正在搜索的模型是 ir.model.data 并希望匹配以下内容:

model = res.country.state
complete_name = l10n_uk.state_uk_99

我在 PHP 中使用的搜索条件是:

$ir_criteria = array(
    array('model', '=', 'res.country.state'),
    array('complete_name', 'in', 'l10n_uk.state_uk_99'),
);

我得到的是与模型匹配的所有 ir.model.data 记录,但不限于给定的完整名称。

为什么那行不通?

在“外部标识符”管理页面中,我确实得到了正确的结果——至少对于单个外部 ID——通过搜索:

Model Name = res.country.state
Module = l10n_uk
External Identifier = state_uk_99

所以这可能正是我需要通过 API 搜索的内容?

4

1 回答 1

1

这是我用来搜索模型 ir.model.data 的搜索条件,相当于上面的:

array(
  array("model", "=", "res.country.state"),
  array("module", "=", "l10n_uk"),
  array("name", "in", array("state_uk_99")),
)

“complete_name”分为模块和名称。如果没有模块,则在搜索条件中设置为“”。

如果我需要一次搜索多个模块,如果数据已经随着时间的推移以不同的方式导入,这似乎是一种需要,那么可以使用反向波兰表示法。因此,可以使用以下搜索条件提取状态“l10n_uk.state_uk_99”、“l10n_uk.state_uk_98”和“base.state_us_10”:

array(
  array("model", "=", "res.country.state"),
  // The following element repeated for number of modules minus 1.
  '|',
  // The first module.
  '&',
  array("module", "=", "l10n_uk"),
  array("name", "in", array("state_uk_99", "state_uk_98")),
  // The second module.
  '&',
  array("module", "=", "base"),
  array("name", "in", array("state_us_10")),
  // Further modules, as needed.
)

这将返回外部 ID 的数据库 ID,用于获取那些外部 ID 的 res_id,它指向 res.county.state 的状态记录

如果每个接口系统都可以完全控制自己在 OpenERP 上的一组外部 ID,那就太好了,但事实并非如此,所以我们总是被外部 ID 上的模块和格式的良好旧组合的潜力所困扰,所有通过以不同方式导入数据创建。

于 2014-07-25T10:20:49.123 回答