2020年6月22日月曜日

対話グリッドの自動リフレッシュ


対話グリッドを定期的かつ自動的にリフレッシュしたいんですけど、と聞かれてググったところ、以下のような動的アクションのプラグインを見つけました。オラクルが提供しているもので、含まれているタイムスタンプをみると2010年9月13日でした。ITの時間では骨董品に近いものですが、機能しました。

http://www.oracle.com/technetwork/developer-tools/apex/apex-timer-171713.zip

上記ファイルをダウンロードし展開した後、プラグインをインポートします。

共有コンポーネント他のコンポーネントに含まれる、プラグインを開きます。


インポートを実行します。(以下の画面ではすでにTimerプラグインがインポートされています)


ファイルの選択として、展開したプラグインのフォルダに含まれるdynamic_action_plugin_com_oracle_apex_timer.sqlを選択します。ファイル・タイププラグインとして、へ進みます。共有コンポーネントのプラグインからインポートを実行すると、ファイル・タイプのデフォルトはプラグインになります。


次に表示される確認画面はそのままへ進み、インストール画面にてインストールするアプリケーションを確認して、プラグインのインストールを実行します。共有コンポーネントのプラグインからインポートを実行すると、インストールするアプリケーションは、デフォルトでインポートを開始したアプリケーションになります。


これでTimerのプラグインがインストールされました。

次にTimerプラグインを構成して、対話グリッドのリフレッシュを自動的に行う動的アクションを定義します。

最初にTimerを初期化する動的アクションを設定します。左ペインに動的アクション・ビューを表示します。そしてページのロード上で(いわゆるマウスの右ボタンをクリックし)コンテキスト・メニューを表示し、動的アクションの作成を実行します。名前は任意ですが、ここではタイマーの開始、としています。タイミングイベントページのロードになります。


ページのロードが行われたときに実行されるアクション(Trueアクション)として、先ほどインストールしたTimer[プラグイン]を選び、ActionとしてAdd TimerTimer Nameは(任意ですが)ここではIG refresh(20バイトが名前の長さの上限です)、Expire in x Milliseconds5000(つまり5秒)、OccurrenceとしてInfinite(繰り返し - これ以外にOnce - 一度だけもあります)を指定します。そもそもページロード時の動的アクションなので、初期化時に実行OFFです。



タイマー自体の初期化はこれで出来たので、次にリフレッシュを行う動的アクションを設定します。動的アクション・ビューにあるイベントの項目でコンテキスト・メニューを表示させ、動的アクションの作成を実行します。名前は(任意ですが)ここでは定期リフレッシュタイミングイベントTimer Expired[Timer]選択タイプリージョンリージョンはリフレッシュを行う対話グリッドのリージョン名を指定します。ここでは従業員グリッドを指定しています。


最後にタイマーによって実行されるアクションを設定します。アクションとしてリフレッシュを選び、影響を受ける要素は、選択タイプリージョンで、リージョンとしては従業員グリッドになります。こちらも初期化時に実行OFFです。


以上で設定は完了です。ページを実行すると、最初の画面のように定期的に対話グリッドがリフレッシュされます。

Ronny Weissが開発した、より新しいタイマーの実装は、こちらにあります。"If you like my stuff, donate me a coffee"とありますので、コーヒー代の支払いを厭わなければ、こちらのプラグインの方の利用をお勧めします。