将OpenERP与CodeIgniter XML RPC库连接

时间:2012-01-31 07:02:36

标签: php codeigniter odoo xml-rpc

我有以下Codeigniter XML RPC代码,用于在OpenERP数据库中搜索客户,

我跟随此documentation实施搜索 下面的代码工作正常,并检索res.partner表中的所有记录

    $this->xmlrpc->server('http://localhost/xmlrpc/object',8314);
    $this->xmlrpc->method('execute');   
    //$this->xmlrpc->set_debug(TRUE);       

   $request = array (
           array($this->database, 'string'),
           array($this->userid , 'int'),
           array($this->password, 'string'),  
           array("res.partner", 'string'), 
           array('search', 'string'),
           array(array(), 'array'),
         ); 
   $this->xmlrpc->request($request);
   if ( ! $this->xmlrpc->send_request())
    {
        echo $this->xmlrpc->display_error();
        return -1;
    }
    else 
    {
        //print_r( $this->xmlrpc->display_response());
        $val = $this->xmlrpc->display_response();
        return $val;
    }

现在我想只获得name=abc

的项目
    $this->xmlrpc->server('http://localhost/xmlrpc/object',8314);
    $this->xmlrpc->method('execute');   
    //$this->xmlrpc->set_debug(TRUE);       
    $attribute = "name";
    $operator = "=";
    $keys="abc";

    $key = array(
        new XML_RPC_Values(array(
            new XML_RPC_Values($attribute , "string"),
            new XML_RPC_Values($operator,"string"),
            new XML_RPC_Values($keys,"string"))
        ,"array"),
    );
   $request = array (
           array($this->database, 'string'),
           array($this->userid , 'int'),
           array($this->password, 'string'),  
           array("res.partner", 'string'), 
           array('search', 'string'),
           $key,
         ); 
   $this->xmlrpc->request($request);
   if ( ! $this->xmlrpc->send_request())
    {
        echo $this->xmlrpc->display_error();
        return -1;
    }
    else 
    {
        //print_r( $this->xmlrpc->display_response());
        $val = $this->xmlrpc->display_response();
        return $val;
    }

这不起作用,它会产生以下错误

A PHP Error was encountered
Severity: Notice
Message: Object of class XML_RPC_Values could not be converted to int
Filename: libraries/Xmlrpc.php
Line Number: 1216


A PHP Error was encountered
Severity: 4096
Message: Object of class XML_RPC_Values could not be converted to string
Filename: libraries/Xmlrpc.php
Line Number: 1360

结果与检索res.partner表的所有记录相同

2 个答案:

答案 0 :(得分:1)

在发送请求之前,您的错误似乎在PHP端,而不是在OpenERP服务器中。

我不确定,但第二个代码段中"array"类型字符串的嵌套级别看起来不对。

这是您的第一个工作片段的修剪版本:

       ...
       $request = array (
           ...
           array('search', 'string'),
           array(array(), 'array'),
       ); 

现在这是你的第二个破碎片段的版本,我在其中内联了$key变量并修剪了其他一些内容:

       $request = array (
           ...
           array('search', 'string'),
           array(
               new XML_RPC_Values(
                   array(
                       new XML_RPC_Values($attribute , "string"),
                       new XML_RPC_Values($operator,"string"),
                       new XML_RPC_Values($keys,"string")
                   ),
                   "array"
               ),
           ),
       ); 

您将XML_RPC_Values对象作为数组的唯一参数传递。当您传入一个参数时,PHP是否期望整数长度?如果是,则此错误消息有意义:

  

类XML_RPC_Values的对象无法转换为int

外部XML_RPC_Values对象是否必要?

答案 1 :(得分:1)

不确定这是否是问题我注意到你的“钥匙”没有$。应该是:

$request = array (
       array($this->database, 'string'),
       array($this->userid , 'int'),
       array($this->password, 'string'),  
       array("res.partner", 'string'), 
       array('search', 'string'),
       $key,
     );