odoo14中rpc调用分为两种。

一种是外部调用rpc来访问odoo数据,这个时候你需要登录授权。

另一种是我们自己编写的widget小部件或者自定义视图时候通过js通过rpc去获取数据。

这里说的是第二种rpc的使用。

上代码:

    //调用res.users中的自定义的get_userform_action方法
this._rpc({
model: 'res.users',
method: 'get_userform_action',
args: [[data.val]]//这里就是python函数声明里的*args,当你的方法不是model方法也不是model_create方法的时候,这里一个参数传的是当前model(res.users)的记录id,它会查询id结果作为self去调用get_userform_action
}).then(function (result){
self.do_action(result);
}); //查询数据的方法
this._rpc({
model: this.model,
method: 'read_group',
domain: [],
fields: ['color'],
groupBy: ['color'],
}).then(function (result) {
_.each(result, function (r) {
self.colorGroupData[r.color] = r.color_count;
});
});
//自定义的方法
class Users(models.AbstractModel):
_inherit = 'res.users' def get_userform_action(self):
action = self.env.ref('ship_manage.res_company_user_form_action').read()[0]
action['res_id'] = self.id
return action
 1 //Python   rpc参数传递源码
2 def _call_kw_model(method, self, args, kwargs):
3 context, args, kwargs = split_context(method, args, kwargs)
4 recs = self.with_context(context or {})
5 _logger.debug("call %s.%s(%s)", recs, method.__name__, Params(args, kwargs))
6 result = method(recs, *args, **kwargs)
7 return downgrade(method, result, recs, args, kwargs)
8
9
10 def _call_kw_model_create(method, self, args, kwargs):
11 # special case for method 'create'
12 context, args, kwargs = split_context(method, args, kwargs)
13 recs = self.with_context(context or {})
14 _logger.debug("call %s.%s(%s)", recs, method.__name__, Params(args, kwargs))
15 result = method(recs, *args, **kwargs)
16 return result.id if isinstance(args[0], Mapping) else result.ids
17
18
19 def _call_kw_multi(method, self, args, kwargs):
20 ids, args = args[0], args[1:]
21 context, args, kwargs = split_context(method, args, kwargs)
22 recs = self.with_context(context or {}).browse(ids)
23 _logger.debug("call %s.%s(%s)", recs, method.__name__, Params(args, kwargs))
24 result = method(recs, *args, **kwargs)
25 return downgrade(method, result, recs, args, kwargs)
26
27
28 def call_kw(model, name, args, kwargs):
29 """ Invoke the given method ``name`` on the recordset ``model``. """
30 method = getattr(type(model), name)
31 api = getattr(method, '_api', None)
32 if api == 'model'://这里将模型分成了三种走向,三种走向对参数的处理不一样
33 result = _call_kw_model(method, model, args, kwargs)
34 elif api == 'model_create':
35 result = _call_kw_model_create(method, model, args, kwargs)
36 else:
37 result = _call_kw_multi(method, model, args, kwargs)
38 model.flush()
39 return result

Odoo14 rpc的更多相关文章

  1. 【odoo14】第十五章、网站客户端开发

    odoo的web客户端.后台是员工经常使用的地方.在第九章中,我们了解了如何使用后台提供的各种可能性.本章,我们将了解如何扩展这种可能性.其中web模块包含了我们在使用odoo中的各种交互行为. 本章 ...

  2. 【odoo14】第十六章、odoo web库(OWL)

    odoo14引入了名为OWL(Odoo Web Library)的JavaScript框架.OWL是以组件为基础的UI框架,通过QWeb模板作为架构.OWL与传统的组件系统相比更快,并引入了一些新的特 ...

  3. 【odoo14】odoo 14 Development Cookbook【目录篇】

    网上已经有大佬翻译过odoo12并且在翻译odoo14了.各位着急的可以自行搜索下... 这本书是为了让自己从odoo12转odoo14学习.也是为了锻炼下自己... odoo 14 Developm ...

  4. Odoo14 OWL 如何访问model方法和res_id

    首先OWL是Odoo14版本新加的功能. 因为是新加的所以并没有太多的说明文档,包括英文板文档也没有:所以你要用它再没有更详细的文档之前你得自己去看源码. 注意owl是没有do_action函数给你跳 ...

  5. 从RPC开始(一)

    这是一篇关于纯C++RPC框架的文章.所以,我们先看看,我们有什么? 1.一个什么都能干的C++.(前提是,你什么都干了) 2.原始的Socket接口,还是C API.还得自己去二次封装... 3.C ...

  6. RPC 使用中的一些注意点

    最近线上碰到一点小问题,分析其原因发现是出在对 RPC 使用上的一些细节掌握不够清晰导致.很多时候我们做业务开发会把 RPC 当作黑盒机制来使用,但若不对黑盒的工作原理有个基本掌握,也容易犯一些误用的 ...

  7. 谈谈如何使用Netty开发实现高性能的RPC服务器

    RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...

  8. 游戏编程系列[1]--游戏编程中RPC协议的使用[3]--体验

    运行环境,客户端一般编译为.Net 3.5 Unity兼容,服务端因为用了一些库,所以一般为4.0 或往上.同一份代码,建立拥有2个项目.客户端引用: WindNet.Client服务端引用: OpL ...

  9. python通过protobuf实现rpc

    由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc.rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行g ...

随机推荐

  1. 102_Power Pivot DAX 排名后加上总排名数

    焦棚子的文章目录 请点击下载附件 1.背景 每次写rank的时候,有了排名就可以了,排名1,2,3,4,5这样不是很清晰吗?但是中国式报表的老板们说你能不能在排名后面加一个总排名数呢,就像1/5,2/ ...

  2. JetBrains IDE全新UI预览版来了,要做简洁与强大兼顾的IDE

    5月23日,JetBrains发布了一篇博文,透露他们正在实现一套全新的界面界面. 他们认为目前行业中的用户界面趋势已经发生了演变,很多新用户认为JetBrains IDE的界面过于笨重,而且过时.所 ...

  3. 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案

    2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...

  4. 关于『HTML』:第二弹

    关于『HTML』:第二弹 建议缩放90%食用 第二弹! 它来了! 它来了! 我竟然没有拖更,对了,你们昨天用草稿纸了么 开始正文之前提一个问题:大家知道"%%%"是什么意思吗?就这 ...

  5. 换个角度带你学C语言的基本数据类型

    摘要: C语言的基本数据类型,大家从学生时代就开始学习了,但是又有多少人会试图从底层的角度去学习呢?这篇文章会用一问一答的形式,慢慢解析相关的内容和困惑. 本文分享自华为云社区<从深入理解底层的 ...

  6. 小白excel初步使用2022.06.02

    1.添加 对表格数据相加求和:在表示数据的那一列黄色表格下输入=SUM(D1:D5)或者alt+=或者SUMIF(D1:D5,">50")或者SUMIF(D1,D3:D7,1 ...

  7. Kubernetes client-go 源码分析 - ListWatcher

    概述ListWatch 对象的创建GetterListWatchList() & Watch() 概述 源码版本信息 Project: kubernetes Branch: master La ...

  8. redis客户端打不开 提示cannot connect to server dev.check log for details

    我当前状况是redis客户端打不开,之前一直好好的(虽然作为一个程序员我不配说这句话,哈哈),但是我排查了我觉得所有的可能性,我用的阿里云的redis(还没有到购买到期时间),然后我就关闭了防火墙,你 ...

  9. Redis 中的原子操作(3)-使用Redis实现分布式锁

    Redis 中的分布式锁如何使用 分布式锁的使用场景 使用 Redis 来实现分布式锁 使用 set key value px milliseconds nx 实现 SETNX+Lua 实现 使用 R ...

  10. 循环码、卷积码及其python实现

    摘要:本文介绍了循环码和卷积码两种编码方式,并且,作者给出了两种编码方式的编码译码的python实现 关键字:循环码,系统编码,卷积码,python,Viterbi算法 循环码的编码译码 设 \(C\ ...