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

Acumatica从跳转页面刷新关联网格的问题求助

解决Acumatica跳转页面后网格不自动刷新的问题

我碰到过一模一样的场景——从父页面跳转至查询页面时,表头的筛选条件明明已经加载完成,但关联的网格数据却非要手动点刷新才出来。这本质上是因为后台跳转设置表头Current记录后,Acumatica不会自动触发关联子视图的数据加载,和ASPX的联动配置也有一定关系,下面是具体的解决思路和代码调整方案:

一、在跳转逻辑里手动触发网格视图刷新

跳转时虽然设置了表头的Current记录,但Acumatica不会自动联动刷新子视图,必须显式调用视图的Select()或Refresh()方法来触发数据加载。修改你的跳转动作代码:

public PXAction<POOrder> Reconcile;
[PXUIField(DisplayName = "Reconcile", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
[PXButton(CommitChanges = true, OnClosingPopup = PXSpecialButtonType.Cancel)]
public virtual void reconcile()
{
    POLine pOLineRow = Transactions.Current;
    if (pOLineRow == null)
    {
        return;
    }

    if (pOLineRow.OrderNbr != null)
    {
        PEPOOrderReconciliationMaint pEPOOrderReconciliationgraph = PXGraph.CreateInstance<PEPOOrderReconciliationMaint>();
        
        // 查找并设置表头当前记录
        pEPOOrderReconciliationgraph.POOrderReconcileRecord.Current = 
            pEPOOrderReconciliationgraph.POOrderReconcileRecord.Search<POLine.orderType, POLine.orderNbr, POLine.lineNbr>(
                pOLineRow.OrderType, pOLineRow.OrderNbr, pOLineRow.LineNbr);

        if (pEPOOrderReconciliationgraph.POOrderReconcileRecord.Current != null)
        {
            // 关键步骤:手动刷新网格对应的视图,触发数据加载
            pEPOOrderReconciliationgraph.POReceiptLineRecord.Select();
            
            throw new PXRedirectRequiredException(pEPOOrderReconciliationgraph, false, "PORECONCILIATION") 
            { 
                Mode = PXBaseRedirectException.WindowMode.NewWindow 
            };
        }
    }
}

二、优化ASPX的网格联动配置

检查你的网格控件是否开启了自动刷新,以及是否和表头视图正确联动。调整PXGrid的属性:

<px:PXGrid ID="grid" runat="server" DataSourceID="ds" Style="z-index: 100; margin-top: 0px;" 
    Width="100%" Height="150px" SkinID="Details" TabIndex="21000" 
    KeepPosition="True" SyncPosition="True" AdjustPageSize="Manual"
    AutoRefresh="True"> <!-- 开启自动刷新,配合后台触发 -->
    <Levels>
        <px:PXGridLevel DataKeyNames="OrderType,OrderNbr,LineNbr" DataMember="POReceiptLineRecord">
            <!-- 你的RowTemplate内容 -->
        </px:PXGridLevel>
    </Levels>
</px:PXGrid>

另外你表头的CommitChanges="True"设置是正确的,确保前台操作时能触发联动,但后台跳转场景下还是需要手动触发视图刷新。

三、确认子视图的筛选逻辑正确性

确保POReceiptLineRecord视图的PXSelect语句,是基于表头POOrderReconcileRecord.Current的字段做筛选的,比如:

public PXSelect<PEPOReceiptLine, 
    Where<PEPOReceiptLine.orderType, Equal<Current<POLine.orderType>>,
        And<PEPOReceiptLine.orderNbr, Equal<Current<POLine.orderNbr>>,
            And<PEPOReceiptLine.lineNbr, Equal<Current<POLine.lineNbr>>>>>> POReceiptLineRecord;

只有子视图的筛选条件绑定到表头的Current记录,后台设置表头Current后调用Select(),才能正确加载关联数据。

为什么直接打开页面正常?

直接打开页面输入POLine信息时,前台控件的CommitChanges="True"会触发页面回调,Acumatica会自动联动刷新子视图;但后台跳转是直接修改Graph的Current记录,没有触发前台回调事件,所以必须手动触发视图刷新。

内容的提问来源于stack exchange,提问作者Luis Rojas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:08:04