アプリケーションに作成されている自動化は、アプリケーションをインポートした時点では無効になっています。インポート後にいきなりアクティブになり、知らないうちに処理が実行されても困るので、これは妥当な仕様でしょう。
Oracle APEX 22.1のマニュアルでは以下のセクションに説明があります。アプリケーション・ビルダー・ユーザーズ・ガイド 19.5.2 自動化のインポートとエクポートについて
とはいえ、インポート後に操作しなくてもアクティブになって欲しい自動化の処理もあるようです。少し実装方法について考えてみました。
これも自動化を使って実装します。
Oracle APEXの自動化はAPEXの標準ビューAPEX_APPL_AUTOMATIONS より、登録されている自動化やそのステータスを確認できます。
以下のSELECT文で無効になっている自動化を見つけることができます。静的ID (列static_id)がauto-enabled- で始まるという条件を付けることにより、インポート後に自動的にアクティブにしたい自動化を選択しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select automation_id, application_id, static_id from apex_appl_automations
where static_id like 'auto-enable-%'
and polling_status_code = 'DISABLED'
自動化をアクティブにするためにプロシージャAPEX_AUTOMATION.ENABLE が使えます。このプロシージャの引数は自動化が作成されているアプリケーションID と自動化の静的ID です。そのため、上記のSELECT文で検索された値を引数としてAPEX_AUTOMATION.ENABLEを呼び出すことで、自動化をアクティブにできそうです。
APEXアプリケーションを作成し、上記の処理を実装してみます。
アプリケーション作成ウィザード を起動し、空のアプリケーションを作成します。名前 を自動化親アプリ とします。
アプリケーションの作成 をクリックします。
アプリケーションが作成されたら、自動化の作成を行います。
共有コンポーネント の自動化 を開きます。
作成済みの自動化が一覧されます。作成 をクリックします。
名前 は自動有効化 とします。タイプ はスケジュール済 (翻訳がいまひとつです。定期実行または繰り返し実行のことです。)、アクションの開始 に問合せ を選択します。実行スケジュール は、この中で一番短い15分ごと を選択します。
次 へ進みます。
データ・ソース は
ローカル・データベース 、
ソース・タイプ として
SQL問合せ を選択し、
SQL SELECT文を入力 に、アクティブに変更する自動化を検索する
SELECT文を記述 します。
アクションの実行時間 (これも翻訳が今ひとつです。アクションが実行されるタイミングです。)として
行が返される を選択します。
以上で作成 をクリックします。
自動化が作成されます。
最初にアクションの実行 のセクションを変更します。
アクションの実行時間 は行が返される のままです。主キー列 としてAUTOMATION_ID(Number) を選択します。設定ミスなどがあり自動化が大量に実行されることを防ぐため、処理する最大行数 に1 、アクションのエラーの処理 に自動化の無効化 を選択します。動作の確認ができたら、より緩やかな設定に変更します。
アクション にデフォルトで作成されている新規アクション を編集します。
アクション の名前 を自動化をアクティブにする に変更し、コード からはAPEX_AUTOMATION.ENABLE を呼び出します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin
apex_automation.log_info('自動化親アプリ APPLICATION_ID = ' || :APPLICATION_ID || ' STATIC_ID = ' || :STATIC_ID);
apex_automation.enable(:APPLICATION_ID, :STATIC_ID);
end;
以上で自動化の作成は完了です。
スケジュール・ステータス をアクティブ にし、保存して実行 します。
実行ログは、自動化 の実行ログ より確認できます。
動作確認のために別にAPEXアプリケーションを作成し、自動化を作成します。静的ID はauto-enable-test とします。スケジュール・ステータス は無効 にします。
特にAlways Freeのインスタンスを使用している場合ですが、OCPUに限りがあるので無駄に自動化が動かないよう、一日に一度など少ない実行間隔にしておきます。
アプリケーション・ビルダーには複数のアプリケーションの自動化の状態を一度に確認する画面は無いみたいなので、以下のSELECT文により動作を確認します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select
application_name
,name
,static_id
,polling_status_code
,polling_last_run_timestamp at time zone 'Asia/Tokyo'
,polling_next_run_timestamp at time zone 'Asia/Tokyo'
from apex_appl_automations;
POLLING_STATUS_CODEがDISABLEDだった自動化がACTIVEに変わっていたら、期待通りに動作していると言えます。
自動化以外なにもないですが、アプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/enable-automation-by-automation.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完