【问题标题】:Acumatica 5.10.0752 - Web API - Sales Order - New Item ErrorAcumatica 5.10.0752 - Web API - 销售订单 - 新项目错误
【发布时间】:2015-07-24 01:05:27
【问题描述】:

我已将我们的测试环境更新为最新版本的 Acumatica 5.10.0752。更新后,将商品插入销售订单时,我们的同步过程开始失败。请注意,没有对同步过程实施任何代码更改,唯一的更改是将最新更新应用到 Acumatica。我一直在为此苦苦挣扎,似乎无法充分解决,可以使用一些帮助..

这是堆栈跟踪:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---> PX.Data.PXException: 错误 #112: 处理字段 InventoryID 时发生错误: 对象引用未设置为对象的实例.. ---> System.NullReferenceException: 对象引用未设置为实例的一个对象。在 PX.Objects.SO.SOOrderEntry.SOLine_CuryUnitCost_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e) 在 PX.Data.PXCache.OnFieldDefaulting(String name, Object row, Object& newValue) 在 PX.Data.PXCache1.SetDefaultExt(Object data, String fieldName) at PX.Objects.SO.SOOrderEntry.SOLine_UOM_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e) at PX.Data.PXFieldUpdated.Invoke(PXCache sender, PXFieldUpdatedEventArgs args) at PX.Data.PXCache.OnFieldUpdated(String name, Object row, Object oldValue, Boolean externalCall) at PX.Data.PXCache1.SetDefaultExt(Object data , String fieldName) at PX.Objects.SO.SOOrderEntry.SOLine_InventoryID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e) at PX.Data.PXFieldUpdated.Invoke(PXCache sender, PXFieldUpdatedEventArgs args) at PX.Data.PXCache.OnFieldUpdated(String name, Object row , 对象 oldValue, Boolean externalCall) at PX.Data.PXCache1.a(TNode A_0, TNode A_1, IDictionary A_2, PXCacheOperation A_3, Boolean A_4) --- End of inner exception stack trace --- at PX.Data.PXCache1.a(TNode A_0, TNode A_1, IDictionary A_2, PXCacheOperation A_3, Boolean A_4) at PX.Data.PXCache1.a(TNode A_0, TNode A_1, IDictionary A_2, PXCacheOperation A_3) at PX.Data.PXCache1.Insert(IDictionary values ) 在 PX.Api.Services.ScreenService.Submit(String id, IEnumerable`1 commands, SchemaMode schemaMode) 在 PX.Data.PXCache1.Update(IDictionary keys, IDictionary values) at PX.Data.PXGraph.ExecuteUpdate(String viewName, IDictionary keys, IDictionary values, Object[] parameters) at PX.Data.PXGraph.CopyPasteCommitChanges(String viewName, OrderedDictionary keys, OrderedDictionary vals) at PX.Api.SyImportProcessor.SyStep.CommitChanges(Object itemToBypass, PXFilterRow[] targetConditions) at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable() at PX.Api.ScreenUtils.Submit(String screenId, Command[] commands, SchemaMode schemaMode, PXGraph& graph, String& redirectContainerView, String& redirectScreen, Boolean mobile) at PX.Api.Services.ScreenService.Submit(String id, IEnumerable1 commands, SchemaMode schemaMode, Boolean mobile, PXGraph& forceGraph, String&redirectContainerView, String& redirectScreen)在 PX.Api.Soap.Screen.ScreenGat e.Submit(Command[] commands) --- 内部异常堆栈跟踪结束---

这是更新前运行良好的代码 sn-p:

cmds.Add( SO301000.DocumentDetails.ServiceCommands.NewRow );
cmds.Add( new AcumaticaApiWS.Value { Value = item.InventoryId, LinkedCommand = SO301000.DocumentDetails.InventoryID } );
cmds.Add( new AcumaticaApiWS.Value { Value = item.Quantity, LinkedCommand = SO301000.DocumentDetails.Quantity } );
cmds.Add( new AcumaticaApiWS.Value { Value = item.UnitPrice, LinkedCommand = SO301000.DocumentDetails.UnitPrice } );
cmds.Add( new AcumaticaApiWS.Value { Value = item.WebCode, LinkedCommand = SO301000.DocumentDetails.WebCode } );
cmds.Add( new AcumaticaApiWS.Value { Value = item.ExtPrice, LinkedCommand = SO301000.DocumentDetails.ExtPrice} );
cmds.Add( new AcumaticaApiWS.Value { Value = item.ReasonCode, LinkedCommand = SO301000.DocumentDetails.ReasonCode } );
cmds.Add( new AcumaticaApiWS.Value { Value = item.LineDescription, LinkedCommand = SO301000.DocumentDetails.LineDescription } );
cmds.Add( SO301000.Actions.Save );
try
{
    this.context.SO301000Submit( cmds.ToArray() );
}
catch( Exception ex )
{   
    ...
}

这似乎与 UOM 有关,但我不确定问题是什么。认为某处可能需要设置一些配置。但没有看到它可能是什么。

如果我在新的行命令之后添加这行代码,它就可以正常工作。

cmds.Add( new AcumaticaApiWS.Value { Value = "EA", LinkedCommand = SO301000.DocumentDetails.UOM } );

但是,我希望它像更新前一样从项目的库存默认值中获取 UOM。

任何帮助将不胜感激。

** 我们的另一个想法是,当我们通过仅安装最新版本而不安装中间的每个版本来跳过更新时,我们无意中导致了这个问题。 - 这会导致奇怪的行为 - 跳过更新只安装最新的吗?发送

【问题讨论】:

  • UI 中的行为是什么?当你添加项目时,它会自动选择 UOM 吗?
  • 您也可以尝试在设置库存 ID 后添加一个 commit = true 。 cmds.Add(新 AcumaticaApiWS.Value { Value = item.InventoryId,LinkedCommand = SO301000.DocumentDetails.InventoryID,commit = true } );因为错误是 Inventory id 为 null 而默认 cury 单位成本。
  • UI 会自动选择 UOM,并且在填写与代码完全相同的字段时不会出现问题。在网络服务上,虽然它出错并且不幸的是 Commit=true 并没有什么不同。如果错误是咖喱单位成本,不知道为什么输入 UOM 命令没有错误。
  • 因此,如果您使用任何 InventoryId,您就会遇到此问题,而不是特定数据。您也仔细检查了传递给网络服务的值,仪式?你有任何定制吗?堆栈中唯一可用的信息是,在尝试处理某些内容时,inventoryID 为空。
  • 已检查值。一切看起来都很好,除了更新之外都一样。有定制。明天我会坚持下去。发送。

标签: acumatica


【解决方案1】:

关于堆栈跟踪,您需要设置 UOM

【讨论】:

  • 是的,正如我在我的问题中所说的那样,这确实有效,但不能回答我的问题。在更新之前,UOM 自动默认为默认值。关于更新的一些东西改变了一些东西,现在必须为大多数插入的项目设置 UOM。对于自动默认 UOM 的项目,我们无法区分失败的项目。
猜你喜欢
  • 2016-10-14
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多