Odoo 10 - 来自 XMLRPC 的调用方法
Odoo 10 - Call method from XMLRPC
我使用一种名为 do_new_transfer_xmlrpc
的新方法扩展了模型 stock.picking
,该方法启用了来自 XMLRPC 的基本 new_transfer。
class Picking(models.Model):
_inherit = 'stock.picking'
@api.multi
def do_new_transfer_xmlrpc(self):
print 'DEBUG'
self.do_transfer()
return ['OK', '']
我尝试使用以下方法调用该方法:
api.execute_kw(db, uid, pwd, 'stock.picking', 'do_new_transfer_xmlrpc', [[int(picking_id)], {}])
但我得到:
Fault: <Fault 1: 'Traceback (most recent call last):\n File "/usr/lib/python2.7/dist-packages/odoo/service/wsgi_server.py", line 56, in xmlrpc_return\n result = odoo.http.dispatch_rpc(service, method, params)\n File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 118, in dispatch_rpc\n result = dispatch(method, params)\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 38, in dispatch\n res = fn(db, uid, *params)\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 157, in execute_kw\n return execute(db, uid, obj, method, *args, **kw or {})\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 101, in wrapper\n return f(dbname, *args, **kwargs)\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 164, in execute\n res = execute_cr(cr, uid, obj, method, *args, **kw)\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 153, in execute_cr\n return odoo.api.call_kw(recs, method, args, kw)\n File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 685, in call_kw\n method = getattr(type(model), name)\nAttributeError: type object \'stock.picking\' has no attribute \'do_new_transfer_xmlrpc\'\n'>
使用的调用方法写对了吗?
这是正确的语法:
api.execute_kw(db, uid, pwd, 'stock.picking', 'do_new_transfer_xmlrpc', [int(picking_id)])
您可以试试下面的代码。
leave_data = models.execute_kw(db, uid, password,'hr.leave', 'get_available_leaves',[10],{'employee_id':1})
print("leave_data=",leave_data)
代码将调用参数为 employee_id 的方法 'get_available_leaves'。 10是记录的id。
实际方法:
def get_available_leaves(self, employee_id):
我使用一种名为 do_new_transfer_xmlrpc
的新方法扩展了模型 stock.picking
,该方法启用了来自 XMLRPC 的基本 new_transfer。
class Picking(models.Model):
_inherit = 'stock.picking'
@api.multi
def do_new_transfer_xmlrpc(self):
print 'DEBUG'
self.do_transfer()
return ['OK', '']
我尝试使用以下方法调用该方法:
api.execute_kw(db, uid, pwd, 'stock.picking', 'do_new_transfer_xmlrpc', [[int(picking_id)], {}])
但我得到:
Fault: <Fault 1: 'Traceback (most recent call last):\n File "/usr/lib/python2.7/dist-packages/odoo/service/wsgi_server.py", line 56, in xmlrpc_return\n result = odoo.http.dispatch_rpc(service, method, params)\n File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 118, in dispatch_rpc\n result = dispatch(method, params)\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 38, in dispatch\n res = fn(db, uid, *params)\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 157, in execute_kw\n return execute(db, uid, obj, method, *args, **kw or {})\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 101, in wrapper\n return f(dbname, *args, **kwargs)\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 164, in execute\n res = execute_cr(cr, uid, obj, method, *args, **kw)\n File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 153, in execute_cr\n return odoo.api.call_kw(recs, method, args, kw)\n File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 685, in call_kw\n method = getattr(type(model), name)\nAttributeError: type object \'stock.picking\' has no attribute \'do_new_transfer_xmlrpc\'\n'>
使用的调用方法写对了吗?
这是正确的语法:
api.execute_kw(db, uid, pwd, 'stock.picking', 'do_new_transfer_xmlrpc', [int(picking_id)])
您可以试试下面的代码。
leave_data = models.execute_kw(db, uid, password,'hr.leave', 'get_available_leaves',[10],{'employee_id':1})
print("leave_data=",leave_data)
代码将调用参数为 employee_id 的方法 'get_available_leaves'。 10是记录的id。
实际方法:
def get_available_leaves(self, employee_id):