【问题标题】:XML-RPC Odoo - C# multiple search conditionsXML-RPC Odoo - C# 多个搜索条件
【发布时间】:2015-10-25 18:11:33
【问题描述】:

当使用 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 个子参数的对象 - 似乎没有任何效果。任何帮助将不胜感激。

【问题讨论】:

    标签: c# odoo odoo-8


    【解决方案1】:

    试试这个方法:

    object[] args= new object[] {
        new object[] { "move_lines", "!=", null },
        new object[] { "state", "!=", "done"}
    };
    

    【讨论】:

      【解决方案2】:
      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 };
      

      【讨论】:

      • 你的答案对我有用,并用于传递过滤器对象
      【解决方案3】:

      试试 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()
      

      【讨论】:

        猜你喜欢
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 2022-08-02
        • 1970-01-01
        • 2016-05-05
        • 2021-05-14
        相关资源
        最近更新 更多