2024年10月2日水曜日

Oracle APEX 24.1のビルダー拡張機能となるサンプル・アプリケーションを実装する

Oracle APEX 24.1よりビルダー拡張機能の強化として、以下の新機能が追加されています。

https://apex.oracle.com/ja/platform/features/whats-new-241/
ビルダー拡張機能の強化

ワークスペースは、同じインスタンス上の他のワークスペースで呼び出すことができるAPEXビルダー拡張機能をホストするように構成できます。呼出し側ワークスペースがビルダー拡張機能に対して読取りアクセス権を付与している場合、拡張機能はAPEXディクショナリ・ビューで呼出し側ワークスペースのメタデータを参照できます。

拡張機能アプリケーション
これらのアプリケーションは、再度サインインすることなく現在のビルダー・セッションから開くことができ、ワークスペースのアプリケーション・メタデータに対するインサイトが提供されます。

パブリッシュとサブスクライブ
拡張機能メニューを使用して拡張機能アプリケーションをパブリッシュし、拡張機能ワークスペースの拡張機能メニューにワークスペースをサブスクライブするか、パブリッシュされた拡張機能を呼び出します。

新しいAPI
ビルダー拡張機能アプリケーションの新しいAPIでは、拡張機能ワークスペースでワークスペースのアプリケーション・メタデータにアクセスできます。
ビルダー拡張機能はOracle APEXとしてはまったく新しい機構なので、上記の説明を読んでも全体を掴むことは難しいです。

Oracle APEX Office HoursのWhat's new in Oracle APEX 24.1 - Part 3にて、この機能の開発者であるChristian Rokittaさんが、Oracle APEX 24.1のビルダー拡張機能について解説されています。


本記事では、Christian Rokittaさんの説明を元に、Always FreeのAutonomous DatabaseのAPEXにビルダー拡張機能を作成します。作成するビルダー拡張機能は、選択したアプリケーションに含まれるページを一覧する、簡単なAPEXアプリケーションです。


最初にビルダー拡張機能となる、ワークスペースに含まれるアプリケーションを選択し、そのアプリケーションに含まれるページを一覧するアプリケーションを作成します。

アプリケーションの名前Sample Page Listとし、空のアプリケーションを作成します。


アプリケーションが作成されたら、ページ・デザイナホーム・ページを開きます。

最初に、ページを一覧する対象とするアプリケーションを選択するページ・アイテムを作成します。

識別名前P1_APPLICATIONタイプ選択リストラベルApplicationとします。設定選択時のページ・アクションとして値のリダイレクトと設定を選択します。この設定を行なうと値を切り替えるたびに警告が表示されます。その警告を抑止するために、詳細保存されていない変更の警告無視にします。

LOVタイプSQL問合せを選択し、SQL問合せとして以下を記述します。

select application_name d, application_id r from apex_applications

追加値の表示オフNULL値の表示オンです。

セッション・ステートストレージリクエストごと(メモリーのみ)とします。


選択したアプリケーションに含まれるページを一覧する、対話モード・レポートのリージョンを作成します。

識別名前Pagesタイプ対話モード・レポートです。

ソース表名APEX_APPLICATION_PAGESを指定し、WHERE句としてapplication_id = :P1_APPLICATIONを記述します。

ビューAPEX_APPLICATION_PAGESから、指定したAPEXアプリケーションのページに関するメタデータを一覧します。


以上でアプリケーションは完成です。

アプリケーションを実行し、ページを一覧するアプリケーションとしてSample Page Listを選択してみます。


簡単なアプリケーションですが、アプリケーションに含まれるページのメタデータを参照することができます。このアプリケーションは後でビルダー拡張機能として、新たに作成したワークスペースにインストールします。ここで一旦、アプリケーションのエクスポートを取っておくと後の作業を減らすことができます。

APEXがインストールされたインスタンス上に複数のAPEXワークスペースが作成されている場合、このSample Page Listのアプリケーションを呼び出すには、それぞれのワークスペースに同じアプリケーションをインストールする必要があります。

Oracle APEX 24.1のビルダー拡張機能は、このような独自作成した開発支援アプリケーション(今回の例ではSample Page List)を独立したワークスペースにインストールし、そのアプリケーションをそれぞれのワークスペースから拡張機能として呼び出すことにより、アプリケーションのインストールをひとつにするものです。

これからビルダー拡張機能として、開発支援アプリケーションをインストールするワークスペースを作成します。

Autonomous Database上のAPEXの場合、管理ツールからワークスペースを作成すると、作成されるスキーマ名にWKSP_という接頭辞が付けられます。一般のAPEXアプリケーション開発向けのスキーマであればそれでも良いのですが、ビルダー拡張機能のスキーマは特別なスキーマになるため、WKSP_という接頭辞が付かないように事前にスキーマを作成します。

