本博客包含多个文档和书籍的翻译,但有能力者推荐阅读英文原版

Odoo 13开发者文档:外部API

Odoo Alan 3周前 (10-23) 249次浏览 0个评论
Odoo通常通过模型进行内部继承,但它的很多功能和数据也可由外部访问进行外部分析或不同工具的要变成。一部分 模型引用 API 可以轻松地通过 XML-RPC 访问并可在很多操作语言中使用。

如果你已经安装了 Odoo服务,可以直接使用其参数。

  • Python 3
  • Ruby
  • PHP
  • Java

为让探讨更为简单,可以通过https://demo.odoo.com 获取一个测试数据库:

  • Python 3
  • Ruby
  • PHP

    这些示例使用了 Ripcord 库,它提供一种简单的XML-RPC API。 Ripcord要求在PHP安装中 启用对XML-RPC 支持

    因为调用通过 HTTPS进行执行,还要求启用 OpenSSL 插件

  • Java

    这些示例使用了 Apache XML-RPC库

    示例没有包含导入语句,因其代码无法进行粘贴。

Odoo要求API用户首先要进行认证才能查询其大多部分数据。

xmlrpc/2/common 端点提供无需认证的meta调用,如验证本身或获取版本信息。要在认证前验证连接信息是否正确,最简单的调用是查看服务端的版本。认证本身是通过authenticate 函数来完成,并返回在认证调用时使用的用户标识符 (uid) 而非登录信息。

  • Python 3

  • Ruby

  • PHP

  • Java

例如要查看是否可以读取 res.partner 模型,我们可以使用位置传递的operation关键字传递的raise_exception调用check_access_rights  (来获取true/false 结果,而非true/error):

第二个端点是 xmlrpc/2/object,用于通过execute_kw RPC 函数调用odoo模型的方法。

每个对 execute_kw 的调用接收如下参数:

  • 要使用的数据库,字符串
  • 用户id (通过 authenticate获取),整型
  • 用户的密码,字符串
  • 模型名,字符串
  • 方法名,字符串
  • 通过position传递的参数数组/列表
  • 通过keyword (可选)传递的参数映射/字典

例如要查看我们是否可读取 res.partner 模型我们可以通过传递position给operation及传递keyword给raise_exception调用 check_access_rights  (从而获取true/false的结果,而非 true/error):

  • Python 3
  • Ruby
  • PHP
  • Java

记录可通过search()列出并过滤。

search() t接收必须的 domain 过滤器(可能为空),并返回所有匹配过滤器的记录的数据库标识符。例如要列出客户的公司:

  • Python 3
  • Ruby
  • PHP
  • Java

默认搜索会返回所有匹配该条件的记录的id,它可以是很大的数量。 offset 和 limit 参数仅在获取所匹配记录的子集时可用。

  • Python 3
  • Ruby
  • PHP
  • Java

不去获取可能很大的记录列表并进行计数,search_count() 可用于仅获取匹配查询的记录数。它接收相同的 domain 过滤器来作为 search()的参数。

  • Python 3
  • Ruby
  • PHP
  • Java

记录数据可通过 read() 方法进行访问,它接收一个id列表 (由 search()返回) 以及一个可选的要获取的字段列表。默认,它会获取当前用户可以读取的所有字段,并很可能会是很大的数据量。

  • Python 3
  • Ruby
  • PHP
  • Java

相反,仅提取三个有趣的字段。

  • Python 3
  • Ruby
  • PHP
  • Java

fields_get() 可用于检查模型的字段并查看哪些字段可能会是所需的。

因为它返回大量的元信息 (也由客户端程序使用),应在打印前进行过滤,大部分对人类用户有用的内容都是 string (字段的标签), help (如若存在为帮助文本) 和 type (了解要获取的是哪些值或在更新记录时进行发送):

  • Python 3
  • Ruby
  • PHP
  • Java

因为这是很常见的任务,Odoo提供了一个 search_read() 快捷方法,如其名称所表明,这是一个在search()后紧接着read()的方法,但它会避免执行两次查询,并且保存着 id。

它的参数类似于 search()的,但它也可以接收一个fields列表 (类似 read(),如未提供该列表,它将获取所有匹配字段的记录:

  • Python 3
  • Ruby
  • PHP
  • Java

模型的记录使用 create()来进行创建。该方法将创建单条记录并返回其数据库标识符。

create() 接收一个字段对值的映射,用于初始化该记录。对于任意有默认值并未通过映射参数进行设置的字段,会使用字段默认值。

  • Python 3
  • Ruby
  • PHP
  • Java

记录可使用 write()进行更新,它接收一个待更新的记录列表和类似create()的字段对值的映射。

多条记录可同步进行更新,但它们将对所设置的字段获取相值。当前还不可以执行“computed”更新(即值可以根据已的记录值来进行设置)。

  • Python 3
  • Ruby
  • PHP
  • Java

可以通过向 unlink()传递 id 来指删除记录。

  • Python 3
  • Ruby
  • PHP
  • Java

我们此前使用了 fields_get() 来查询模型并从一开始就使用了一个任意的模型, Odoo将大部分模型元数据存储在一小部分允许通过XML-RPC即时地查询系统或更改模型或字段(存在一些限制)的元模型中。

通过不同字段提供有关Odoo模型的信息

name
可供人类阅读的模型描述
model
系统中每个模型的名称
state
模型是在Python 代码(base) 中 生成或创建一条 ir.model 记录 (manual)
field_id
通过对于 ir.model.fieldsOne2many的模型字段列表
view_ids
针对模型定义的ViewsOne2many
access_ids
 设置于模型中的Access Control 的One2many关联

ir.model 可用于

  • 查询系统获取已安装模型 (作为对模型操作的预查询或探查系统的内容)
  • 获取有关具体模型的信息 (常通过列出与其关联的字段)
  • 通过RPC动态新建模型

自定义模型一开始仅包含对所有模型可用的“内置”字段:

  • Python 3
  • PHP
  • Ruby
  • Java

提供有关Odoo模型的字段信息并允许无需使用Python字段即添加自定义字段

model_id
 字段所属ir.model 的Many2one
name
字段的技术名称 (用于read 或 write)
field_description
字段的用户可读取标签(如fields_get中的 string )
ttype
要创建的字段 类型
state
字段是否通过Python 代码 (base) 或 ir.model.fields (manual)创建
requiredreadonlytranslate
对字段启用对应的标记
groups
字段级访问控制res.groupsMany2many
selectionsizeon_deleterelationrelation_fielddomain
针对类型的属性和自定义,参见 字段文档 了解更多详情

如同自定义模型,仅有通过通过state="manual" 新建的字段激活为模型中的实际字段。

  • Python 3
  • PHP
  • Ruby
  • Java
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址