如何在确认运货操作在Acumatica中运行时如何更新自定义字段值

问题描述 投票:0回答:1

我们需要为某些业务工作复制确认装运操作按钮,并且还需要在确认装运长期运行完成时更新一些自定义字段。

下面是我的代码,但是在进行缓存更新时出现错误:集合已修改;枚举操作可能无法执行。

请纠正我做错的地方

public PXAction<PX.Objects.SO.SOShipment> ConfirmShipment;
        [PXUIField(DisplayName = "Confirm Shipment")]
        [PXButton]
        protected virtual IEnumerable confirmShipment(PXAdapter adapter)
        {
            if (ShipFilter.Current != null)
            {
                var soOrderShip = Base.Document.Current;
                if (soOrderShip != null)
                {
                    var graph = PXGraph.CreateInstance<SOShipmentEntry>();
                    //We are recreating an adapter like the framework would do.
                    var a = new PXAdapter(graph.Document)
                    {
                        Searches = new object[] { soOrderShip.ShipmentNbr }
                    };
                    using (PXTransactionScope ts = new PXTransactionScope())
                    {
                        //Note: Confirm Shipment is Action 1 : 
                        a.Arguments.Add("actionID", 1);
                        PXLongOperation.StartOperation(Base, () => { foreach (SOShipment soShipment in graph.action.Press(a)) ; });
                        //PXLongOperation.WaitCompletion(graph.UID);
                        PXAutomation.CompleteAction(graph);
                        PXLongOperation.WaitCompletion(graph.UID);
                        PXLongOperation.ClearStatus(graph.UID);
                        graph.Document.Cache.SetValueExt<SOShipmentExt.usrKWMXDCTimeStamp>(soOrderShip, Convert.ToDateTime(Convert.ToDateTime(new PX.Data.PXGraph().Accessinfo.BusinessDate).ToShortDateString() + " " + PX.Common.PXTimeZoneInfo.Now.ToLongTimeString()));
                        graph.Document.Cache.SetValueExt<SOShipmentExt.usrKWMXPieceCount>(soOrderShip, Convert.ToDecimal(Base.Document.Current.ShipmentQty));
                        graph.Document.Cache.SetValueExt<SOShipmentExt.usrKWMXEnteredBy>(soOrderShip, this.ShipFilter.Current.EnteredBy);
                        graph.Document.Update(soOrderShip);
                        graph.Save.Press();
                        ts.Complete();
                    }
                }
            }
            return adapter.Get();
        }

提前感谢。

acumatica acumatica-kb
1个回答
0
投票

您应该重写Confirmation例程,执行Base操作,然后添加您的代码。

Extend existing event

© www.soinside.com 2019 - 2024. All rights reserved.