This is the documentation for older versions of Odoo (formerly OpenERP).

See the new Odoo user documentation.

See the new Odoo technical documentation.

使用Web服务(Working with Web Services)

鉴于OpenERP的架构,它不适合直接通过PostgreSQL客户端或者 ODBC 这样的连接方法访问数据库, 幸运的是,OpenERP提供了一个非常全面的web服务集,允许你通过标准协议做任何事情。

注解

虽然直接访问数据库,在技术上是可行的,你必须意识到这可能对您的数据造成灾难性的后果,除非你知道你是在做 什么。当你直接访问数据库的时候,建议您关闭OpenERP服务器,以避免缓存和并发问题。

支持的网络服务协议(Supported Web Services Protocols)

目前支持的协议是XML-RPC和Net-RPC。XML-RPC是用于Web服务的第一批标准之一, 几乎可以再任何语言中使用。这是一个非常详细的协议,而且在需要的时候可以引入潜在位。 另一方面,Net-RPC是一个优化的协议,特别用在Python编写的应用程序之间。.

对于REST风格的web服务的支持在将来的OpenErp发布包中支持。

对于SOAP协议,目前的OPenErp已经不再支持,但是如果在社区有足够的爱好者的话将来可能恢复。

可用的Web服务(Available Web Services)

OpenERP 为你提供了以下的Web服务.

注解

你能在服务的源码(/bin/service/web_services.py)的对应类里面找到每种服务的细节 .

db:

提供函数创建、删除、备份、恢复数据库. 请谨慎使用!

common:

让你登录和退出 OpenERP, 并且提供各种实用功能。你只有登录后才能使用其他的网络服务.

object:

这是最有用的网络服务,因为通过它可以访问 OpenERP 对象. 值得注意的是, 函数 "execute" 让你调用对象的方法, 比如可以搜索的大部分的ORM方法,读写记录。它也可以用来调用价格计算等对象的其他方法.

注解

主要的 ORM 方法一览:

create({'field':'value'})
  • 创建一个具有指定值的新纪录

  • Returns: 新纪录的ID

search([('arg1','=','value1')...], offset=0, limit=1000)
  • arg1, arg2, .. ,argN: 指定列表的搜索条件

  • offset: 跳过的可选的记录

  • limit: 返回的最大数量的记录

  • Returns: 匹配给定条件的记录

read([IDS], ['field1','field2',...])
  • fields: 返回的字段名字(默认全部返回) (default: all fields)

  • Returns: 每条记录的ID和请求字段的值

write([IDS], {'field1':'value1','field2':3})
  • values: 更新的字段的值

  • Updates 对给定的记录按照给定的值进行更新

  • Returns: True

unlink([IDS])
  • 按照给定的IDS删除记录

  • Returns: True

通过 Web 服务不能使用 Browse() 函数.

另一个有用的功能是 "exec_workflow", 它可以让你通过工作流制定记录的进展.

wizard:

提供对旧式的向导。新风格的向导是基于ORM的,因此他们可以通过 "object" web 服务来进行访问.

report:

让你生成和检索报告.

例子:通过Web服务写入数据(Example:writing data through the Web Service)

下面是一个写数据的例子程序。在下一章你会发现关于多种编程语言 XML-RPC的更详尽的例子.

  1. login: 在Web服务 "common" 中调用 "login" 函数,使用下面的参数:

    • database

    • user name

    • password

  2. 创建一个新的合作者: 在Web服务 "object" 中调用 "execute" 函数,使用下面的参数:

    • database

    • user id provided by "login" in step 1.

    • the object name : 'res.partner'

    • the name of the ORM method : "create"

    • some data to be recorded

上面提到的数据都是键值对, 比如:

  • name: Fabien Pinckaers

  • lang: fr_FR

But more complex data structures can also be sent - for example you could record a partner and his addresses, all in a single call to the web service. In that case, all the data is processed by the server during the same database transaction - meaning you are sure to keep a consistent state for your data - a critical requirement for all ERP applications.