【问题标题】:Calling methods through XMLRPC - Odoo v9通过 XMLRPC 调用方法 - Odoo v9
【发布时间】:2017-06-19 21:42:58
【问题描述】:

我在自定义模型上有一个简单的函数,可以根据 xmlrpc(带有 ripcord 库的 PHP)传递的信息创建记录,但是当我执行 php 时,odoo 控制台返回以下错误:

“无法编组递归字典”类型错误:无法编组 递归字典"

我传递的数据是存储在数据库文本字段中的“Json”,所以首先我解析查询并从数据库中获取数据,然后尝试通过 XMLRPC 将其发送到 Odoo

这是我的代码:

t_form_main 模型

class t_form_main(models.Model):
        _name       =   "t_form_main"   
        _rec_name   =   "form_uid"
        _order      =   "form_uid"
        form_uid    =   fields.Char(string="ID",required=True)
        json_string =   fields.Text(string="JSON_original", required=True)

@api.one
        def infoReceptor(self,info_uid,json_data):
            vals                =   {}
            vals['form_uid']    =   info_uid
            vals['json_string'] =   json_data
            return super(t_form_main,self).create(vals)
        

我用来调用 XMLRPC 的 php 语句:

  $insert =   $models->execute_kw($db, $uid, $password,'t_form_main','infoReceptor', array(self,"UID",$data));

将 $data 视为存储来自此查询的数据的变量:

$query      =   "SELECT raw_json FROM json_archive";
$result     =   $mysqlconn->query($query);
$row        =   $result->fetch_array(MYSQLI_ASSOC);

解决方案

代码是正确的,问题是由数据库编码中的问题引起的,感谢 Phillip Stack 在返回我的函数时提供的建议。

【问题讨论】:

    标签: php mysql odoo odoo-9


    【解决方案1】:

    当返回创建函数的响应时,您需要使用 @api.returns 为模型装饰创建函数,并使用返回新创建记录的记录 ID 的 lambda 函数。在您的情况下,如果您不想这样做,我会将.id 添加到您的退货行的末尾。

    return super(t_form_main,self).create(vals).id
    

    【讨论】:

    • 感谢您的评论,但这只是改善了退货的输出。我已经解决了我的问题,是数据库上的编码问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多