2017-02-20 29 views
0

我在機會產品選項卡中有一個自定義行號字段,供客戶重新選擇所選產品,並且網格按自定義字段值進行排序。如何將訂單項自定義字段值從機會傳遞給銷售訂單?

我試圖將機會的價值傳遞給也有類似領域的銷售訂單。

下面的代碼我已經嘗試,並沒有工作

  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; 

        }); 
      }); 

下面這段代碼對所有行號返回相同的值

回答

2

您可以實現如下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

1

希望他們可以分裂的調用創建的順序和插入線條的呼叫使其更容易定製。我們做了類似的事情。以下是我使用圖形擴展測試的示例,並覆蓋了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

感謝您的代碼。我試過它正在工作。我將測試更多的文檔並更新我的反饋 –

相關問題