Acumatica按客户订单字段获取销售订单

时间:2017-02-15 17:52:57

标签: acumatica

我正在尝试使用基于合同的API,根据Acumatica中的客户订单字段检索单个销售订单。请参阅下面的代码,该代码基于Contract Based Documentation(第82页)中的代码。

public SalesOrder GetSalesOrder(string orderNumber)
{
    var binding = new System.ServiceModel.BasicHttpBinding()
    {
        AllowCookies = true,
        MaxReceivedMessageSize = 655360,
        MaxBufferSize = 655360,
        SendTimeout = new TimeSpan(0, 2, 0)
    };

    var soToBeFound = new SalesOrder()
    {
        OrderType = new StringValue { Value = "SO" },
        CustomerOrder = new StringValue { Value = orderNumber }
    };

    var address = new System.ServiceModel.EndpointAddress(ConfigurationManager.AppSettings["AcumaticaUrl"]);


    using (DefaultSoapClient client = new DefaultSoapClient(binding, address))
    {
        client.Login(_acumaticaUid, _acumaticaPwd, _acumaticaCompany, null, null);

        var existingOrder = (SalesOrder)client.Get(soToBeFound);

        client.Logout();

        return existingOrder;
    }
}

当我执行此代码时,我得到以下异常:

  

请求频道在等待回复后超时   00:01:59.9880722。增加传递给调用的超时值   请求或增加Binding上的SendTimeout值。时间   分配给这个操作可能是一个更长的一部分   超时“。

正如你所看到的,我已经将超时时间增加到2分钟,这似乎是永远的。 Acumatica API真的这么慢吗?或者我在代码中做错了什么?

修改

当我尝试通过“OrderNbr”字段而不是“CustomerOrder”字段时,它完美地运行。是不是以这种方式获得“CustomerOrder”?如果没有,我如何在get请求中使用“CustomerOrder”?

1 个答案:

答案 0 :(得分:2)

当您通过基于合同的API进行搜索时,需要将[FieldType]搜索类型的实例而不是[FieldType]值分配给搜索条件中使用的所有字段(必须使用StringSearch而不是StringValue在您的情况下var soToBeFound = new SalesOrder() { OrderType = new StringSearch { Value = "SO" }, CustomerOrder = new StringSearch { Value = orderNumber } };

StringSearch

为了确认,tf.gfile也在第82页的示例中使用,来自基于合同的文档。