Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
1 Trả lời
15818 Lượt xem

Hi,

I am working on creating a small tool to work with the XML-RPC service for a hosted Odoo instance. I have managed to create the connection and authenticate, but having difficulties creating a request properly. Seems that I can not pick the correct datatype.

The php code looks like this:

$models->execute_kw($db, $uid, $password,

    'res.partner', 'search_read',
    array(array(array('is_company', '=', true),
                array('customer', '=', true))),
    array('fields'=>array('name', 'country_id', 'comment'), 'limit'=>5));

My C# code to create the parameter array looks like this:

            //search criterias
            object[] c1 = new object[] { "name", "=", "Lunderskov Boldklub" };

            //list of all criterias
            object[] criterias = new object[] { c1 };

            //fields defs

            object[] defs = { new object[] { "fields", new object[] { "name", "country_id", "comment" } }, new object[] {"limit", 5}}; 

            //parameters
            object[] parms = new object[] { criterias, defs };

Now.. the Odoo response is:

<?xml version='1.0'?>
<methodResponse>
<fault>
<value><struct>
<member>
<name>faultCode</name>
<value><string>unhashable type: 'list'</string></value>
</member>
<member>
<name>faultString</name>
<value><string>Traceback (most recent call last):
  File "/home/odoo/src/odoo/8.0/openerp/service/wsgi_server.py", line 75, in xmlrpc_return
    result = openerp.http.dispatch_rpc(service, method, params)
  File "/home/odoo/src/odoo/8.0/openerp/http.py", line 108, in dispatch_rpc
    result = dispatch(method, params)
  File "/home/odoo/src/odoo/8.0/openerp/service/model.py", line 37, in dispatch
    res = fn(db, uid, *params)
  File "/home/odoo/src/odoo/8.0/openerp/service/model.py", line 162, in execute_kw
    return execute(db, uid, obj, method, *args, **kw or {})
  File "/home/odoo/src/odoo/8.0/openerp/service/model.py", line 113, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/odoo/src/odoo/8.0/openerp/service/model.py", line 170, in execute
    res = execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/odoo/src/odoo/8.0/openerp/service/model.py", line 159, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/odoo/src/odoo/8.0/openerp/api.py", line 237, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/odoo/src/odoo/8.0/openerp/models.py", line 5061, in search_read
    result = self.read(cr, uid, record_ids, fields, context=read_ctx)
  File "/home/odoo/src/odoo/8.0/openerp/api.py", line 237, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/odoo/src/odoo/8.0/openerp/models.py", line 3078, in read
    result = BaseModel.read(records, fields, load=load)
  File "/home/odoo/src/odoo/8.0/openerp/api.py", line 235, in wrapper
    return new_api(self, *args, **kwargs)
  File "/home/odoo/src/odoo/8.0/openerp/models.py", line 3102, in read
    if name in self._columns:
TypeError: unhashable type: 'list'
</string></value>
</member>
</struct></value>
</fault>
</methodResponse>

So.. how should I create the last part of the request?

Ảnh đại diện
Huỷ bỏ
Tác giả Câu trả lời hay nhất

I solved the problem myself finally. This code works..

 

            XmlRpcStruct d = new XmlRpcStruct();
            d.Add("fields", new object[] { "name", "country_id", "comment"});
            d.Add("limit", 5);

 

Ảnh đại diện
Huỷ bỏ

Thanks for posting the solution to your own question so that the next person might benefit from your solution.

Bài viết liên quan Trả lời Lượt xem Hoạt động
1
thg 11 19
6765
1
thg 3 15
4893
0
thg 9 23
1594
1
thg 10 22
4158
1
thg 3 22
5017