如何在创建采购订单流程中把Production Nbr.值填充至用户字段?
实现从「创建采购订单」流程的“Production Nbr.”字段填充采购订单自定义字段
重写CreatePOOrders方法并注入字段赋值逻辑
你可以通过重写目标方法,在采购订单创建前添加POOrder的RowInserting事件处理器,从POFixedDemand列表(即创建PO的需求源)中获取“Production Nbr.”值,填充到自定义字段中。以下是具体实现代码:
public class POOrderEntry_Extension : PXGraphExtension<POOrderEntry> { // 定义原方法的委托 public delegate PXRedirectRequiredException CreatePOOrdersDelegate(List<POFixedDemand> list, DateTime? PurchDate, bool extSort, int? branchID = null); // 重写CreatePOOrders方法 [PXOverride] public virtual PXRedirectRequiredException CreatePOOrders(List<POFixedDemand> list, DateTime? PurchDate, bool extSort, int? branchID = null, CreatePOOrdersDelegate baseMethod) { // 创建POOrder图实例,用于注入事件 POOrderEntry poGraph = PXGraph.CreateInstance<POOrderEntry>(); // 添加POOrder行插入前的事件处理 poGraph.RowInserting.AddHandler<POOrder>((sender, e) => { POOrder newPO = e.Row as POOrder; if (newPO == null || list?.Count == 0) return; // 从需求列表中获取Production Nbr.(示例取第一个需求行的值,可根据业务调整) POFixedDemand firstDemand = list.FirstOrDefault(); if (firstDemand != null && !string.IsNullOrEmpty(firstDemand.ProductionNbr)) { // 替换为你的采购订单自定义字段名,比如UsrProductionNbr newPO.UsrProductionNbr = firstDemand.ProductionNbr; // 显式标记字段修改,确保值被保存 poGraph.Caches[typeof(POOrder)].SetValueExt<POOrder.usrProductionNbr>(newPO, firstDemand.ProductionNbr); } }); // 调用原方法完成PO创建流程 return baseMethod(list, PurchDate, extSort, branchID); } }
关键注意事项
- 字段替换:将代码中的
UsrProductionNbr替换为你实际在采购订单上创建的自定义用户字段名,同时确保POFixedDemand中的生产订单号字段是ProductionNbr(如果不是,替换为系统实际对应的字段名,比如PlanOrdNbr)。 - 多需求行处理:示例中取了需求列表的第一个值,如果你的业务场景是一个PO对应多个生产订单需求,需要调整逻辑确定最终要填充的Production Nbr.(比如取所有值拼接、或按特定规则选取)。
- 空值校验:代码中加入了空值判断,避免因需求列表为空或字段无值导致的异常。
内容的提问来源于stack exchange,提问作者pmfith
相关产品推荐
相关产品推荐

