【问题标题】:Error with simple Acumatica contract soap api call简单的 Acumatica 合同肥皂 api 调用出错
【发布时间】:2018-06-11 20:35:09
【问题描述】:

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

System.ServiceModel.FaultException: 'System.ArgumentNullException: 值不能为空。参数名称:型号

请参阅下面的代码。我首先尝试了 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。

【问题讨论】:

  • 你解决过这个问题吗?我遇到了同样的事情。
  • 不,抱歉。我现在改用 REST API。

标签: api soap acumatica


【解决方案1】:

刚刚遇到同样的错误,有点羞于承认该解决方案对我来说似乎超级简单:绑定只是在 app.config 中丢失了allowCookies="true"

启用 cookie,错误 ArgumentNullException: Value cannot be null。参数名称:模型已解析:

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

【讨论】:

  • 这每次都咬我!
【解决方案2】:

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

【讨论】:

  • 更新绑定为我做了。我想当我刷新服务引用时,绑定被重置了。谢谢
【解决方案3】:

搜索记录时,必须始终使用[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);

【讨论】:

  • 当我更改我的 Get() 调用以匹配您的调用时,我仍然遇到同样的错误,使用 StringSearch 而不是 StringValue,并在初始化时删除 CustomerID。
  • 您用于导出销售订单的端点的名称和版本是什么?使用全新的 Acumatica 网站(内部版本# 17.204.0019。)和版本的默认端点没有错误。 17.200.001
  • 我实际上是使用这个 url 作为我的 wsdl...localhost/AcuAmazon172040019/entity/Default/6.00.001?wsdl...因为我在任何地方都找不到记录的 R2 路径。所以谢谢你提供。但是,在更改为 localhost/AcuAmazon172040019/entity/Default/17.200.001?wsdl 作为我的服务参考后,我仍然遇到同样的错误。
  • 完整的异常以(由于注释长度最大而中断)开始:“System.ArgumentNullException: Value cannot be null.\nParameter name: model\n at Microsoft.Data.Edm.EdmUtil.CheckArgumentNull[ T](T value, String parameterName)\n at Microsoft.Data.Edm.ExtensionMethods.EntityContainers(IEdmModel model)\n at PX.Api.ContractBased.Edm.Helpers.GetEntityType(IEdmModel model, String objectName) in F:\ \Bld2\\AC-FULL2017R204-JOB1\\sources\\NetTools\\PX.Api.ContractBased\\Edm\\Helpers.cs:line 0\n 在 PX.Api.ContractBased.Soap.EntityReaderBase.ReadEntity(String expectedEntityType ) 在 ...
  • 似乎访问权限或/和端点配置可能缺少或错误。您能否创建本地测试公司的快照并将其附加到 Acumatica 合作伙伴门户上的支持案例中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多