2023年5月12日金曜日

パッケージAPEX_APPLICATION_ADMINを使ってアプリケーション別名を入れ替える

 Oracle APEX 23.1よりパッケージAPEX_APPLICATION_ADMINが追加されました。このパッケージにはいわゆるアプリーション定義の取得と変更を行うプロシージャが含まれています。

アプリケーションの別名を設定するプロシージャSET_APPLICATION_ALIASを呼び出し、2つのアプリケーションの別名を入れ替えることによって、アクセスするアプリケーションを変更するAPEXアプリケーションを作成してみます。

アプリケーション定義は、以下の画面にまとまっています。パッケージAPEX_APPLICATION_ADMINは別名以外に、可用性グローバル通知を変更するプロシージャも含んでいます。


入れ替えのテストに使用する、2つのほとんど同じアプリケーションを作成します。

サンプル・データセットに含まれる表EMPからアプリケーションを作成します。

オブジェクト・ブラウザより表EMPを選択し、その他アプリケーションの作成を実行します。


アプリケーションの名前Employees Mainとします。単にアプリケーションができればよいので、そのままアプリケーションの作成を実行します。


アプリケーションが作成されたら、共有コンポーネント認証スキームを開きます。

デフォルトで作成されている認証スキームOracle APEXアカウント - カレントを開きます。


アプリケーションの入れ替え後、再度ログインが要求されない(セッションが継続する)ように、セッション共有を設定します。

タイプカスタムCookie名SESSION_EMPLOEE_APP(セッションを共有するアプリケーション間で同じCookie名であればよい)を指定します。サイトが暗号化されている場合はセキュアオンにします。


このアプリケーションをコピーして、入れ替えるアプリケーションを作成します。

このアプリケーションのコピーは、画面右のタスクより実行します。


新規アプリケーション名Employees Subに変更します。

へ進みます。


アプリケーションのコピーを実行します。


アプリケーションのコピーが完了したら、アプリケーションが入れ替わったことがすぐに確認できるよう、テーマ・スタイルを変更します。

アプリケーション定義ユーザー・インターフェースを開きます。属性テーマ・スタイルをVitaからVita - Redに変更します。


以上で入れ替えに使用する2つのアプリケーションが準備できました。

アプリケーションの入れ替えを行うAPEXアプリケーションを作成します。

アプリケーション作成ウィザードを開始し、空のアプリケーションを作成します。

アプリケーションの名前アプリケーションの入れ替えとします。


アプリケーションが作成されます。

最初に入れ替えるアプリケーションの選択に使用する、LOV共有コンポーネントとして作成します。

共有コンポーネントLOVを開き、作成を開始します。


LOVの作成最初からとします。

へ進みます。


名前LOV_APPLICATIONSとします。タイプDynamicです。

へ進みます。


LOVソースソース・タイプとしてローカル・データベースSQL問合せを選択します。SQL SELECT文を入力として以下を記述します。

select application_id, alias, application_name from apex_applications

へ進みます。


戻り列としてAPPLICATION_ID表示列としてAPPLICATION_NAMEを選択します。

作成をクリックします。


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ラベルアプリケーションの入れ替えとします。動作アクションはデフォルトのページの送信です。


ボタンが画面幅いっぱいに広がるよう、テンプレート・オプション詳細WidthStretchに変更します。


一旦ページを実行し、画面の表示を確認します。


プロセス・ビューを開き、実際にアプリケーションの入れ替えを行うプロセスを作成します。

ボタン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のアプリケーション作成の参考になれば幸いです。