当前位置: 首页 > 工具软件 > XMLRPC > 使用案例 >

Odoo的XMLRPC调用

夏法
2023-12-01

Odoo的XMLRPC调用

使用场景

  • 需要运行脚本调用odoo的模型方法,对数据库进行修改
  • 企业内部有多个系统服务,系统间互相调用模型方法

基本调用过程

  1. 服务端定义好模型和方法
    • 服务端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'
  1. 创建用户
    • 根据实际业务需求创建internal或者public用户,xmlrpc的权限等同于用户权限
    • 也可用API key代替明文密码,提高安全性
  2. 客户端调用
    • 正常调用,按照官网实例,获取用户id,每次调用时将用户名密码数据库,方法传递即可。

XMLRPC性能测试

  1. 经jmeter性能测试,当worker = 4时,如果没超出硬件限制,大概能支撑住1000+个并发请求,空载时吞吐量为500/sec. 且worker数越多,对并发的支持就越好。

类似方法

  1. odoorpc
  2. jsonrpc
    调用方法可参考:https://blog.csdn.net/lm_is_dc/article/details/115523781

其他

 类似资料: