Odoo14 rpc


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM