Odoo中文网|Odoo实施培训

 找回密码
 立即注册
搜索
热搜: Odoo OpenERP 实施
查看: 6721|回复: 0
打印 上一主题 下一主题

Odoo Web Service API

[复制链接]

119

主题

119

帖子

566

积分

高级会员

Rank: 4

积分
566
跳转到指定楼层
楼主
发表于 2016-10-23 23:13:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Odoo Web服务暴露出相关的服务,路由分别是

/xmlrpc/
/xmlrpc/2/
/jsonrpc
根据 services 调用 后端对应服务的 方法method 【定义 openerp\http.py 之 dispatch_rpc()】,然后再将结果从python dict 转换为 xml-rpc 格式 或者 json-rpc 返回

   service 对应的后端服务分别是

common, openerp.service.common
db,openerp.service.db
object , openerp.service.model
report, openerp.service.report


各服务提供的方法如下
service
method
说明
common
login


authenticate


version


about


set_loglevel




db
create_database


duplicate_database


drop


dump


restore


rename


change_admin_password


migrate_database


db_exist


list


list_lang


list_countries


server_version




object
execute


execute_kw


execute_workflow




report
report


report_get


render_report




实现自己的方法时,要按照约定,以 'exp_' 开头。



XML-RPC接口调用

#在 note.note 模型创建新纪录

import xmlrpclib



root = 'http://%s:%d/xmlrpc/' % (HOST, PORT)



uid = xmlrpclib.ServerProxy(root + 'common').login(DB, USER, PASS) # common是服务,login 是方法

print "Logged in as %s (uid: %d)" % (USER, uid)



# Create a new note

sock = xmlrpclib.ServerProxy(root + 'object')

args = {

'color' : 8,

'memo' : 'This is a note',

'create_uid': uid,

}

note_id = sock.execute(DB, uid, PASS, 'note.note', 'create', args) #调用服务'object'的方法 execute(),传入的参数为 (DB, uid, PASS, 'note.note', 'create', args)





JSON-RPC接口调用

#在 note.note 模型创建新纪录



import jsonrpclib



# server proxy object

url = "http://%s:%s/jsonrpc" % (HOST, PORT)

server = jsonrpclib.Server(url)



# log in the given database

uid = server.call(service="common", method="login", args=[DB, USER, PASS]) #调用服务'common'的方法 login()



# helper function for invoking model methods

def invoke(model, method, *args):

args = [DB, uid, PASS, model, method] + list(args)

return server.call(service="object", method="execute", args=args) #调用服务'object'的方法 execute()



# create a new note

args = {

'color' : 8,

'memo' : 'This is another note',

'create_uid': uid,

}

note_id = invoke('note.note', 'create', args) #传入参数





其他



同时odoo Web 还为 odoo web client 提供了 大量的 json-rpc接口。例如数据集提供的服务如下, 定义在 class DataSet(http.Controller) [ addons\web\controllers\main.py ]。
routing
说明
/web/dataset/search_read
  
/web/dataset/load
  
/web/dataset/call
  
/web/dataset/call_kw
  
/web/dataset/call_buttion
  
/web/dataset/exec_workflow
  
/web/dataset/resequence
  


webclient 在调用 工作流时,直接 调用 rpc服务

/**

* Executes a signal on the designated workflow, on the bound OpenERP model

*

* @param {Number} id workflow identifier

* @param {String} signal signal to trigger on the workflow

*/

exec_workflow: function (id, signal) {

return session.rpc('/web/dataset/exec_workflow', {

model: this.name,

id: id,

signal: signal

});

},


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|技术支持|开发手册|Odoo中文网-远鼎旗下odoo培训网站 ( 苏ICP备15039516号 )

GMT+8, 2024-4-24 21:55 , Processed in 0.012827 second(s), 10 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表