https://apex.oracle.com/ja/platform/features/whats-new-241/
ビルダー拡張機能の強化ビルダー拡張機能はOracle APEXとしてはまったく新しい機構なので、上記の説明を読んでも全体を掴むことは難しいです。
ワークスペースは、同じインスタンス上の他のワークスペースで呼び出すことができるAPEXビルダー拡張機能をホストするように構成できます。呼出し側ワークスペースがビルダー拡張機能に対して読取りアクセス権を付与している場合、拡張機能はAPEXディクショナリ・ビューで呼出し側ワークスペースのメタデータを参照できます。
拡張機能アプリケーション
これらのアプリケーションは、再度サインインすることなく現在のビルダー・セッションから開くことができ、ワークスペースのアプリケーション・メタデータに対するインサイトが提供されます。
パブリッシュとサブスクライブ
拡張機能メニューを使用して拡張機能アプリケーションをパブリッシュし、拡張機能ワークスペースの拡張機能メニューにワークスペースをサブスクライブするか、パブリッシュされた拡張機能を呼び出します。
新しいAPI
ビルダー拡張機能アプリケーションの新しいAPIでは、拡張機能ワークスペースでワークスペースのアプリケーション・メタデータにアクセスできます。
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など、もっと制限してもよいかもしれません。
ユーザーの作成をクリックし、ユーザーTOOLSが作成されたら、SQL Developer Webでの作業は完了です。
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を開きます。
コンポーネントの可用性(原文はAvaliability)の拡張機能のホストを許可をはいに変更します。
変更の適用をクリックします。
ワークスペースTOOLSの拡張機能がはいに変更されたことを確認します。
以上でビルダー拡張機能のためのワークスペースの準備は完了です。
ワークスペースTOOLSにサインインし、ビルダー拡張機能としてアプリケーションSample Page Listを作成します。
ワークスペースTOOLSにユーザーADMINでサインインします。
ビルダー拡張機能が有効になっていても、ワークスペース自体は通常のものと変わりません。
共有コンポーネントの認証スキームを開きます。
作成済みの認証スキームが一覧されます。作成をクリックします。
スキームの作成としてギャラリからの事前構成済スキームに基づくを選択します。
次へ進みます。
作成する認証スキームのスキーム・タイプとしてビルダー拡張機能サインインを選択し、名前は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で、再度アプリケーションにアクセスしてみます。
この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に値は設定されません。
ナビゲーション・バーにある拡張機能のアイコンをクリックします。
拡張機能のToolsのPage Listを実行します。
新しいタブでアプリケーションSample Page Listが実行されます。
アプリケーションとして、拡張機能を呼び出した時に開かれていたアプリケーションが正しく選択されていることが確認できます。
結果として、ビルダー拡張機能としてのアプリケーションは1つだけ作成すれば良くなっています。
今回の記事は以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完