対話グリッドを定期的かつ自動的にリフレッシュしたいんですけど、と聞かれてググったところ、以下のような動的アクションのプラグインを見つけました。オラクルが提供しているもので、含まれているタイムスタンプをみると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 Timer、Timer Nameは(任意ですが)ここではIG refresh(20バイトが名前の長さの上限です)、Expire in x Millisecondsに5000(つまり5秒)、OccurrenceとしてInfinite(繰り返し - これ以外にOnce - 一度だけもあります)を指定します。そもそもページロード時の動的アクションなので、初期化時に実行はOFFです。
タイマー自体の初期化はこれで出来たので、次にリフレッシュを行う動的アクションを設定します。動的アクション・ビューにあるイベントの項目でコンテキスト・メニューを表示させ、動的アクションの作成を実行します。名前は(任意ですが)ここでは定期リフレッシュ、タイミングのイベントをTimer Expired[Timer]、選択タイプをリージョン、リージョンはリフレッシュを行う対話グリッドのリージョン名を指定します。ここでは従業員グリッドを指定しています。
最後にタイマーによって実行されるアクションを設定します。アクションとしてリフレッシュを選び、影響を受ける要素は、選択タイプがリージョンで、リージョンとしては従業員グリッドになります。こちらも初期化時に実行はOFFです。
以上で設定は完了です。ページを実行すると、最初の画面のように定期的に対話グリッドがリフレッシュされます。
Ronny Weissが開発した、より新しいタイマーの実装は、こちらにあります。"If you like my stuff, donate me a coffee"とありますので、コーヒー代の支払いを厭わなければ、こちらのプラグインの方の利用をお勧めします。
完