You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:53:35