使用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发布包中支持。

Support for the SOAP protocol is deprecated at the moment, but could maybe be revived if sufficient interrest is found in the community.

可用的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.