2017-02-20 14 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 . Я предполагаю, что в этом примере Graph является SOOrderEntry? и PXResult <>. Текущий знает, какой продукт в настоящее время выбирается из другого графика? Это лучший ответ, просто интересующийся использованием PXResult <>. Current – Brendan

+0

Это решение намного лучше. Протестировал его для моего решения и отлично работает. Спасибо, Dhiren. – Brendan

1

хотят они могут разделиться на призыв создать порядок и вызов для вставки строк, чтобы упростить настройку. Мы сделали что-то подобное. Вот пример того, что я тестировал, используя расширение графа и переопределяя вызов 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

Спасибо за код. Я пробовал, он работает. Я буду тестировать несколько документов и обновлять свои отзывы –