Соединение OpenERP с библиотекой CodeIgniter XML RPC - PullRequest
0 голосов
/ 31 января 2012

У меня следующий 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.

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Не уверен, что это проблема, я заметил, что у вашего "ключа" нет $. должно быть:

$request = array (
       array($this->database, 'string'),
       array($this->userid , 'int'),
       array($this->password, 'string'),  
       array("res.partner", 'string'), 
       array('search', 'string'),
       $key,
     ); 
1 голос
/ 31 января 2012

Похоже, ваша ошибка на стороне 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 ​​даже необходим?

...