0

OpenERP データベースで顧客を検索するための次のCodeigniter XML RPCコードがあります。

検索を実装するためにこのドキュメント
に従っています 。以下のコードは正常に機能し、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

エラーは、OpenERP サーバーではなく、リクエストを送信する前の PHP 側にあるようです。

よくわかりませんが、"array"2 番目のコード スニペットの型文字列のネスト レベルが間違っているようです。

これは、最初の作業スニペットのトリミングされたバージョンです。

       ...
       $request = array (
           ...
           array('search', 'string'),
           array(array(), 'array'),
       ); 

ここで、$key変数をインライン化し、他のものをトリミングした 2 番目の壊れたスニペットのバージョンを次に示します。

       $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 は、1 つのパラメーターを渡すときに整数の長さを想定していますか? もしそうなら、このエラーメッセージは理にかなっています:

クラス XML_RPC_Values のオブジェクトを int に変換できませんでした

その外側の XML_RPC_Values オブジェクトは必要ですか?

于 2012-01-31T19:42:00.147 に答える
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 に答える