You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xmlrpc2包整合R与Odoo时嵌套列表报错的解决问询

R与Odoo XML-RPC整合问题解决

不用手动编写XML-RPC调用体的简便方案

直接使用专门为Odoo设计的R客户端包odooR,它已经封装了所有XML-RPC的底层调用逻辑,完全不用自己拼接请求体:

  • 先安装包(需要依赖devtools):
devtools::install_github("abresler/odooR")
  • 初始化Odoo连接:
library(odooR)

odoo_conn <- odoo_setup(
  url = "http://你的Odoo服务器地址",
  db = "你的数据库名",
  username = "登录账号",
  password = "登录密码"
)
  • 直接调用search_read获取数据:
model_data <- odoo_search_read(
  odoo = odoo_conn,
  model = "ir.model",
  fields = c("id", "model", "name")
)

全程无需处理XML-RPC的请求构造和响应解析,直接拿到结构化结果。

坚持使用xmlrpc2包的修正方法

针对你遇到的两个错误,调整参数构造方式即可解决:

  1. 第一个错误TypeError: execute() argument after ** must be a mapping, not list:Odoo的execute_kw要求search_read的最后一个参数是键值对映射(字典),而非普通列表;
  2. 第二个错误Error in list_to_array(unname(x)) : nested lists are not supported!:xmlrpc2处理嵌套列表时,需要用xmlrpc_data包装嵌套结构,明确这是映射类型而非普通列表。

修正后的代码:

library(xmlrpc2)
library(httr)

# 替换为你的实际参数
db <- "你的数据库名"
uid <- "你的用户ID" # 可通过common.authenticate接口获取
password <- "你的密码"
odoo_object_url <- "http://你的Odoo服务器地址/xmlrpc/2/object"

# 正确构造execute_kw的参数
rpc_body <- to_xmlrpc(
  method = "execute_kw",
  params = list(
    db,
    uid,
    password,
    "ir.model",
    "search_read",
    list(), # 空domain表示查询所有记录
    xmlrpc_data(list(fields = c("id", "model", "name"))) # 用xmlrpc_data包装映射参数
  )
)

# 发送请求并解析结果
response <- POST(odoo_object_url, body = rpc_body, content_type_xml())
result <- from_xmlrpc(content(response, as = "text"))

内容的提问来源于stack exchange,提问作者Abdu Kikhia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:27:38