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

Acumatica自定义:如何在SO Line中添加关联的PO Nbr列

Acumatica SO Line添加关联PO Nbr字段实现方案

以下是基于Acumatica框架的最优实现方案,无需冗余逻辑,适配绝大多数业务场景:

1. DAC扩展字段配置

你已经创建的SOLine自定义Usr字段直接使用PXDBScalar属性即可自动关联SOLineSplit取数,该方案原生支持页面的排序、过滤操作,性能最优。
完整DAC扩展代码示例:

using PX.Data;
using PX.Objects.PO;
using PX.Objects.SO;

public class SOLineExt : PXCacheExtension<SOLine>
{
    #region UsrPONbr
    // 若不需要持久化存储到SOLine表,将PXDBString改为PXString即可
    [PXDBString(15, IsUnicode = true)]
    [PXUIField(DisplayName = "关联PO单号")]
    [PXDBScalar(typeof(Search2<SOLineSplit.pONbr,
        InnerJoin<POOrder, On<POOrder.orderType, Equal<SOLineSplit.pOType>,
            And<POOrder.orderNbr, Equal<SOLineSplit.pONbr>>>>,
        Where<SOLineSplit.orderType, Equal<SOLine.orderType>,
        And<SOLineSplit.orderNbr, Equal<SOLine.orderNbr>,
        And<SOLineSplit.lineNbr, Equal<SOLine.lineNbr>,
        // 可自行追加过滤条件,比如排除已作废的PO
        And<POOrder.status, NotEqual<POOrderStatus.cancelled>>>>>))]
    public virtual string UsrPONbr { get; set; }
    public abstract class usrPONbr : PX.Data.BQL.BqlString.Field<usrPONbr> { }
    #endregion
}

2. 页面配置步骤

  • 打开SO订单页面(SO301000)的自定义编辑器
  • 找到Transactions网格的字段集合,添加自定义字段UsrPONbr到显示列
  • 发布自定义即可生效,无需额外编写图扩展事件逻辑

多PO关联场景适配

如果业务中一行SO Line对应多个PO分配,需要合并展示所有关联PO号,可以通过图扩展的RowSelecting事件实现:

using PX.Data;
using PX.Objects.SO;
using System.Linq;

public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry>
{
    protected void SOLine_RowSelecting(PXCache cache, PXRowSelectingEventArgs e)
    {
        if (e.Row is not SOLine row) return;
        var relatedPoNbrs = PXSelect<SOLineSplit,
            Where<SOLineSplit.orderType, Equal<Required<SOLine.orderType>>,
            And<SOLineSplit.orderNbr, Equal<Required<SOLine.orderNbr>>,
            And<SOLineSplit.lineNbr, Equal<Required<SOLine.lineNbr>>,
            And<SOLineSplit.pONbr, IsNotNull>>>>
            .Select(Base, row.OrderType, row.OrderNbr, row.LineNbr)
            .RowCast<SOLineSplit>()
            .Select(s => s.PONbr)
            .Distinct();
        
        cache.SetValue<SOLineExt.usrPONbr>(row, string.Join(",", relatedPoNbrs));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:48:04