【发布时间】: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