Достаточно неприлично выглядит, если выполняется достаточно долгая обработка (от 10 секунд и больше) и при этом пользователю не показан ход процесса.
Пользователь начинает переживать, а не зависла ли программа, а также сколько времени ещё ждать. Иногда начинает бояться, что программа упадёт с ошибкой по таймауту.
Вот как раз для этих целей и используются индикаторы прогресса. В SAP для этого обычно используется статусная строка с закрашиваемой иконкой секундомера.
Этот индикатор можно вызвать и самому – функциональный модуль SAPGUI_PROGRESS_INDICATOR, в котором нет ничего сложного – передаётся рассчитанный процент и текст.
Маленькая тонкость: если вызывать его слишком часто, то:
- Обновляется некрасиво и неразборчиво
- Увеличивается обмен информацией между клиентом и сервером
Поэтому в некоторых случаях следует обновлять его только через N итераций.
Вызов можно для примера оформить такой подпрограммой:
А в основной программе обработки добавить строчку вызова:
Здесь 1000 – это количество обрабатываемых “позиций”, а 100 – через сколько позиций обновлять индикатор.
А можно ещё вместо прошитой константы рассчитать пятипроцентную величину = maximum * 0.05, и таким образом шаг индикатора прогресса будет 5% (на мой взгляд приемлемая цифра).
Вот и получится на выходе что-то такое (это при 5% шаге):
Вполне неплохо выглядит при незначительном объёме кода.
PS. Интересно, сработает ли прерывание транзакции по таймауту (обычно 10-15 минут), если ежеминутно обновлять индикатор…?