【问题标题】:How to pass line item custom field value to sales order from opportunity?如何将行项目自定义字段值从机会传递给销售订单?
【发布时间】:2017-02-23 04:04:56
【问题描述】:

我在商机产品选项卡中有一个自定义行号字段,供客户重新排序所选产品,并且网格按自定义字段值排序。

我正在尝试将价值从机会传递到也具有类似字段的销售订单。

下面的代码我试过了,没用

            PXGraph.InstanceCreated.AddHandler<SOOrderEntry>((graph) =>
            {
                graph.RowUpdated.AddHandler<SOLine>((cache, args) =>
                    {

                        CROpportunityProducts product = (adapter.View.Graph as OpportunityMaint).Products.Current;
                        CROpportunityProductsExtNV productext = PXCache<CROpportunityProducts>.GetExtension<CROpportunityProductsExtNV>(product);
                        SOLine soline = (SOLine)args.Row;
                        SOLineExtNV solineext = PXCache<SOLine>.GetExtension<SOLineExtNV>(soline);
                        solineext.UsrLineNo = productext.UsrLineNo;

                    });
            });

以下代码对所有行号返回相同的值

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    您可以如下实现 RowInserting 事件处理程序:

    graph.RowInserting.AddHandler<SOLine>((cache, args) =>
    {
        var soLine = (SOLine)args.Row;
        CROpportunityProducts opProduct = PXResult<CROpportunityProducts>.Current;
        SOLineExtNV soLineExt = PXCache<SOLine>.GetExtension<SOLineExtNV>(soLine);
        CROpportunityProductsExtNV opProductExt = PXCache<CROpportunityProducts>.GetExtension<CROpportunityProductsExtNV>(opProduct);
        soLineExt.UsrLineNo = opProductExt.UsrLineNo;
    });
    

    【讨论】:

    • 我之前没有见过 PXResult.Current 的使用。我假设这个例子中的 Graph 是 SOOrderEntry?和 PXResult.Current 知道当前以某种方式从不同的图表中选择了哪个产品?这是一个更好的答案,只是对 PXResult.Current 的使用感兴趣
    • 这个解决方案要好得多。针对我的解决方案对其进行了测试,效果很好。谢谢迪伦。
    【解决方案2】:

    希望他们可以将创建订单的调用和插入行的调用分开,以便更容易定制。我们做过类似的事情。这是我使用图形扩展测试并覆盖机会维护图中的 DoCreateSalesOrder 调用的示例。 (这假设产品上的选择与销售订单上的交易插入的订单相同。我相信可能会有更好的答案,但这是我方便的一个例子。)

    public class CROpportunityMaintExtNV : PXGraphExtension<OpportunityMaint>
    {
        [PXOverride]
        public virtual void DoCreateSalesOrder(Action del)
        {
            try
            {
                del();
            }
            catch (PXRedirectRequiredException redirect)
            {
                var products = this.Products.Select().ToArray();
    
                int rowCntr = 0;
                foreach (SOLine soLine in ((SOOrderEntry)redirect.Graph).Transactions.Select())
                {
                    // Assumes inserted rows in same order as products listed (default should be the key)
    
                    //Current product
                    CROpportunityProducts currentProduct = products[rowCntr];
                    var productExtension = currentProduct.GetExtension<CROpportunityProductsExtNV>();
    
                    ((SOOrderEntry) redirect.Graph).Transactions.Cache.SetValueExt<SOLineExtNV.usrLineNo>(soLine, productExtension.UsrLineNo);
    
                    rowCntr++;
                }
    
                throw redirect;
            }
        }
    }
    

    您的代码遇到的问题是当前产品始终相同,从而导致相同的值。

    【讨论】:

    • 感谢您的代码。我试过它正在工作。我将测试更多文档并更新我的反馈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多