通过 REST 添加新销售订单时出错 API - Acumatica
Error Adding New Sales Order via REST API - Acumatica
我正在尝试使用我在以下位置创建的自定义端点向我的 Acumatica 系统添加一个包含详细信息行的新销售订单:
https://172.16.8.65/entity/ASG_INTEGRATION/6.00.001/SalesOrder
这是我在 Postman 中发送的 JSON 正文:
{
"OrderType": { "value": "SO" },
"CustomerID": { "value": "6362212668" },
"Details":
[
{
"Account": {"value": "4040" },
"Branch": {"value": "00" },
"InventoryID": { "value": "33964" },
"OrderQty": { "value": 1.000000 }
}
]
}
我必须创建自定义端点的原因是因为我的详细销售订单项目 中的 "Branch" 字段必须 包含在内,并且默认端点在其填充字段中没有 Branch 字段。 (感谢这位 指出了通往皱纹的道路!)
但现在我收到以下错误(它没有告诉我在哪里查找错误 - 至少我可以看到...):
{
"message": "An error has occurred.",
"exceptionMessage": "PX.Data.PXException: Error: The system failed to commit the CurrentDocument row.\r\n at PX.Api.SyImportProcessor.SyStep.a(Object A_0, PXFilterRow[] A_1, PXFilterRow[] A_2) in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Data\Api\Export\SyImport\ImportProcessor.cs:line 3638\r\n at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable() in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Data\Api\Export\SyImport\ImportProcessor.cs:line 1171",
"exceptionType": "PX.Api.ContractBased.OutcomeEntityHasErrorsException",
"stackTrace": " at System.Monads.ArgumentCheck.CheckNull[TSource](TSource source, Func`1 exceptionSource)\r\n at PX.Api.ContractBased.EntityService.GetOperationResult(EntityImpl entity, EntityExportContextBuilder entityExportContextBuilder, PXSYTable exportedKeys, List`1 errors) in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Api.ContractBased\EntityService.cs:line 480\r\n at PX.Api.ContractBased.EntityService.Put(ISystemContract systemContract, String version, String name, EntityImpl entity, CbOperationContext operationContext) in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Api.ContractBased\EntityService.cs:line 474\r\n at PX.Api.ContractBased.Soap.SoapFacadeBase.PutImpl(EntityImpl entity) in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Api.ContractBased\Soap\SoapFacadeBase.cs:line 117\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()"
}
知道调试的下一步是什么吗?
[编辑:添加屏幕截图以解决 Fernando 的问题]
有 2 个可能的分支,它们的名称相同,您不能将它们都添加到一个实体中。
这是在文档详细信息中
我应该使用哪一个?我怎么知道???当我复制@Fernando 显示的内容时(我假设使用文档详细信息 "Branch"),我收到 "Branch cannot be Empty" 错误:
好的,我与 Fernando 的谈话很有帮助。这是我发现的,这是有效的:
在字段中有两种不同的选择方式 "Branch" 这一事实很重要。
一个出现在 "Document Details" 弹出窗口中
财务设置 -> 财务信息弹出窗口中显示了一个:
事实证明两者都需要。 但它们不能都属于销售订单实体 -- 这是不允许的。
因此,我使用财务设置扩展了 SalesOrder 实体 "Branch"
并且,我使用 DocumentDetails "Branch"
扩展了 SalesOrderDetail 实体
然后我可以这样做并被接受:
{
"CustomerID": { "value": "76758" },
"OrderType": { "value": "SO" },
"Branch": { "value": "00" },
"Details":
[
{
"Account": { "value": "4040" },
"Branch": { "value": "00" },
"InventoryID": { "value": "33964"},
"OrderQty": { "value": 1.000000 }
}
]
}
仅在其中一个地方设置分支机构不会创建已接受的销售订单记录。所以这行得通,我有一个新的销售订单,里面有一个明细行。
我现在不记得了,因为我尝试了很多不同的东西,但是,我 相信 18.200.001版本的SalesOrder,Branch字段已经存在于SalesOrder Detail中,但不存在于SalesOrder中。而在 6.00.001 版本中它也不存在。我不确定,但我认为事情就是这样。万一有人偶然发现并使用不同的版本...
我正在尝试使用我在以下位置创建的自定义端点向我的 Acumatica 系统添加一个包含详细信息行的新销售订单:
https://172.16.8.65/entity/ASG_INTEGRATION/6.00.001/SalesOrder
这是我在 Postman 中发送的 JSON 正文:
{
"OrderType": { "value": "SO" },
"CustomerID": { "value": "6362212668" },
"Details":
[
{
"Account": {"value": "4040" },
"Branch": {"value": "00" },
"InventoryID": { "value": "33964" },
"OrderQty": { "value": 1.000000 }
}
]
}
我必须创建自定义端点的原因是因为我的详细销售订单项目 中的 "Branch" 字段必须 包含在内,并且默认端点在其填充字段中没有 Branch 字段。 (感谢这位
但现在我收到以下错误(它没有告诉我在哪里查找错误 - 至少我可以看到...):
{
"message": "An error has occurred.",
"exceptionMessage": "PX.Data.PXException: Error: The system failed to commit the CurrentDocument row.\r\n at PX.Api.SyImportProcessor.SyStep.a(Object A_0, PXFilterRow[] A_1, PXFilterRow[] A_2) in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Data\Api\Export\SyImport\ImportProcessor.cs:line 3638\r\n at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable() in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Data\Api\Export\SyImport\ImportProcessor.cs:line 1171",
"exceptionType": "PX.Api.ContractBased.OutcomeEntityHasErrorsException",
"stackTrace": " at System.Monads.ArgumentCheck.CheckNull[TSource](TSource source, Func`1 exceptionSource)\r\n at PX.Api.ContractBased.EntityService.GetOperationResult(EntityImpl entity, EntityExportContextBuilder entityExportContextBuilder, PXSYTable exportedKeys, List`1 errors) in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Api.ContractBased\EntityService.cs:line 480\r\n at PX.Api.ContractBased.EntityService.Put(ISystemContract systemContract, String version, String name, EntityImpl entity, CbOperationContext operationContext) in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Api.ContractBased\EntityService.cs:line 474\r\n at PX.Api.ContractBased.Soap.SoapFacadeBase.PutImpl(EntityImpl entity) in C:\Bld2\AC-FULL2019R113-JOB1\Sources\NetTools\PX.Api.ContractBased\Soap\SoapFacadeBase.cs:line 117\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()"
}
知道调试的下一步是什么吗?
[编辑:添加屏幕截图以解决 Fernando 的问题]
有 2 个可能的分支,它们的名称相同,您不能将它们都添加到一个实体中。
这是在文档详细信息中
我应该使用哪一个?我怎么知道???当我复制@Fernando 显示的内容时(我假设使用文档详细信息 "Branch"),我收到 "Branch cannot be Empty" 错误:
好的,我与 Fernando 的谈话很有帮助。这是我发现的,这是有效的:
在字段中有两种不同的选择方式 "Branch" 这一事实很重要。
一个出现在 "Document Details" 弹出窗口中
财务设置 -> 财务信息弹出窗口中显示了一个:
事实证明两者都需要。 但它们不能都属于销售订单实体 -- 这是不允许的。
因此,我使用财务设置扩展了 SalesOrder 实体 "Branch"
并且,我使用 DocumentDetails "Branch"
扩展了 SalesOrderDetail 实体然后我可以这样做并被接受:
{
"CustomerID": { "value": "76758" },
"OrderType": { "value": "SO" },
"Branch": { "value": "00" },
"Details":
[
{
"Account": { "value": "4040" },
"Branch": { "value": "00" },
"InventoryID": { "value": "33964"},
"OrderQty": { "value": 1.000000 }
}
]
}
仅在其中一个地方设置分支机构不会创建已接受的销售订单记录。所以这行得通,我有一个新的销售订单,里面有一个明细行。
我现在不记得了,因为我尝试了很多不同的东西,但是,我 相信 18.200.001版本的SalesOrder,Branch字段已经存在于SalesOrder Detail中,但不存在于SalesOrder中。而在 6.00.001 版本中它也不存在。我不确定,但我认为事情就是这样。万一有人偶然发现并使用不同的版本...