2012-01-31 80 views
0

我有以下Codeignitor XML RPC代码在OpenERP的数据库中搜索客户,连接的OpenERP与CodeIgnitor XML RPC库

我下面这个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; 
    } 
项目

这不是工作,它thowss以下错误

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表的所有记录进行检索

回答

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

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

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

对不起,这是一个错字! – 2012-02-01 08:13:01

+0

嗯,不知道那是什么问题。它看起来正确! – TimoSolo 2012-02-03 13:15:45