[英]XML-RPC Odoo - C# multiple search conditions
當使用 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也將其作為3對象域,在[]中添加partner_id。 嘗試使用字符串,嘗試使用一個帶有 6 個子參數的對象 - 似乎沒有任何效果。 任何幫助將不勝感激。
試試這個方法:
object[] args= new object[] {
new object[] { "move_lines", "!=", null },
new object[] { "state", "!=", "done"}
};
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 };
嘗試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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.