0

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

我遵循此文档来实现搜索
以下代码工作正常并检索 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 表的所有记录

4

2 回答 2

1

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

$request = array (
       array($this->database, 'string'),
       array($this->userid , 'int'),
       array($this->password, 'string'),  
       array("res.partner", 'string'), 
       array('search', 'string'),
       $key,
     ); 
于 2012-02-01T07:31:00.513 回答
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 对象甚至是必要的吗?

于 2012-01-31T19:42:00.147 回答