acumatica - 带付款的休息 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 个请求来输入销售订单然后付款。
解决方案
推荐阅读
- excel - 如何在excel中存储以“+”开头的文本?
- python - 当服务器返回这样的数据时,我该如何抓取?
- javascript - 当应用程序处于后台并且屏幕被锁定时,React-native-background 计时器在 15 分钟后停止工作
- python - 如何循环一个进程
- sql - C#获取gps数据sql到GPRMC插入
- c# - 如何将输入字符串转换为数据表
- jms - 对多个目的地/主题使用相同的 JMS ClientID
- ruby - 如何为 raise、rescue 块编写 rspec
- c# - C# 从数据库导出到 excel 返回十六进制错误
- r - 如何在 R 中使用 plotly 将相关矩阵作为矩阵的上半部分