Каким образом в BPMonline вызывается надпись "Загрузка" во время выполнения долгих операций, например, при сохранении схемы или при переходе из модуля в модуль? И каким образом можно ее вызвать в определенный момент?
А кто нибудь пробовал сделать прогресс бар для длительных операций хотя бы в духе "Обработано хх из уу записей" (чтобы число обновлялось по мере выполнения обработки)?
В 3.х для того чтобы прорисовывалось изменяющееся число в окне при выполнении цикла можно было использовать System.ProcessMessages.
А то при длительной обработке (массовая операция с записями в моем случае) висящее сообщение "загрузка" как то некрасиво выглядит... пользователю гораздо приятнее будет видеть прогресс выполнения.
Александр, можно поступить также как реализован поиск дублей: в MessagePanel в реестре данных выводится сообщение, которое обновляется по мере выполнения процесса:
К сожалению, UI контрола специального нет. Необходимо разрабатывать самостоятельно и включать в сборку.
Дмитрий, спасибо за ответ! Сейчас посмотрю реализацию
Сделал вроде бы аналогично, но выдается сообщение только в самом конце - 100% :smile:
Проблемка как бы осталась - очень хочется получить "бегущие" значения от 0 до 100... в 3ке повторюсь это решалось путем добавления System.ProcessMessages, в результате перерисовывался в цикле текст сообщения. Тут нужно что-то похожее - перерисовка визуального компонента происходит уже после срабатывания всего цикла (он естественно в элементе задание-сценарий), и несмотря на наличие в сценарии throwevent, оно может и пробрасывается, но вот именно экранная форма и не перерисовывается...
Александр, UpdateMessagePanel там вызывается вручную при клике на "Обновить".
Попробуйте генерировать это сообщение, к примеру, после каждого десятого прохода цикла, чтобы перерисовать messagePanel.
Если не получится - думаю нужно посмотреть в сторону запуска клиентских javascript функций (по работе с элементами страницы), с помощью которой (getElementById) менять значение label'a.
"Олейник Дмитрий" написал:Если не получится - думаю нужно посмотреть в сторону запуска клиентских javascript функций (по работе с элементами страницы), с помощью которой (getElementById) менять значение label'a.
Именно не получается... ну страшно же выглядит, когда что-то происходит, и непонятно пользователю - повисла система напрочь или жива и работает....
Насчет javascript функций - есть ли примерчик где-нибудь в системе, чтобы понять откуда начать?
Дмитрий, получилось написать функцию, поменять с помощью свойства innerHTML значение Label на странице.
И вновь та же проблема - вызываю смену текста Label внутри скрипта в цикле, но срабатывает оно не в цикле, а в самом конце происходит прорисовка единственный раз нового (последнего) значения:cry:
Думаю, причина в том, что запрос(POST back) на клиент отправляется не после каждого прохода цикла, а после завершения всего метода. Наверное стоит попробовать добавить call-back в js функцию, т.е. написать еще одну функцию, которая будет выполнятся после выполнения первой. Можно Ваш код на js-e что-бы протестировать.
Дмитрий, тут дело все в том, что есть некое действие пользователя (подтверждение нажатием кнопки ок в окне уведомления), которое и приводит к перерисовке текста сообщения...
Попробуйте менять таким образом динамически любой заголовок поля в карточке записи, из которой вызван данный скрипт, и появляться на экране будет только последнее значение....
вариант что значения "пробегают" слишком быстро и я не успеваю их увидеть исключен - специально поставил внутрь цикла большой запрос, который отрабатывает ощутимое время...
Спасибо, Дмитрий! Буду разбираться, видео увидел.... у меня пока не заработало...
Заодно вопрос такой, чтобы не создавать новую тему - при длительном исполнении скрипта несколько раз "ловил" в конце выполнения штатное окно "Внимание" - В работе приложения возникла ошибка.... Время ожидания выполнения запроса истекло. ActionId: Click; ControlId: PageContainer_ButtonStart; SubmitAjaxEventConfig: {"config": {"viewStateMode": "include", "extraParams":{}}}
Контрол тот, клик по которому вызывает выполнение длинного скрипта... При этом скрипт насколько я понял отрабатывает полностью. Можно ли как то избежать появления этого окна?
Александр, не думаю. Это окно - ядровая обработка "клиентских" свалов. При этом они могут быть и не критичными (т.к. 99% логики - серверная).
По поводу загрузки, можно написать мой вариант (с точками полностью на js), к примеру на 20 секунд, а по окончании выполнения скрипта, скрывать этот лейбл. Даже если он выполнится за 12 секунд, "тики" видно уже не будет. При старте действия - лейбл отображать.
Про окно с предупреждением - понятно, что оно не критично, просто некрасиво оно появляется... видимо побороть надо оптимизацией кода, чтобы быстрее работало, тогда не нужен будет и прогресс бар. Попробую двигаться в этом направлении.