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

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

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

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

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

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

  • Обновляется некрасиво и неразборчиво
  • Увеличивается обмен информацией между клиентом и сервером

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

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

    image

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

    image

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

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

    image

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

    image

    image

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

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

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

    Ваш e-mail не будет опубликован.