InventoryID 使用 SOAP 中断 Acumatica Bill 创建

InventoryID breaks Acumatica Bill creation using SOAP

程序使用 SOAP 在 Acumatica 中创建一个 Bill。端点已扩展为包括 InventoryID,生成的 WSDL。该程序使用扩展端点来读取和写入所有信息。读取非库存商品的 InventoryID 工作正常。

使用 InventoryID 以外的字段填充 Bill Details 也可以正常工作:

                        loBillDetails[lnCurIndex + I1] = new BillDetail
                        {
                            // InventoryID = new StringValue { Value = lcInventoryID },
                            Branch = new StringValue { Value = lcBranch },
                            Amount = new DecimalValue { Value = lnLineExtAmt },
                            ExtendedCost = new DecimalValue { Value = lnLineExtAmt },
                            UnitCost = new DecimalValue { Value = 0 },
                            Qty = new DecimalValue { Value = 0 },
                            TransactionDescription = new StringValue { Value = lcTranDesc },
                            UOM = new StringValue { Value = lcUOM },
                            Account = new StringValue { Value = lcAccount },
                            Subaccount = new StringValue { Value = lcSubAccount },
                            Description = new StringValue { Value = lcItemDesc },
                        };

但是,包括 InventoryID 会导致 Bill 插入失败,并显示以下错误消息。我检查了提供给 InventoryID 的值是否正确。

我是否需要为要插入的账单提供任何其他字段?这可能是什么问题?

PX.Data.PXInvalidOperationException:操作失败---> PX.Data.PXBadDictinaryException:此时无法更新密钥。先尝试保存之前的更改。\n 在 PX.Data.PXCache1.Update(IDictionary keys, IDictionary values)\n at PX.Data.PXGraph.ExecuteUpdate(String viewName, IDictionary keys, IDictionary values, Object[] parameters)\n at PX.Data.PXGraph.CopyPasteCommitChanges(String viewName, OrderedDictionary keys, OrderedDictionary vals)\n at PX.Api.SyImportProcessor.SyStep.a(Object A_0, PXFilterRow[] A_1, PXFilterRow[] A_2)\n at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable()\n --- End of inner exception stack trace ---\n at PX.Api.ContractBased.Soap.WebApiSoapController.Post(ISoapSystemContract systemContract, XmlReader requestReader, String serviceNamespace, String internalNamespace, MethodInfo method, Func1 serviceFactory, IEdmModel edmModel)\n 在 PX.Api.ContractBased.Soap.WebApiSoapController.d__8.MoveNext()\n--- 结束来自上一个位置的堆栈跟踪 抛出异常的地方 ---\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\n 在 PX.Api.ContractBased.Soap.WebApiSoapController.d__6.MoveNext()\n---从先前抛出异常的位置开始的堆栈跟踪结束 ---\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\n at System.Threading.Tasks.TaskHelpersExtensions.d__3 `1.MoveNext()\n--- 从先前抛出异常的位置开始的堆栈跟踪结束 ---\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ n at System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\n--- 从先前位置开始的堆栈跟踪结束,其中 except ion was throwed ---\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\n at System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\n--- 结束来自先前抛出异常的位置的堆栈跟踪 ---\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\n 在 System.Web.Http.Controllers.ExceptionFilterResult.d__0.MoveNext( )" 抛出异常:'System.ServiceModel.FaultException' in mscorlib.dll

谢谢。 亚历山大

Sergey Marenich 提供了一个解决方案:从我使用的 17.200.001 迁移到端点 18.200.001,因为 18.200.001 已经包含 InventoryID。

他还发现用于扩展端点的映射存在问题:我将新列映射到 InventoryID->InventoryID,而不仅仅是 InventoryID。

我迁移到 18.200.001,问题就解决了。