OdooJsonRpcClient
OdooJsonRpcClient copied to clipboard
ChildOf filter issue
When attempting to use the filter function ChildOf in combination with other filters, I am encountering an error. This error prevents the filter from working as expected. If I am using other filter queries, like EqualsTo, filter is applied without failure and received object is correctly parsed.
My Code
Filter:
var filter = OdooFilter.Create().ChildOf("order_partner_id", "123");
var repository = new OdooRepository<LicenseDataContract>(_portaCapenaConfig);
var products = await repository.Query()
.Where(filter)
.FirstOrDefaultAsync();
LicenseDataContract:
[OdooTableName("sale.order.line")]
[JsonConverter(typeof(OdooModelConverter))]
[DataContract]
public class LicenseDataContract : IOdooModel
{
[DataMember(Name = "id")]
public long Id { get; set; }
[DataMember(Name = "order_id")]
public object[] OrderId { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "product_uom_qty")]
public double ProductUomQty { get; set; }
[DataMember(Name = "x_studio_product_tags")]
public string XStudioProductTags { get; set; }
}
I have tried to alter the library ChildOf implementation like this, but receiving the same error: OdooFilter:
public OdooFilter ChildOf(string fieldName, string values)
{
var field = new object[] { fieldName, OdooOperator.ChildOf.Description(), values };
Add(field);
return this;
}
OdooFilterOft:
public OdooFilter<T> ChildOf(Expression<Func<T, object>> expression, string values)
{
ChildOf(OdooExpresionMapper.GetOdooPropertyName(expression), values);
return this;
}
Error message:
{Odoo Server Error, too many values to unpack (expected 3)}
Traceback (most recent call last):
File "/home/odoo/src/odoo/saas-16.3/odoo/http.py", line 1704, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/home/odoo/src/odoo/saas-16.3/odoo/service/model.py", line 133, in retrying
result = func()
File "/home/odoo/src/odoo/saas-16.3/odoo/http.py", line 1731, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/src/odoo/saas-16.3/odoo/http.py", line 1932, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/home/odoo/src/odoo/saas-16.3/addons/website/models/ir_http.py", line 236, in _dispatch
response = super()._dispatch(endpoint)
File "/home/odoo/src/odoo/saas-16.3/odoo/addons/base/models/ir_http.py", line 190, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/src/odoo/saas-16.3/odoo/http.py", line 716, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/src/custom/trial/saas_trial/controllers/main.py", line 309, in jsonrpc
res = super(OdooRPC, self).jsonrpc(service, method, args)
File "/home/odoo/src/odoo/saas-16.3/odoo/http.py", line 716, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/src/odoo/saas-16.3/odoo/addons/base/controllers/rpc.py", line 158, in jsonrpc
return dispatch_rpc(service, method, args)
File "/home/odoo/src/odoo/saas-16.3/odoo/http.py", line 385, in dispatch_rpc
return dispatch(method, params)
File "/home/odoo/src/odoo/saas-16.3/odoo/service/model.py", line 37, in dispatch
res = execute_kw(db, uid, *params[3:])
File "/home/odoo/src/odoo/saas-16.3/odoo/service/model.py", line 59, in execute_kw
return execute(db, uid, obj, method, *args, **kw or {})
File "/home/odoo/src/odoo/saas-16.3/odoo/service/model.py", line 65, in execute
res = execute_cr(cr, uid, obj, method, *args, **kw)
File "/home/odoo/src/odoo/saas-16.3/odoo/service/model.py", line 50, in execute_cr
result = retrying(partial(odoo.api.call_kw, recs, method, args, kw), env)
File "/home/odoo/src/odoo/saas-16.3/odoo/service/model.py", line 133, in retrying
result = func()
File "/home/odoo/src/odoo/saas-16.3/odoo/api.py", line 462, in call_kw
result = _call_kw_model(method, model, args, kwargs)
File "/home/odoo/src/odoo/saas-16.3/odoo/api.py", line 435, in _call_kw_model
result = method(recs, *args, **kwargs)
File "/home/odoo/src/odoo/saas-16.3/odoo/models.py", line 5303, in search_read
records = self.search_fetch(domain or [], fields, offset=offset, limit=limit, order=order)
File "/home/odoo/src/odoo/saas-16.3/odoo/models.py", line 1593, in search_fetch
query = self._search(domain, offset=offset, limit=limit, order=order or self._order)
File "/home/odoo/src/odoo/saas-16.3/addons/analytic/models/analytic_mixin.py", line 68, in _search
return super()._search(domain, offset, limit, order, access_rights_uid)
File "/home/odoo/src/odoo/saas-16.3/odoo/models.py", line 4984, in _search
query = self._where_calc(domain)
File "/home/odoo/src/odoo/saas-16.3/odoo/models.py", line 4725, in _where_calc
return expression.expression(domain, self).query
File "/home/odoo/src/odoo/saas-16.3/odoo/osv/expression.py", line 771, in __init__
self.expression = domain_combine_anies(domain, model)
File "/home/odoo/src/odoo/saas-16.3/odoo/osv/expression.py", line 577, in domain_combine_anies
domain_any = _anyfy_leaves(domain, model)
File "/home/odoo/src/odoo/saas-16.3/odoo/osv/expression.py", line 351, in _anyfy_leaves
left, operator, right = item = tuple(item)
ValueError: too many values to unpack (expected 3)
Have you tried change values type from string to string[] ?
When we tried changing the values type to string[], we got an Error message saying:
{"Method not found: 'PortaCapena.OdooJsonRpcClient.Request.OdooFilter PortaCapena.OdooJsonRpcClient.Request.OdooFilter.ChildOf(System.String, System.String[])'."}
OdooFilter:
public OdooFilter ChildOf(string fieldName, string[] values)
{
var field = new object[] { fieldName, OdooOperator.ChildOf.Description(), values };
Add(field);
return this;
}
OdooFilterOft:
public OdooFilter<T> ChildOf(Expression<Func<T, object>> expression, string[] values)
{
ChildOf(OdooExpresionMapper.GetOdooPropertyName(expression), values);
return this;
}
Can you send me the parameters that I can use to reproduce it on demo data?