Acumatica定制Process Shipments:添加PO Receipts的BranchID字段问询
核心原因
你在屏幕设计器找不到多视图配置的原因是,Process Shipments(屏幕ID SO503000)的PO Receipt网格动态列逻辑,并不依赖多视图实现,而是通过服务端RowSelected事件动态控制列的可见性,和你观察到的「不同操作对应不同Select查询」是两个独立逻辑,不存在可视化的一键配置开关。
实现步骤
- 第一步:创建BLC扩展
给标准逻辑PX.Objects.SO.SOProcessShipments创建自定义BLC扩展,不需要修改原数据视图的Select语句,POReceipt.BranchID是系统原生字段,查询时会自动带出。 - 第二步:手动添加网格列
打开定制编辑器的SO503000屏幕设计器,找到PO Receipt对应的网格控件,手动添加POReceipt__BranchID列,设置列头显示为分支ID,默认该列会处于隐藏状态。 - 第三步:添加事件控制列可见性
在BLC扩展中添加POReceipt的RowSelected事件,判断当前选中的操作是否为「Prepare Drop-Ship Invoice」,动态控制BranchID列的可见性,代码示例如下:public class SOProcessShipmentsExt : PXGraphExtension<SOProcessShipments> { protected virtual void POReceipt_RowSelected(PXCache cache, PXRowSelectedEventArgs e) { if (e.Row == null) return; // 获取当前选中的处理操作 var processActionState = Base.Actions[nameof(Base.Process)].GetState(null) as PXActionState; bool isTargetAction = processActionState?.MenuCaption == "Prepare Drop-Ship Invoice"; // 动态设置BranchID列可见性 PXUIFieldAttribute.SetVisible<POReceipt.branchID>(cache, e.Row, isTargetAction); } } - 第四步:保存定制并发布即可生效。
内容的提问来源于stack exchange,提问作者Scott S
相关产品推荐
相关产品推荐

