Odoo的XMLRPC调用
使用场景
- 需要运行脚本调用odoo的模型方法,对数据库进行修改
- 企业内部有多个系统服务,系统间互相调用模型方法
基本调用过程
- 服务端定义好模型和方法
- 服务端odoo orm方法能被调用
- 加了@api.model装饰器的函数能被调用
- 为了让不同语言调用,一般返回值要序列化,json或xml都行
class xmlrpc_galaxy(models.Model):
_name = 'xmlrpc_galaxy.xmlrpc_galaxy'
_description = 'xmlrpc_galaxy.xmlrpc_galaxy'
@api.model
def get_res_partners(self, operation, raise_exception=True):
# 不要_get_res_partners
_logger.info(f"-- get_res_partners:")
records = self.env['res.users'].sudo().search([])
internal_users = records.filtered(lambda pav: pav.share == False)
user_dict = {str(r.id): str(r.login) for r in internal_users}
_logger.info(f"-- user_dict: {user_dict}")
return json.dumps(user_dict)
@api.model
def get_permission_check(self):
_logger.info(f"--- in get_permission_check:")
return 'haha'
- 创建用户
- 根据实际业务需求创建internal或者public用户,xmlrpc的权限等同于用户权限
- 也可用API key代替明文密码,提高安全性
- 客户端调用
- 正常调用,按照官网实例,获取用户id,每次调用时将用户名密码数据库,方法传递即可。
XMLRPC性能测试
- 经jmeter性能测试,当worker = 4时,如果没超出硬件限制,大概能支撑住1000+个并发请求,空载时吞吐量为500/sec. 且worker数越多,对并发的支持就越好。
类似方法
- odoorpc
- jsonrpc
调用方法可参考:https://blog.csdn.net/lm_is_dc/article/details/115523781
其他
- 无