我有以下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表的所有记录相同
答案 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,
);