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


ボタンが画面幅いっぱいに広がるよう、テンプレート・オプションの詳細の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のアプリケーション作成の参考になれば幸いです。

完