0

Genexus でのスマート デバイスの開発。Load イベントを使用して、数百のレコード (サード パーティの webService によって返される) をグリッドに読み込みます (一部の行のレイアウトが異なる場合があります)。

ユーザーが検索ボタンを押すと、(プロシージャの実行中に) ProgressIndicator がすぐに表示されます。手順が終了すると (データが取得されると)、ProgressIndicator は消えますが、グリッドに新しいデータが表示されるまでにさらに 4 ~ 5 秒かかる場合があります。

これにより、ユーザーは検索に問題があったと考えるようになります。その後、予期せず、グリッドが更新されます。

Load または Refresh イベント中に ProgressIndication を表示することは可能ですか? または、この動作を防ぐための提案はありますか?

4

1 に答える 1

1

主な問題は、Refresh および Load イベントが SD アーキテクチャの「サーバー」イベントであるため、デバイスの API や進行状況インジケーターなどのリソースにアクセスできないことです。

iOSにも同じ要件があり、GXRefresh イベントを使用していました。

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

Gxrefresh は、Refresh と Load の後に実行されるローカル イベントです。私たちがこれを達成するのを助けた隠された出来事です。(これは公式のイベントではなく、GeneXus のどのバージョンでも実行できます) したがって、解決策は次のとおりです。

  • そのパネルの ClientStart イベントでプログレス インジケータを開始します。
  • そのパネルの「gxrefresh」イベントで進行状況インジケーターを非表示にします。

注: gxrefresh イベントを使用するには、「gxrefresh」という名前の隠しボタンを追加する必要があることに注意してください。このボタンは UI で必要ないため、非表示にすることができます (アプリケーション バーに Visible=false を配置しました)。

なんらかの理由でその解決策が不可能な場合 (たとえば、gxrefresh イベントが非推奨である、または Android 向けに開発している場合)、まったく洗練されていないが機能するはずの 2 つ目の WA を考えることができます。

  • パネルのクライアント開始イベントでプログレス インジケータを開始します。
  • コントロール タイプ SD Chronometer の隠し変数を配置します。
  • タイマーを6秒にセット
  • SD Chronometer の Tick イベントで進行状況インジケーターを停止し、Tick イベントがそれ以上実行されないように Chronometer を停止します。

考えられる選択肢はこの2つです。もっと簡単な方法があるかもしれませんが、私は聞いたことがありません。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

于 2015-01-21T03:31:06.913 に答える