Я хочу получить данные из WS, используя xml-rpc.
Соединение установлено успешно, но когда я устанавливаю аргументы в методе name_search, я получаю следующее исключение:
error : Traceback (most recent call last):
File "/home/openerp/odoo/odoo/openerp/service/wsgi_server.py", line 82, in xmlrpc_return
result = openerp.netsvc.dispatch_rpc(service, method, params)
File "/home/openerp/odoo/odoo/openerp/netsvc.py", line 296, in dispatch_rpc
result = ExportService.getService(service_name).dispatch(method, params)
File "/home/openerp/odoo/odoo/openerp/service/web_services.py", line 626, in dispatch
res = fn(db, uid, *params) File "/home/openerp/odoo/odoo/openerp/osv/osv.py", line 132, in wrapper
return f(, dbname, *args, **kwargs)
File "/home/openerp/odoo/odoo/openerp/osv/osv.py", line 199, in
res = ._cr(cr, uid, obj, method, *args, **kw)
File "/home/openerp/odoo/odoo/openerp/osv/osv.py", line 187, in _cr
return getattr(object, method)(cr, uid, *args, **kw)
File "/home/openerp/odoo/esigpen/prison_person/prison_person.py", line 287, in name_search
('identificador', 'ilike', name)] + args
TypeError: can only concatenate list (not "NoneType") to list
Я использую библиотеку phpxmlrpc-2.2.2 для соединения и посылаю аргументы через $ val. В этом случае я посылаю имя cris.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
require_once('phpxmlrpc-2.2.2/lib/xmlrpc.inc');
require_once('phpxmlrpc-2.2.2/lib/xmlrpcs.inc');
$GLOBALS['xmlrpc_internalencoding']='UTF-8';
$dbname = '*****';
$user = '****';
$password = '****';
$server_url = 'http://23.000.160.000:8069';
$connexion = new xmlrpc_client($server_url . "/xmlrpc/common");
$connexion->setSSLVerifyPeer(0);
$c_msg = new xmlrpcmsg('login');
$c_msg->addParam(new xmlrpcval($dbname, "string"));
$c_msg->addParam(new xmlrpcval($user, "string"));
$c_msg->addParam(new xmlrpcval($password, "string"));
$c_response = $connexion->send($c_msg);
if ($c_response->errno != 0){
echo '<p>error : ' . $c_response->faultString() . '</p>';
}
else{
$uid = $c_response->value()->scalarval();
$val = array (
new xmlrpcval(
array(new xmlrpcval('cris', "string"),
),"array"),
);$client = new xmlrpc_client($server_url . "/xmlrpc/object");
$client->setSSLVerifyPeer(0);
$msg = new xmlrpcmsg();
$msg->addParam(new xmlrpcval($dbname, "string"));
$msg->addParam(new xmlrpcval($uid, "int"));
$msg->addParam(new xmlrpcval($password, "string"));
$msg->addParam(new xmlrpcval("prison.person", "string"));
$msg->addParam(new xmlrpcval("name_search", "string"));
$msg->addParam(new xmlrpcval($val, "struct"));$response = $client->send($msg);
if ($response->errno != 0){
echo '<p>error : ' . $response->faultString() . '</p>';
}
$result = $response->value();
$ids = $result->scalarval();}
?>
Это код Python, где находятся методы для поиска:
https://gist.github.com/name1984/a7e78af7dba738449bc0
Спасибо за помощь.
Ошибка:
File "/home/openerp/odoo/esigpen/prison_person/prison_person.py", line 287, in name_search
('identificador', 'ilike', name)] + args
TypeError: can only concatenate list (not "NoneType") to list
Кажется, вызвано этой строкой:
https://gist.github.com/name1984/a7e78af7dba738449bc0#file-gistfile1-py-L15
name_search
проходит args=None
, Вы можете удалить + args
и сделать это:
if args is not None:
domain += args
Других решений пока нет …