Параллельная работы отчета. SPTA Framework

Заинтересовала возможность распараллеливания работы отчетов и решил переделать один отчет HR, который последовательно обрабатывает большое количество сотрудников. За основу взял эту статью.

Отчет представлял собой класс с главным методом, на вход которому подавался табельный номер сотрудника. Данный метод собирал всю необходимую информацию и на добавлял её в таблицу с агрегированными данными.

В процессе первой итерации распараллеливания преобразуем программу таким образом, что бы главный метод возвращал структуру с собранными данными. Таким образом параллельные процессы вернут таблицу с данными по каждому сотруднику. Затем в основном потоке останется агрегировать эти информацию в результирующую таблицу и отобразить её.

Таким образом в блоке START-OF-SELECTION собираем выбранные табельные номера:

Кроме того в структуру gs_context сохраняем значения с селекционного экрана, так как параллельные потоки их видеть не будут.

callback-подпрограмма before_rfc остается почти без изменений — передаем каждому потоку данные с селекционного экрана и его часть табельных номеров.

В подпрограмме in_rfc последовательно вызываем метод main исходной программы и возвращаемую структуру передаем назад в основной поток программы

Подпрограмма after_rfc вообще осталась без изменений — результат каждого блока собираем глобальную таблицу.

В основном потоке программы осталось собрать полученные данные глобальной таблицы в результирующую для дальнейшего вывода пользователю.

Таким образом основной блок программы представляет собой следующее:

Остается только немного поправить, что бы каждый поток возвращал частично агрегированные записи и выполнять только окончательное объединение в основном потоке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *