Acumatica处理页面自动选中行后处理按钮生效属性咨询
解决Acumatica自动选中行后处理按钮不生效的问题
嘿,我明白你现在的困扰——已经能把复选框设为true,但处理按钮就是不认这些自动选中的行,非得手动点一下别的行才生效。这其实是因为Acumatica里UI复选框状态和缓存内部的选中集合是分开的,你只更新了UI,没告诉后台缓存这些行要被处理。
下面给你具体的解决步骤和代码修改建议:
核心问题原因
Acumatica的处理按钮(比如Process类按钮)是通过读取缓存的Selected集合来获取待处理行的,而PXUIFieldAttribute.SetChecked仅仅是更新了页面上的复选框显示,并没有把行加入到缓存的选中集合里。所以必须同步更新缓存的选中状态,处理按钮才能识别到这些行。
修改你的RowSelected事件代码
把你的代码调整成这样,关键是加上sender.SetSelected这一步:
public void EDASNShipProj_RowSelected(PXCache sender, PXRowSelectedEventArgs e) { PXUIFieldAttribute.SetDisplayName<EDASNShipProj.customerLocationID>(sender, "Ship Location"); var row = (EDASNShipProj)e.Row; if (row == null) return; // 这里替换成你的实际筛选条件,比如判断UsrTruckNbr符合要求 bool shouldSelect = !string.IsNullOrEmpty(row.UsrTruckNbr) && row.UsrTruckNbr == "你的目标卡车号"; // 1. 更新UI上的复选框状态 PXUIFieldAttribute.SetChecked<EDASNShipProj.selected>(sender, row, shouldSelect); // 2. 关键:把行加入/移除缓存的选中集合,让处理按钮能识别 sender.SetSelected(row, shouldSelect); // 如果页面没有自动刷新状态,可以加这句触发缓存更新(可选) // sender.Ask(null); }
额外检查点
如果你的处理按钮是自定义的,还要确保按钮的处理逻辑是从缓存的Selected集合里取数据,而不是只看Selected字段:
public PXAction<EDASNShipProj> process; [PXButton(CommitChanges = true)] [PXUIField(DisplayName = "Process")] protected void Process() { // 遍历缓存中标记为选中的行 foreach (EDASNShipProj row in Base.EDASNShipProj.Cache.Selected) { // 这里写你的处理逻辑 } }
这样修改后,自动选中的行就会被处理按钮正确识别,不用再手动触发了。
内容的提问来源于stack exchange,提问作者Jerry Welliver
相关产品推荐
相关产品推荐

