【问题标题】:CuryUnitCost on Purchase Order Screen, POLine DAC采购订单屏幕上的 CuryUnitCost,POLine DAC
【发布时间】:2018-05-22 22:46:08
【问题描述】:

当从创建采购订单屏幕处理采购订单时,我正在尝试使用来自 SOLine DAC 的自定义字段值更新采购订单屏幕上的 CuryUnitPrice 字段。关于如何做到这一点的任何想法?

现在我正在尝试根据 OrderNbr 字段获取 POLine。该字段是自动编号的,并且其中包含“值。我尝试了所有可能的方法来获取创建的 POOrderNbr 的值。但不知何故,在触发了这么多次之后,我在 RowSelectedEvent 处理程序中找到了它。检索 RowSeletedEventhandler 的值不是一个好主意. 有什么办法可以让我从创建采购订单屏幕或采购订单屏幕中获取更新字段的值。下面是我在 RowSelectedEventHandler 中编写的代码

            protected virtual void POLine_RowSelected(PXCache cache,       PXRowSelectedEventArgs e, PXRowSelected del)
            { 
                del.Invoke(cache, e);
                POLine row = e.Row as POLine;
                if (row != null)
                {
                   if (row.OrderNbr != " <NEW>")
                   {            
                     PXResultset<POLine> poLine = PXSelect<POLine, Where<POLine.orderNbr,
                     Equal<Required<POLine.orderNbr>>>>
                     .Select(Base, row.OrderNbr);
                       foreach (POLine p in poLine)
                       {
                        PXResultset<SOLineSplit> SoLineSplit = PXSelect<SOLineSplit, Where<SOLineSplit.pONbr,
                            Equal<Required<POOrder.orderNbr>>, And<SOLineSplit.pOLineNbr, Equal<Required<POLine.lineNbr>>>>>.Select(Base, row.OrderNbr, p.LineNbr);

                            foreach (SOLineSplit so in SoLineSplit)
                            {

                            SOLine soLine = PXSelectJoin<SOLine, InnerJoin<SOLineSplit, On<SOLine.orderNbr, Equal<Required<SOLineSplit.orderNbr>>>>,
                                 Where<SOLineSplit.planID, Equal<Required<SOLineSplit.planID>>>>.Select(Base, so.OrderNbr, so.PlanID);
                            SOLineExt soLineExt = PXCache<SOLine>.GetExtension<SOLineExt>(soLine);
                                if (soLineExt.UsrUnitCost != null)
                                {
                                p.CuryUnitCost = soLineExt.UsrUnitCost;

                                Transactions.Update(p);

                                Base.Actions.PressSave();
                                }
                            }
                       }                      
                    }
                  }
                }

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    在 POLine 上尝试 RowPersisted 事件:

    protected virtual void POLine_RowPersisted(PXCache cache, PXRowPeristedEventArgs e)
    { 
        if ((e.Operation & PXDBOperation.Command) == PXDBOperation.Insert ||
            (e.Operation & PXDBOperation.Command) == PXDBOperation.Update)
        {
        }
    }
    

    如果需要,也可以订购:

    protected virtual void POOrder_RowPersisted(PXCache cache, PXRowPeristedEventArgs e)
    { 
        if ((e.Operation & PXDBOperation.Command) == PXDBOperation.Insert ||
            (e.Operation & PXDBOperation.Command) == PXDBOperation.Update)
        {
        }
    }
    

    我认为问题在于 POOrderNbr 只有在记录被持久化到数据库后才可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      相关资源
      最近更新 更多