Обработка поля доступа к странице в фильтре ЦАП во время процесса - PullRequest
0 голосов
/ 08 мая 2018

У меня есть поле в разделе фильтра страницы обработки, которое не влияет на выбор строк, но определяет способ их обработки. Я создал общедоступную переменную и установил ее для события, выбранного для строки фильтра, но, похоже, он сбрасывается при повторном вызове Graph для обработки строк. Нажатие Process не приводит к срабатыванию выбранного метода строки. Я искал способ доступа к кэшу фильтра во время метода процесса, но у меня не получилось. Как можно сохранить это значение или получить доступ к кэшу фильтра из метода обработки?

1 Ответ

0 голосов
/ 09 мая 2018

Вы должны зафиксировать значение фильтра в закрытии делегата. Это шаблон, который я использую для этого:

PXFilter<ProcessFilter> filter;

public void ProcessFilter_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
{
   ProcessFilter filter = e.Row as ProcessFilter;

   if (filter != null)
   {
       DataView.SetProcessDelegate(delegate (List<DAC> dacRecords) 
       { 
           ExecuteProcess(filter, dacRecords); 
       });
   }
}

public static void ExecuteProcess(ProcessFilter filter, List<DAC> dacRecords)
{
   // filter should contain the value captured at closure 
   // when calling SetProcessDelegate

   // You have to create a new graph to process the DAC Records 
   YourGraph newGraph = PXGraph.CreateInstance<YourGraph>();

   foreach (DAC dacRecord in dacRecords)
   {
      // Use newGraph to modify the records
   }

   // Save newGraph to persist the changes
}
...