当使用CookComputing(XML-RPC.net)尝试仅使用一个条件搜索mail.notification模型时,它非常简单,因为您只需要调用:
object[] args = new object[1];
object[] subargs = new object[3];
subargs[0] = "partner_id";
subargs[1] = "=";
subargs[2] = partner_id.ToString();
int[] message_count = odooNewProxy.Search(database, userId, odoo_password, "mail.notification", "search", args);
搜索定义如下:
[XmlRpcMethod("execute")]
int[] Search(string dbName, int userId, string pwd, string model, string method, object[] filters);
您将立即得到结果。当您想要调用两个或更多个条件搜索时,真正的问题就出现了 - 例如[('partner_id', '=', 3), ('is_read', '=', False)]
。有人有任何线索吗?我已经尝试传递包含两个对象的一个对象(一个带有partner_id,一个带有is_read) - 这将起作用,但Odoo也将其作为一个三对象域,在[]中添加了partner_id。尝试使用字符串,尝试使用一个带有6个子目标的对象 - 似乎没什么用。任何帮助将不胜感激。
答案 0 :(得分:1)
试试这种方式:
object[] args= new object[] {
new object[] { "move_lines", "!=", null },
new object[] { "state", "!=", "done"}
};
答案 1 :(得分:1)
OdooAPI api = GetApiObject();
object[] filter = new object[3];
int id = 0;
filter[0] = new object[3] { "supplier", "=", true };
filter[1] = new object[3] { "active", "=", true };
filter[2] = new object[3] { "ref", "=", internal_reference };
答案 2 :(得分:0)
尝试 PortaCapena.OdooJsonRpcClient ,您可以使用存储库的查询构建器创建高级过滤查询。这个库将模型从 odoo 映射到 C# 中的模型
https://github.com/patricoos/PortaCapena.OdooJsonRpcClient
var products = await repository.Query()
.Where(x => x.WriteDate, OdooOperator.GreaterThanOrEqualTo, new DateTime(2020, 12, 2))
.Where(x => x.Name, OdooOperator.EqualsTo, "Bioboxen 610l")
.Select(x => new
{
x.Name,
x.Description,
x.WriteDate
})
.OrderByDescending(x => x.Id)
.Take(10)
.FirstOrDefaultAsync();
或使用 OdooFilter 查询
await repository
.Query()
.Where(OdooFilter.Create()
.GreaterThanOrEqual("write_date", new DateTime(2020, 12, 2))
.And()
.EqualTo("name", "Bioboxen 610l"))
.ToListAsync()