如何将订单项自定义字段值从机会传递给销售订单?

问题描述:

我在机会产品选项卡中有一个自定义行号字段,供客户重新选择所选产品,并且网格按自定义字段值进行排序。如何将订单项自定义字段值从机会传递给销售订单?

我试图将机会的价值传递给也有类似领域的销售订单。

下面的代码我已经尝试,并没有工作

  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; 

        }); 
      }); 

下面这段代码对所有行号返回相同的值

您可以实现如下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; 
}); 
+0

我还没有看到PXResult .Current之前的使用。我假设这个例子中的Graph是SOOrderEntry?和PXResult 。当前知道哪个产品当前正以某种方式从不同的图表中选择?这是一个更好的答案,只是对使用PXResult 感兴趣。当前 – Brendan

+0

该解决方案要好得多。为我的解决方案进行测试,效果很好。谢谢Dhiren。 – Brendan

希望他们可以分裂的调用创建的顺序和插入线条的呼叫使其更容易定制。我们做了类似的事情。以下是我使用图形扩展测试的示例,并覆盖了opportunitymaint图中的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; 
     } 
    } 
} 

的问题,你与您的代码是当前产品总是相同的,导致相同的价值。

+0

感谢您的代码。我试过它正在工作。我将测试更多的文档并更新我的反馈 –