我试图让一个简单的基于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。
答案 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);