SQL Developer WebにユーザーADMINで接続し、APEXワークスペースに紐づけるスキーマを作成します。

データベース・ユーザーを開き、ユーザーの作成をクリックします。


ユーザー名TOOLSとします。SQLclなどから直接データベース・ユーザーTOOLSで接続する際に使用するパスワードを設定します。APEXは、ここで設定するパスワードは使用しません。表領域の割当て制限 DATA(表領域DATAへの割り当て制限)としてUNLIMITEDを選択します。このスキーマには開発支援のためのデータのみを含むことから、1Gなど、もっと制限してもよいかもしれません。


付与されたロールのタブを開き、APEX_ADMINISTRATOR_ROLE付与済チェックをいれます。ロールCONNECTRESOURCEについては、デフォルトでチェックが入ります。


ユーザーの作成をクリックし、ユーザーTOOLSが作成されたら、SQL Developer Webでの作業は完了です。


APEXで使用することを前提とするとパスワードは不要なので、以下のSQLによりデータベース・ユーザーTOOLSを作成できます。
create user tools default tablespace data temporary tablespace temp no authentication quota unlimited on data;
grant connect, resource, apex_administrator_role to tools;

APEXの管理サービスにサインインし、ワークスペースTOOLSを作成します。

ワークスペースの作成をクリックします。


既存のスキーマを選択します。


データベース・ユーザーとして先ほど作成したTOOLSを選択します。ワークスペース名はデフォルトでTOOLSになります。

ワークスペース・ユーザー名ADMINとします。Autonomous DatabaseのAPEXでは、開発ツールへのサインインでは(デフォルトでは)データベース・ユーザーによる認証が行われるため、ADMINを指定するとAutonomous Databaseの管理ユーザーであるADMINとしてユーザーが認証されます。ADMINとは別にしたい場合は、ADMIN以外のユーザーを指定します。

データベースに指定したユーザーが存在しない場合、データベース・ユーザーは新規に作成されます。ワークスペース・パスワードはデータベース・ユーザーのパスワードとワークスペース・ユーザーのパスワードになります。すでにデータベース・ユーザーが存在する場合は、そのユーザーのパスワードは変更されません。その場合、新規に作成されたワークスペース・ユーザー(ワークスペースに作成したAPEXアプリケーションのサインインに使用されるユーザー)の作成とパスワードの設定のみが実施されます。

ワークスペースの作成を実行します。


ワークスペースTOOLSが作成されます。

作成したワークスペースTOOLSビルダー拡張機能に利用するための設定を行います。

ワークスペースの管理を開きます。


既存のワークスペースを開きます。


作成済みのワークスペースが一覧されます。新規に作成したワークスペースTOOLSが一覧に含まれていて、拡張機能いいえになっていることが確認できます。

ワークスペースTOOLSを開きます。


コンポーネントの可用性(原文はAvaliability)の拡張機能のホストを許可はいに変更します。

変更の適用をクリックします。


ワークスペースTOOLS拡張機能はいに変更されたことを確認します。


以上でビルダー拡張機能のためのワークスペースの準備は完了です。

ワークスペースTOOLSにサインインし、ビルダー拡張機能としてアプリケーションSample Page Listを作成します。

ワークスペースTOOLSにユーザーADMINサインインします。


ビルダー拡張機能が有効になっていても、ワークスペース自体は通常のものと変わりません。


アプリケーションSample Page Listを作成します。すでに説明済みの手順は省略します。アプリケーションのエクスポートがある場合は、それをインポートした後からの作業になります。


ビルダー拡張機能として使用するAPEXアプリケーションは、認証スキームビルダー拡張機能サインインとする必要があります。

共有コンポーネント認証スキームを開きます。


作成済みの認証スキームが一覧されます。作成をクリックします。


スキームの作成としてギャラリからの事前構成済スキームに基づくを選択します。

へ進みます。


作成する認証スキームのスキーム・タイプとしてビルダー拡張機能サインインを選択し、名前Builder Extension Sign-Inとします。

認証スキームの作成をクリックします。


認証スキームとしてBuilder Extension Sign-Inが作成されます。この時点ではカレント・スキームになっていません。


認証スキームBuilder Extension Sign-Inを開き、カレント・スキームに切り替えます。

カレント・スキームにするをクリックします。

確認のポップアップが開くので、OKをクリックします。


ビルダー拡張機能サインインカレントの認証スキームとなります。


以上で認証スキームの準備は完了です。

拡張機能となるアプリケーションのホーム・ページに、この拡張機能の呼び出し元のワークスペースを表示するページ・アイテムを追加します。

識別名前P1_WORKSPACEタイプテキスト・フィールドラベルWorkspaceとします。

