如何通过 rpc 查询获取价值?

Posted

技术标签:

【中文标题】如何通过 rpc 查询获取价值?【英文标题】:How to get value through rpc query? 【发布时间】:2020-07-24 03:02:37 【问题描述】:

我写了一个 JS 代码来替换一个现有的函数, 这里是my previous question。

我已成功更换它。 现在我想判断用户是否有身份验证删除记录。 我不想通过ir.model.access来控制或者重写unlink方法,不能提前做别的。

系统可能会根据用户的等级删除记录或发送邮件给管理员。 然后我需要从 RPC 查询中得到一个结果。

_admin_check: function()
        var urlParams = new URLSearchParams(url);
        var id = urlParams.get('id');
        var uid = odoo.session_info.uid;
        return rpc.query(
            model: 'res.users',
            method: 'check_administration',
            args: [id,uid],
        ).then(function (result) 
            console.log(result)
            return result // how to actually return result
        );

    ,

我调用的 RPC 函数。

    def check_administration(self,uid):
        groups = self.env['res.groups']
        bs_manager = []
        lv8 = groups.search([('name', '=', 'level 8')]).users.ids
        lv7 = groups.search([('name', '=', 'level 7')]).users.ids
        admin = groups.search([('name', '=', 'setting')]).users.ids
        bs_manager = [r for r in admin if r not in bs_manager]
        bs_manager += [r for r in lv8 if r not in bs_manager]
        bs_manager += [r for r in lv7 if r not in bs_manager]
        if uid not in bs_manager:
            return False
        else:
            return True

然后我在删除确认过程中调用此函数 (_admin_check)。

if (this.confirmOnDelete) 
    var is_admin = self._admin_check();
    if(is_admin)
        Dialog.confirm(this, _t("Are you sure you want to delete this record ?"), 
            confirm_callback: doIt,
        );
    
    else
        Dialog.confirm(this, _t("You are not allow to delete this record. Sysyem will send a request to administrators. "), 
            confirm_callback: self.send_delete_request(),
        );
    
 else 
    doIt();

我确定控制台能得到结果是真还是假。 但似乎无法通过变量is_admin 获取。 如何通过 rpc 查询获取?

【问题讨论】:

【参考方案1】:

似乎没有办法通过RPC返回值, 然后我尝试在确认中直接使用 RPC。

if (this.confirmOnDelete) 
    var urlParams = new URLSearchParams(url);
    var id = urlParams.get('id');
    var uid = odoo.session_info.uid;
    rpc.query(
        model: 'res.users',
        method: 'check_administration',
        args: [id,uid],
    ).then(function (result) 
        if(result)
            Dialog.confirm(this, _t("Are you sure you want to delete this record ?"), 
                confirm_callback: doIt,
            );
        
        else
            Dialog.confirm(this, _t("You are not allow to delete this record. Sysyem will send a request to administrators."), 
                confirm_callback: self.send_delete_request(),
            );
        
    );

【讨论】:

以上是关于如何通过 rpc 查询获取价值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从查询 localhost:8000/example 中获取价值?q="user":"admin" in golang

如何通过 Phantom 钱包集成使用 Vanilla JS 和 JSON-RPC 获取 Solana 帐户信息和/或 SOL 余额?

ExtJs - 如何通过 id 从商店获取价值?

以太坊如何使用web3.js或者rpc接口获取交易数据交易时间与确认数?

获取 RPC 客户端的进程名称

怎样通过RPC命令实现区块链的查询