简单的Acumatica合同soap api调用出错

时间:2018-01-02 05:11:41

标签: api soap acumatica

我试图让一个简单的基于Acumatica契约的SOAP API Get()或GetList()调用工作,而我所得到的只是一个错误:

System.ServiceModel.FaultException:' System.ArgumentNullException:值不能为null。参数名称:model

请参阅下面的代码。我首先尝试了REST API,但无法解决不同的问题(我也可能会在另一篇文章中添加)。任何想法错误指的是什么?

using (var soapClient = new ServiceReference1.DefaultSoapClient())
{
    //Log in to Acumatica ERP
    soapClient.Login
    (
        "admin",
        "admin",
        "Company",
        null,
        null
    );

    ServiceReference1.SalesOrder orderToFind = new 
        ServiceReference1.SalesOrder
        {
            CustomerID = new ServiceReference1.StringValue { Value = "2" },
            OrderType = new ServiceReference1.StringValue { Value = "SO" },
            OrderNbr = new ServiceReference1.StringValue { Value = 
                "SO001337" },
        };

        var getOrder = soapClient.Get(orderToFind);

        var getOrders =
            soapClient.GetList(orderToFind);
}

Acumatica v17.204.0019。

3 个答案:

答案 0 :(得分:2)

对我来说,解决方案是将WSDL添加为ServiceReference而不是WebReference。要检查的另一件事可能是app.config,以确保它具有正确的端点,绑定等,根据Acumatica文档。

答案 1 :(得分:2)

只是遇到了同样的错误,有些and愧地承认解决方案对我而言似乎是超级简单的:绑定只是在app.config中缺少allowCookies="true"

已启用Cookie,错误 ArgumentNullException:值不能为null。参数名称:模型已解析:

<binding name="DefaultSoap" allowCookies="true" />

答案 2 :(得分:1)

搜索记录时,必须始终使用[FieldType]Search类型的正确变体。在您的情况下, orderToFind 对象应声明如下:

ServiceReference1.SalesOrder orderToFind = new ServiceReference1.SalesOrder
{
    OrderType = new ServiceReference1.StringSearch { Value = "SO" },
    OrderNbr = new ServiceReference1.StringSearch { Value = "SO001337" }
};

var getOrder = soapClient.Get(orderToFind);

要导出给定客户的订单,您应该按如下方式定义 ordersToFind 对象:

ServiceReference1.SalesOrder ordersToFind = new ServiceReference1.SalesOrder
{
    CustomerID = new ServiceReference1.StringSearch { Value = "2" },
};

var getOrders = soapClient.GetList(orderToFind);