首页 > 解决方案 > 带付款的休息 API SalesOrder

问题描述

我正在尝试输入一个针对 2019R2 付款的销售订单,从演示中我看到应该可以工作,但是我收到了一个相当无用的异常消息:

{
    "message": "An error has occurred.",
    "exceptionMessage": "Operation failed",
    "exceptionType": "PX.Data.PXInvalidOperationException",
    "stackTrace": "   at PX.Api.ContractBased.EntityService.Put(ISystemContract systemContract, String version, String name, EntityImpl entity, CbOperationContext operationContext, Boolean throwOnError)\r\n   at PX.Api.ContractBased.Soap.SoapFacadeBase.PutImpl(EntityImpl entity, Boolean throwOnValidationError)\r\n   at PX.Api.ContractBased.SystemContracts.V2.RestController.PutEntity(EntityImpl entity, String select, String filter, String expand, String custom)\r\n   at lambda_method(Closure , Object , Object[] )\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()",
    "innerException": {
        "message": "An error has occurred.",
        "exceptionMessage": "Exception has been thrown by the target of an invocation.",
        "exceptionType": "System.Reflection.TargetInvocationException",
        "stackTrace": "   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)\r\n   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at PX.Api.ContractBased.EntityExportContextBuilder.<>c__DisplayClass87_1.<FindImplementations>b__3(PXGraph graph, EntityImpl entity, EntityImpl targetEntity)\r\n   at PX.Api.SyImportProcessor.SyStep.ProcessCommand(SyCommand cmd, Boolean& needCommit)\r\n   at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable()",
        "innerException": {
            "message": "An error has occurred.",
            "exceptionMessage": "Inserting  'AR Payment' record raised at least one error. Please review the errors.",
            "exceptionType": "PX.Data.PXOuterException",
            "stackTrace": "   at PX.Data.PXUIFieldAttribute.CommandPreparing(PXCache sender, PXCommandPreparingEventArgs e)\r\n   at PX.Data.PXCache.OnCommandPreparing(String name, Object row, Object value, PXDBOperation operation, Type table, FieldDescription& description)\r\n   at PX.Data.PXTableAttribute.PrepareParametersForInsert(PXCache sender, Object row, Type[] tables, ISqlDialect dialect, Boolean audit, List`1[] pars)\r\n   at PX.Data.PXTableAttribute.PersistInserted(PXCache sender, Object row)\r\n   at PX.Data.PXCache`1.PersistInserted(Object row, Boolean bypassInterceptor)\r\n   at PX.Data.PXCache`1.Persist(PXDBOperation operation)\r\n   at PX.Data.PXGraph.Persist(Type cacheType, PXDBOperation operation)\r\n   at PX.Data.PXGraph.Persist()\r\n   at PX.Objects.AR.ARPaymentEntry.Persist()\r\n   at PX.Data.PXSave`1.<Handler>d__2.MoveNext()\r\n   at PX.Data.PXAction`1.<Press>d__28.MoveNext()\r\n   at PX.Data.PXAction`1.<Press>d__28.MoveNext()\r\n   at PX.Data.PXAction`1.PressImpl(Boolean internalCall, Boolean externalCall)\r\n   at PX.Data.PXAction`1.Press()\r\n   at PX.Objects.EndpointAdapters.DefaultEndpointImpl18.Payments_Insert(PXGraph graph, EntityImpl entity, EntityImpl targetEntity)"
        }
    }
}

以下是提出的要求:

    {
    "CashAccount" : {"value" : "MERCHANT"},
    "OrderType" : {"value" : "SO"},
    "CustomerID" : {"value" : "35"},
    "CustomerOrder" : {"value" : "1"},
    "DisableAutomaticDiscountUpdate" : {"value" : true},
    "Description" : {"value" : "ecommerce order"},
    "LocationID" : {"value" : "MAIN"},
    "Details" : [
        {
            "rowNumber" : 1,
            "InventoryID" : {"value" : "item1"},
            "UnitPrice" : {"value" : 320.00},
            "SalesAcctID" : {"value" : "40200"},
            "UOM" : {"value" : "EA"},
            "OrderQty" : {"value" : "1.0000"}
        }
    ],
    "BillToContactOverride" : {"value" : true},
    "BillToContact" : {
            "rowNumber" : 1,
            "Attention" : {"value" : "Joe DiMaggio"},
            "BusinessName" : {"value" : "Major League Baseball"},
            "Email" : {"value" : "joe@baseball.fun"},
            "Phone1" : {"value" : "877-123-4567"}
    },
    "BillToAddressOverride" : {"value" : true},
    "BillToAddress" : {
            "rowNumber" : 1,
            "AddressLine1" : {"value" : "123 Main Street"},
            "AddressLine2" : {"value" : "attn: team manager"},
            "City" : {"value" : "Los Angeles"},
            "Country" : {"value" : "US"},
            "State" : {"value" : "CA"},
            "PostalCode" : {"value" : "91324"}
    },
    "ShipToContactOverride" : {"value" : true},
    "ShipToContact" : {
            "rowNumber" : 1,
            "Attention" : {"value" : "Joe DiMaggio"},
            "BusinessName" : {"value" : "Major League Baseball"},
            "Email" : {"value" : "joe@baseball.fun"},
            "Phone1" : {"value" : "877-123-4567"}
    },
    "ShipToAddressOverride" : {"value" : true},
    "ShipToAddress" : {
            "rowNumber" : 1,
            "AddressLine1" : {"value" : "123 Main Street"},
            "AddressLine2" : {"value" : "attn: team manager"},
            "City" : {"value" : "Los Angeles"},
            "Country" : {"value" : "US"},
            "State" : {"value" : "CA"},
            "PostalCode" : {"value" : "91324"}
    },
    "ShipVia" : {"value" : "FEDEXGRND"},
    "ShippingSettings" : {
            "ShippingTerms" : {"value" : "WEBORDER"},
            "ShipVia" : {"value" : "FEDEXGRND"}
    },
    "Status" : {"value" : "open"},
    "TaxTotal" : {"value" : 24.80},
    "Totals" : {
            "PremiumFreight" : {"value" : 6.00},
            "FreightTaxCategory" : {"value" : "FR020100"}
    },
    "Payments" : [{
        "AppliedToOrder" : {"value" : 326.00},
        "CashAccount" : {"value" : "MERCHANT"},
        "PaymentAmount" : {"value" : 326.00},
        "DocType" : {"value" : "Prepayment"},
        "PaymentMethod" : {"value" : "CC"},
        "PaymentRef" : {"value" : "12345"}
    }]
}

我提交时订单已成功输入,但付款未成功。在“付款”字段中尝试了各种组合。我知道一个建议是获取销售订单记录并使用 $expand 获取子数据,但是将 Payments 添加到 $expand 不起作用,它返回一个空数组,即使在记录了付款的订单上也是如此。

我在 Payments 数组中尝试了几种组合,尝试同时记录多笔付款,尝试不应用付款,或者只应用 1 美元。尝试付款和预付款文档类型。唯一可行的是,如果我预先输入付款,我可以使用该付款的 ReferenceNbr 将金额应用于订单,但这不是我所看到的文档或视频演示中描述的内容。

有人有这个现实生活中的工作例子吗?我更喜欢在单个请求中输入电子商务交易,而不必使用 2 个请求来输入销售订单然后付款。

标签: acumatica

解决方案


推荐阅读