Acumatica CR302000页面:无法获取当前OrdNbr跳转销售订单
解决Acumatica CR302000页面网格行OrdNbr获取问题
核心解决步骤
1. 正确获取当前选中的订单行
首先确认Graph中定义的销售订单数据视图(假设命名为SOOrders)已正确关联联系人:
public PXSelect<SOOrder, Where<SOOrder.usrInstitutionalContact, Equal<Current<Contact.contactID>>>> SOOrders;
在跳转Action的代码中,直接通过视图的Current属性获取选中行,注意将Action的CommitChanges设为true以保证缓存数据最新:
public PXAction<Contact> OpenSalesOrder; [PXButton(CommitChanges = true)] [PXUIField(DisplayName = "Open Sales Order")] protected void openSalesOrder() { SOOrder selectedSO = Base.SOOrders.Current; if (selectedSO == null) return; // 获取复合主键:OrderType + OrdNbr string orderType = selectedSO.OrderType; string ordNbr = selectedSO.OrdNbr; }
2. 修正跳转逻辑的查询条件
销售订单采用OrderType + OrdNbr复合主键,仅用OrdNbr查询会导致定位错误,正确的跳转代码如下:
if (selectedSO != null) { SOOrder targetOrder = PXSelect<SOOrder, Where<SOOrder.orderType, Equal<Required<SOOrder.orderType>>, And<SOOrder.ordNbr, Equal<Required<SOOrder.ordNbr>>>>>.Select(Base, selectedSO.OrderType, selectedSO.OrdNbr); if (targetOrder != null) { PXRedirectHelper.TryRedirect(Base, targetOrder, PXRedirectHelper.WindowMode.NewWindow); } }
3. 排查数据加载与缓存问题
如果仍无法获取Current行,检查以下两点:
- 切换联系人时刷新订单视图:在
Contact的RowSelected事件中添加刷新逻辑:protected virtual void Contact_RowSelected(PXCache cache, PXRowSelectedEventArgs e) { Contact contact = e.Row as Contact; if (contact != null) { Base.SOOrders.View.RequestRefresh(); } } - 验证网格绑定配置:确认页面PXGrid的
DataMember属性与Graph中定义的订单视图名称一致。
内容的提问来源于stack exchange,提问作者Alfredo
相关产品推荐
相关产品推荐