呼び出し元のワークスペースは、APEX_EXTENSION.GET_GRANTOR_WORKSPACEを呼び出すことにより取得します。パッケージAPEX_EXTENSIONは、Oracle APEX 24.1で新規に追加されたパッケージです。

ソースタイプSQL問合せ(単一の値を返す)を選択し、SQL問合せとして、以下を記述します。

select apex_extension.get_grantor_workspace from sys.dual

セッション・ステートストレージリクエストごと(メモリーのみ)とします。


この状態で一旦アプリケーションを実行します。

ビルダー拡張機能としては、このページに作成中のSample Page ListのアプリケーションIDをページ・アイテムP1_APPLICATIONに直接渡して開きます。URLに&p1_application=<アプケーションID>を付与して、ページを開いてみます。

アプリケーションIDはそれぞれの環境で異なった値になります。


以下のようなエラーが発生するはずです。


ビルダー拡張機能であっても、APEXアプリケーションのページ保護は同様に適用されています。直リンクでのページ呼び出しやパラメータへの値設定を行なうためには、ページ・プロパティセキュリティの設定変更が必要です。

ページ・プロパティセキュリティディープ・リンク有効にし、ページ・アクセス保護制限なしにします。

変更を保存します。


先ほどエラーになったURLで、再度アプリケーションにアクセスしてみます。


今度はエラーが発生せず、アプリケーションSample Page Listに含まれるページが一覧されます。

このURLのホスト名以下は、拡張リンクURLとして設定するためコピーをとって置きます。

以上で、アプリケーションSample Page Listビルダー拡張機能として呼び出せるようになりました。

この拡張機能を呼び出す拡張リンクを設定します。

管理メニューのサービスの管理拡張リンクの管理を開きます。


拡張リンクの設定画面が開きます。

行の追加をクリックします。


他のワークスペースから呼び出せる拡張リンクを設定します。

ラベルPage Listとします。URLは概ね以下のようになります。引数sessionに渡すセッションIDには置換文字列&APP_SESSION_ID.、引数p1_applicationに渡すアプリケーションIDには置換文字列&EXT_APP_ID.を割り当てます。

/ords/r/tools/sample-page-list/home?session=&APP_SESSION_ID.&p1_application=&EXT_APP_ID.

パブリックはいに変更し、保存します。


今回使用したAPP_SESSION_IDおよびEXT_APP_IDといった置換文字列については、対話グリッドの列URLのヘルプに説明があります。

列URLのヘッダーをクリックしダイアログを表示させます。?アイコンがあるので、それをクリックします。


拡張リンクのオンライン・ヘルプが開きます。


以上でビルダー拡張機能となるアプリケーションの作成と、その機能を呼び出すための拡張リンクの設定が完了しました。

ビルダー拡張機能の呼び出しは、ページの指定は必須ではありません。以下のようにアプリケーションのみを指定し、そのアプリケーションのホーム・ページを開くといった指定もできます。この場合、ページ・プロパティのセキュリティに関する設定を変更する必要はありません。アプリケーションの認証はセッションIDで行われるため、引数sessionの値は必須です。

/ords/r/tools/sample-page-list?session=&APP_SESSION_ID.

最後に、通常のAPEXアプリケーションの開発を行っているワークスペースより、ビルダー拡張機能を呼び出せるように設定します。

開発用のAPEXワークスペースにサインインし、先ほどと同様に管理メニューのサービスの管理拡張リンクの管理を開きます。


サブスクリプション・タブを開き、サブスクリプションの追加をクリックします。


拡張機能ワークスペースとしてTOOLSを選択します。読取りアクセス権ありオンにします。

サブスクライブをクリックします。


以上でワークスペースTOOLSに設定した拡張リンクを、このワークスペースから呼び出すことができるようになりました。


アプリケーション・ビルダーから適当なアプリケーションを選択して開きます。

拡張リンクが設定されているため、ナビゲーション・バーの左に拡張機能のアイコンが表示されます。今回作成した拡張機能Page Listは、引数としてEXT_APP_IDを渡しています。そのため、アプリケーション・ビルダーでアプリケーションが開かれている必要があります。アプリケーションを開いていない場合は、EXT_APP_IDに値は設定されません。

ナビゲーション・バーにある拡張機能のアイコンをクリックします。


拡張機能のToolsPage Listを実行します。


新しいタブでアプリケーションSample Page Listが実行されます。

アプリケーションとして、拡張機能を呼び出した時に開かれていたアプリケーションが正しく選択されていることが確認できます。


他のAPEXワークスペースでも、ビルダー拡張機能のワークスペースTOOLSの拡張リンクをサブスクライブすることにより、ワークスペースTOOLSに作成されたAPEXアプリケーションを呼び出すことができます。

結果として、ビルダー拡張機能としてのアプリケーションは1つだけ作成すれば良くなっています。

今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。