Odoo Json‐RPC调用服务动作 - xiaohao0576/odoo-doc GitHub Wiki

使用json-rpc调用Odoo的服务器动作,获取返回的数据。 在odoo服务器动作中,把返回的数据放到action里面,odoo会自动返回给客户端

在调用时,需要传递的参数使用context字典传递,服务动作里面使用env.context.get("key","")获取参数值

context字典里面 "lang": "zh_CN",表示取出中文的资料

此方式适用于Odoo SaaS版本

curl --location 'https://database_name.odoo.com/jsonrpc' \
--header 'Content-Type: application/json' \
--data '{
    "jsonrpc": "2.0",
    "method": "call",
    "params": {
        "service": "object",
        "method": "execute_kw",
        "args": [
            "database_name",  
            6,              
            "79a46api_key787dsfs",      
            "ir.actions.server",    
            "run",                  
            [1105](/xiaohao0576/odoo-doc/wiki/1105),
            {"context": {"lang": "zh_CN","chat_id": "777766666"}}  
        ],
        "kwargs": {}
    },
    "id": 12121
}'

如果要从model读取数据,可以用下面的请求json

{
    "jsonrpc": "2.0",
    "method": "call",
    "params": {
        "service": "object",
        "method": "execute_kw",
        "args": [
            "database",
            2,
            "02c04_api_key_c6fc9bbab",
            "res.company",
            "read",
            [
                [
                    1
                ],
                [
                    "name",
                    "phone",
                    "email",
                    "website",
                    "street",
                    "city"
                ]
            ]   
        ],
        "kwargs": {}
    },
    "id": 855132
}

使用Web Controller

有一个Web Controller是专门调用运行服务器动作的,/web/action/run,代码如下

    @route('/web/action/run', type='json', auth="user")
    def run(self, action_id, context=None):
        if context:
            request.update_context(**context)
        action = request.env['ir.actions.server'].browse([action_id])
        result = action.run()
        return clean_action(result, env=action.env) if result else False