主な問題は、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