如何加快Contract API CustomerID搜索?

时间:2017-02-06 03:26:14

标签: acumatica

我正在尝试搜索现有客户并返回CustomerID(如果存在)。这是我正在使用的代码:

        var CustomerToFind = new Customer
            {
                MainContact = new Contact
                {
                    Email = new StringSearch { Value = emailIn }                            
                }
            };
        var sw = new Stopwatch();
        sw.Start();
        //see if any results
        var result = (Customer)soapClient.Get(CustomerToFind);
        sw.Stop();
        Debug.WriteLine(sw.ElapsedMilliseconds);

但是,我发现它看起来非常慢,无法使用。例如,在DEMO数据集上,在我的i7-6700k @ 4GHz上使用24gb内存和SSD在本地运行SQL Server 2016 Developer Edition时,简单的电子邮件搜索需要3-4秒。但是,在我的具有10k客户记录的生产数据集上,它需要超过60秒并超时。

这是典型的使用基于合同的肥皂吗?基于屏幕的肥皂似乎更快,几乎是即时的。如果我在Microsoft Management Studio中对数据库表执行SQL选择,我也可以立即返回结果。

是否有更好的快捷方式来查询是否存在电子邮件地址=“test@test.com”的客户并返回客户ID?

1 个答案:

答案 0 :(得分:1)

  1. 尝试使用GetList代替Get。它更适合"搜索smth"场景。

  2. 使用GetList时,根据您使用的端点,还有两个优化。在Default/5.30.001端点中,GetList的第二个参数应设置为false。在Default/6.00.001端点中,没有第二个参数,但实体本身还有其他属性,称为ReturnBehavior。将其设置为OnlySpecified,然后将*Return添加到必填字段,如下所示:

    var CustomerToFind = new Customer
    {
      ReturnBehavior = ReturnBehavior.OnlySpecified,
      CustomerID = new StringReturn(),
      MainContact = new Contact
      {
        Email = new StringSearch { Value = emailIn }
      }
    };
    
  3. 或将其设置为OnlySystem,然后在返回的实体上使用ID来请求完整实体。