标签:
odoo使用 wsgi 提供 了 XML_RPC 接口, 同时也为 web client 提供了 JSON-RPC
? ?
Odoo Web服务 暴露出 相关的服务, 路由分别是
? ?
根据 services 调用 后端对应服务的 方法method 【定义 openerp\http.py 之 dispatch_rpc()】,然后再将结果从python dict 转换为 xml-rpc 格式 或者 json-rpc 返回
? ?
service 对应的后端服务分别是
? ?
各服务提供的方法如下
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
});
},
? ?
? ?
标签:
原文地址:http://www.cnblogs.com/odoouse/p/5882749.html