2015-01-20 2 views
0

Разработка смарт-устройств в Genexus. Я использую Load Event для загрузки нескольких сотен записей (возвращенных сторонним веб-сервисом) в Grid (некоторые строки могут иметь разные макеты).Индикатор выполнения во время загрузки - возможно ли это?

Когда пользователь нажимает кнопку поиска, сразу отображается индикатор ProgressIndicator (во время выполнения процедуры). Когда процедура заканчивается (данные получены), ProgressIndicator исчезает, но для Grid может потребоваться еще 4-5 секунд для отображения свежих данных.

Это заставляет пользователя думать, что возникла проблема с поиском. Затем неожиданно сетка обновляется.

Возможно ли каким-либо образом показать ProgressIndication во время загрузки или обновления событий? Или у вас есть предложения по предотвращению такого поведения?

ответ

1

Основная проблема заключается в том, что события обновления и загрузки являются «серверными» событиями в архитектуре SD, поэтому у вас нет доступа к API-интерфейсам или ресурсам устройства, таким как индикатор прогресса.

У нас было такое же требование в iOS, и то, что мы делали, использовало событие GXRefresh.

Event 'gxrefresh' 
    Composite 
     //Your code. Example: ProgressIndicator.Hide() 
    EndComposite 
EndEvent 

Gxrefresh - это локальное событие, которое выполняется после обновления и загрузки. Является скрытым событием, которое помогло нам выполнить это. (Это не официальное мероприятие, и оно может быть принято в любой версии GeneXus) Так решение:

  • Запуск индикатора хода на события ClientStart этой панели.
  • Скрыть индикатор прогресса в событии 'gxrefresh' этой панели.

Примечание: помните, что для использования события gxrefresh вам нужно будет добавить скрытую кнопку с именем «gxrefresh». Вы можете скрыть эту кнопку, поскольку она вам не понадобится в пользовательском интерфейсе (мы указываем Visible = false на панели приложений).

Если это решение по какой-либо причине невозможно (например, событие gxrefresh устарело или вы разрабатываете для Android), я могу думать о втором WA, который не является элегантным вообще, но должен работать.

  • Старт Индикатор Прогресс в Client Start Event панели
  • Поместить скрытую переменную с типом управления SD хронометр.
  • Установите таймер на 6 секунд
  • Остановите индикатор прогресса на событии Tick SD-хронометра и остановите хронометр, чтобы событие Tick больше не выполнялось.

Это два варианта, о которых я могу думать. Возможно, есть более простой способ, но я не слышал об этом. Событие Grid.DidLoad было бы замечательно для этого сценария. Конечно, у нас будет это скоро или какое-то другое решение для этой проблемы.

Ссылка:

SD хронометр: http://wiki.genexus.com/commwiki/servlet/hwikibypageid?25058

SD Событие: http://wiki.genexus.com/commwiki/servlet/hwikibypageid?17042

стороны сервера Событие: http://wiki.genexus.com/commwiki/servlet/hwikibypageid?24234

+0

Здравствуйте. Спасибо за ваши отзывы, это было очень поучительно. Итак, мой поиск «Поиск» начинается с инструкции «ProgressIndicator.ShowWithTitleAndDescription (« MyApp »,« Please wait ... »)», затем вызывается процедура. Однако кажется, что ProgressIndicator автоматически скрывается на линии endEvent, даже если я опускаю инструкцию «ProgressIndicator.Hide()». Поэтому, когда приходит следующий SDEvent (gxrefresh или chronometer.tick), индикатор прогресса уже скрыт. Есть ли что-нибудь еще, что я мог бы попробовать? – Jaime

+0

Это верно, индикатор прогресса автоматически скрывается после окончания события. Вы выполняете обновление в своем поисковом мероприятии? – Franklin

+0

Да, сразу после события поиска (для обновления данных в сетке). – Jaime

Смежные вопросы