使用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的更详尽的例子.
login: 在Web服务 “common” 中调用 “login” 函数,使用下面的参数:
database
user name
password
创建一个新的合作者: 在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.