Acumatica库存项页面弹窗生成InventoryID无法显示问题求助
解决Acumatica中InventoryID赋值后无法显示的问题
我帮你梳理下问题:你已经成功生成了带特殊字符的InventoryID,但赋值给InventoryCD后页面没显示,核心问题出在缓存操作的方式上——用Insert去更新现有记录是错误的,这根本不会触发页面的字段刷新。
下面给你两种靠谱的解决方案,优先推荐第二种:
方案一:用Cache.Update更新缓存记录
直接更新当前缓存里的记录,然后通知页面同步刷新:
[PXButton] [PXUIField(DisplayName = "Generate")] public virtual void GenerateInv() { InventoryItem currentItem = Base.Item.Current; if (currentItem == null) return; // 避免空引用异常 InventoryItemExt ext = currentItem.GetExtension<InventoryItemExt>(); currentItem.InventoryCD = ext.UsrInvId; Base.Item.Cache.Update(currentItem); // 更新缓存,触发UI同步 // 如果字段仍未刷新,手动触发字段更新事件 Base.Item.Cache.RaiseFieldUpdated<InventoryItem.inventoryCD>(currentItem, currentItem.InventoryCD); }
方案二:用SetValueExt(Acumatica官方推荐方式)
Acumatica的SetValueExt方法会自动处理字段验证、事件触发和UI同步,比直接赋值更稳妥可靠:
[PXButton] [PXUIField(DisplayName = "Generate")] public virtual void GenerateInv() { InventoryItem currentItem = Base.Item.Current; if (currentItem == null) return; InventoryItemExt ext = currentItem.GetExtension<InventoryItemExt>(); // 用SetValueExt赋值,自动同步到页面显示 Base.Item.Cache.SetValueExt<InventoryItem.inventoryCD>(currentItem, ext.UsrInvId); }
原代码无效的原因说明:
Base.Item.Cache.Insert(Base.Item.Current)是用于新增记录的API,而你当前操作的是已经处于缓存编辑状态的现有记录,调用Insert不仅不会更新现有值,反而可能引发缓存冲突。- 直接给
currentItem.InventoryCD赋值后,必须通知Acumatica的缓存系统字段已变更,UI才会同步显示新值,Update或SetValueExt就是承担这个通知职责的。
如果还是没效果,可以排查这几点:
- 确认
ext.UsrInvId确实拿到了正确的带特殊字符的值(可通过断点调试或日志输出验证) - 检查页面上的InventoryCD字段是否被设置为只读(如果布局里设了ReadOnly,需要确保按钮操作时能修改它)
- 查看是否有其他自定义事件(比如RowUpdated)覆盖了你设置的InventoryCD值
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

