Oracle APEX 23.1よりパッケージAPEX_APPLICATION_ADMINが追加されました。このパッケージにはいわゆるアプリーション定義の取得と変更を行うプロシージャが含まれています。
アプリケーションの別名を設定するプロシージャSET_APPLICATION_ALIASを呼び出し、2つのアプリケーションの別名を入れ替えることによって、アクセスするアプリケーションを変更するAPEXアプリケーションを作成してみます。
アプリケーション定義は、以下の画面にまとまっています。パッケージAPEX_APPLICATION_ADMINは別名以外に、可用性やグローバル通知を変更するプロシージャも含んでいます。
サンプル・データセットに含まれる表EMPからアプリケーションを作成します。
オブジェクト・ブラウザより表EMPを選択し、その他のアプリケーションの作成を実行します。
アプリケーションの名前をEmployees Mainとします。単にアプリケーションができればよいので、そのままアプリケーションの作成を実行します。
アプリケーションが作成されたら、共有コンポーネントの認証スキームを開きます。
デフォルトで作成されている認証スキームOracle APEXアカウント - カレントを開きます。
アプリケーションの入れ替え後、再度ログインが要求されない(セッションが継続する)ように、セッション共有を設定します。
タイプをカスタム、Cookie名にSESSION_EMPLOEE_APP(セッションを共有するアプリケーション間で同じCookie名であればよい)を指定します。サイトが暗号化されている場合はセキュアをオンにします。
このアプリケーションをコピーして、入れ替えるアプリケーションを作成します。
このアプリケーションのコピーは、画面右のタスクより実行します。
次へ進みます。
アプリケーションのコピーが完了したら、アプリケーションが入れ替わったことがすぐに確認できるよう、テーマ・スタイルを変更します。
アプリケーション定義のユーザー・インターフェースを開きます。属性のテーマ・スタイルをVitaからVita - Redに変更します。
以上で入れ替えに使用する2つのアプリケーションが準備できました。
アプリケーションの入れ替えを行うAPEXアプリケーションを作成します。
アプリケーション作成ウィザードを開始し、空のアプリケーションを作成します。
アプリケーションの名前はアプリケーションの入れ替えとします。
アプリケーションが作成されます。
最初に入れ替えるアプリケーションの選択に使用する、LOVを共有コンポーネントとして作成します。
共有コンポーネントのLOVを開き、作成を開始します。
LOVの作成は最初からとします。
次へ進みます。
名前はLOV_APPLICATIONSとします。タイプはDynamicです。
次へ進みます。
select application_id, alias, application_name from apex_applications
次へ進みます。
作成をクリックします。
LOVLOV_APPLICATIONSが作成されます。列ALIASを追加列とするため、編集画面を開きます。
追加表示列のセクションにある列の選択をクリックします。
ALIAS(Varchar2)をシャトルの右側に移動し、更新します。
APPLICATION_IDのヘッダーにIDを設定し、表示可能をNoからYesに変更します。
変更の適用をクリックします。
以上で、共有コンポーネントのLOVの作成は完了です。
ホーム・ページにアプリケーションを入れ替えるインターフェースを実装します。
Body以下にリージョンを作成します。識別のタイトルは左、タイプは静的コンテンツです。
識別の名前はP1_APP_L、タイプとしてポップアップLOVを選択します。ラベルはアプリケーションとします。
追加出力としてALIAS:P1_ALIAS_Lを入力します。別名を保持するページ・アイテムP1_ALIAS_Lは、この後に作成します。
LOVのタイプとして共有コンポーネントを選択し、LOVとして先ほど作成したLOV_APPLICATIONSを選びます。
選択されたアプリケーションの別名を保持するページ・アイテムを作成します。
識別の名前をP1_ALIAS_L、タイプはテキスト・フィールド、ラベルは別名とします。
リージョンのタイトルは右、アプリケーションを選択するページ・アイテムの名前はP1_APP_R、追加出力はALIAS:P1_ALIAS_R、別名を保持するページ・アイテムの名前はP1_ALIAS_Rに変わります。
左右のリージョンが横並びになるよう、リージョン右のレイアウトの新規行の開始をオフに変更します。
アプリケーションの入れ替えを実行するボタンを作成します。
識別のボタン名はSWAP、ラベルはアプリケーションの入れ替えとします。動作のアクションはデフォルトのページの送信です。
ボタンが画面幅いっぱいに広がるよう、テンプレート・オプションの詳細のWidthをStretchに変更します。
一旦ページを実行し、画面の表示を確認します。
プロセス・ビューを開き、実際にアプリケーションの入れ替えを行うプロセスを作成します。
ボタンSWAPをクリックしたときに実行されるプロセスをまとめるため、最初に実行チェーンを作成します。
プロセスを作成します。識別の名前をSWAPのクリック...とし、タイプとして実行チェーンを選択します。設定のバックグラウンドで実行はオフです。
サーバー側の条件のボタン押下時としてSWAPを選択します。
作成した実行チェーンSWAPのクリック...に子プロセスを追加します。
識別の名前はアプリケーションの入れ替え、タイプはコードを実行とします。実行チェーンはSWAPのクリック...になります。ソースのPL/SQLコードとして以下を記述します。
プロセスをもうひとつ作成します。
識別の名前をクリア、タイプとしてセッション・ステートのクリアを選択します。アプリケーションが入れ替わると、左と右として選択しているアプリケーションのアプリケーションIDと名前の紐付けが変わります。そして、LOVとしてキャッシュされている内容が無効になります。
そのため、セッション・ステートをクリアして、アプリケーションを未選択の状態へ戻します。
最後にアプリケーション定義のセキュリティを開き、詳細のランタイムAPIの使用状況を変更します。
アプリケーションから管理APIを実行するため、他のアプリケーションを変更にチェックを入れます。
アプリケーションを実行すると、記事の先頭のGIF動画のように動作します。
ビルド・ステータス、可用性、認証スキーム、パーシング・スキーマ、アプリケーション名、アプリケーション・バージョン、ビルド・オプションなどもプロシージャ呼び出しで変更できるようになっています。
APEXアプリケーションの運用の自動化が、とても容易になりました。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/swap-app.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完