Индикатор прогресса при обработке больших объёмов

Достаточно неприлично выглядит, если выполняется достаточно долгая обработка (от 10 секунд и больше) и при этом пользователю не показан ход процесса.

Пользователь начинает переживать, а не зависла ли программа, а также сколько времени ещё ждать. Иногда начинает бояться, что программа упадёт с ошибкой по таймауту.

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

Этот индикатор можно вызвать и самому – функциональный модуль SAPGUI_PROGRESS_INDICATOR, в котором нет ничего сложного – передаётся рассчитанный процент и текст.

Маленькая тонкость: если вызывать его слишком часто, то:

Поэтому в некоторых случаях следует обновлять его только через N итераций.

Вызов можно для примера оформить такой подпрограммой:

image

А в основной программе обработки добавить строчку вызова:

image

Здесь 1000 – это количество обрабатываемых “позиций”, а 100 – через сколько позиций обновлять индикатор.

А можно ещё вместо прошитой константы рассчитать пятипроцентную величину = maximum * 0.05, и таким образом шаг индикатора прогресса будет 5% (на мой взгляд приемлемая цифра).

image

Вот и получится на выходе что-то такое (это при 5% шаге):

image

image

Вполне неплохо выглядит при незначительном объёме кода.

PS. Интересно, сработает ли прерывание транзакции по таймауту (обычно 10-15 минут), если ежеминутно обновлять индикатор…?

Опубликовано 07.09.2010 в 17:56 · Автор ivan · Ссылка
Рубрики: ABAP

Написать комментарий