Oracle APEX 21.1よりサンプル・アプリケーションはGitHubでホストされるようになり、ギャラリから直接インストールすることができなくなりました。Oracle APEX 22.1では、この状況が改善され、サンプル・アプリケーションはギャラリから直接インストールできるようになっています。
サンプル・アプリケーションは変わらずGitHubにあるため、実際にはAPEXの画面から、GitHub上にあるエクスポートされたAPEXアプリケーションのダウンロードとインストールを行なっています。
この新機能に関連して、ユーザーが作成したアプリケーションをカスタム・アプリケーションとしてギャラリに登録できる ようになっています。カスタム・アプリケーションも標準のサンプル・アプリケーションと同様に、ギャラリから直接インストールすることができます。
Oracle APEX 22.1の新しいギャラリについて、この機能を開発したDaniel Hochleitnerさんが、AskTOM Office HourのNew in APEX 22.1 (Part 3): Ed. Improvements, REST Enabled SQL Queries , and easy App Gallery Internals で解説しています。また、カスタム・アプリケーションの登録方法は、Oracle APEX Administration Guideの3.5.8.2.3 Install Custom Apps in the Gallery で説明されています。
Office Hourとマニュアルの両方とも、カスタム・アプリケーションを登録するにはmanifest.jsonというファイルを作成し、JSON形式で登録するアプリケーションの情報を記載する、という手順になっています。
手作業でmanifest.jsonを作成するのは手間なので、manifest.jsonを生成するアプリケーションを作成することにしました。
以下より、APEXアプリケーションとREST APIの作成手順を紹介します。アプリケーションはapex.oracle.com上に作成します。
一番最初に、カスタム・アプリケーションの情報を保持する表を作成します。
SQLワークショップ のユーティリティ のクイックSQL を使います。
以下のモデルを与えて、表GALLARY_CUSTOM_APPS とGALLERY_CUSTOM_APPS_LANG を作成します。
# prefix: gallery
# auditcols: true
custom_apps
internal_name vc80 /nn /unique /upper
author vc160 /nn
version vc20 /nn
icon vc400
url vc400
source vc400
zip vc400 /nn
license vc80
apex_version vc8
custom_apps_lang
custom_app_id vc80 /nn /fk custom_apps
language vc2 /nn /lower
name vc160 /nn
description vc800
SQLの生成 、SQLスクリプトを保存 、レビューおよび実行 を順次クリックします。
SQLスクリプトの確認画面が表示されるので、
実行 をクリックします。続けて表示される確認のダイアログで
即時実行 をクリックします。
SQLスクリプトが実行され、表、索引、トリガーが作成されます。
アプリケーションの作成は、この画面からは実施しません。
アプリケーション・ビルダー からアプリケーション作成ウィザード を呼び出します。
アプリケーションの名前 はカスタム・アプリケーション管理 とします。ページの追加 をクリックします。
ページのタイプとして、マスター・ディテール を選択します。
ページ名 はカスタム・アプリケーション管理 とします。表示形式には積上げ を選択します。マスター表 としてGALLERY_CUSTOM_APPS 、ディテール表 としてGALLERY_CUSTOM_APPS_LANG を選択します。
ページの追加 をクリックします。
表GALLERY_CUSTOM_APPSとGALLERY_CUSTOM_APPS_LANGの双方を編集できるページが追加されました。
アプリケーションの作成 を実行します。
アプリケーションが作成されました。
追加したページをページ・デザイナ で開き、ビルド・オプション を使って監査列 をすべてコメント・アウト します。両方の表の列CREATED 、CREATED_BY 、UPDATED 、UPDATED_BY が監査列に当たります。これらの列の値はトリガーによって設定し、画面からは操作しません。
以上でアプリケーションは完成です。
今回作成したアプリケーションをギャラリにカスタム・アプリケーションとして登録し、インストールできるようします。
ギャラリからインストールすることを考慮して、表GALLERY_CUSTOM_APPS、GALLERY_CUSTOM_APPS_LANGを、アプリケーションをインストールするときに作成するようにします。
クイックSQLを使って表を作成する際に、生成されたSQLスクリプトを保存しています。SQLワークショップ のSQLスクリプト を開き、保存したSQLスクリプトの鉛筆アイコン をクリックします。
SQLスクリプトの編集画面が開きます。
ダウンロード をクリックし、SQLスクリプトをファイルに落とします。
アプリケーションのサポートするオブジェクト を開きます。
ダウンロードしたファイルをインストール・スクリプトとして登録します。
インストール・スクリプト を開きます。
作成 をクリックします。
スクリプトの作成方法を選択します。ダウンロードしたファイルを使うのでファイルから作成 を選択し、次 に進みます。
名前 を入力します。今回はgallery としています。順序 はデフォルトのままにしておきます。インストール・スクリプトはDDLに限らず、データベースで実行できるスクリプトであれば登録できます。データのローディングなども実行可能です。
複数のインストール・スクリプトがある場合は、順序の指定に従って実行されます。
次 へ進みます。
ファイルとして先ほどダウンロードしたSQLスクリプトのファイルを選択し、スクリプトの作成 をクリックします。
インストール・スクリプトが作成されました。これで、アプリケーションのインストール時に表が作成されます。
サンプルとして活用されるアプリケーションだと、不要になって削除されることも多いでしょう。削除スクリプトを作成しておくと、アプリケーションの削除時に表も削除することができます。
削除スクリプト を開きます。
作成 をクリックします。
最初から作成 を選んで、次 へ進みます。
以下の2行を記述し、作成 をクリックします。外部キー制約が定義されているため、表GALLERY_CUSTOM_APPS_LANGを先にドロップします。
drop table gallery_custom_apps_lang; drop table gallery_custom_apps;
削除スクリプトが登録されました。
サポートするオブジェクトを確認します。サポートするオブジェクト のページを開きます。
インストール・スクリプト と削除スクリプト が、それぞれ1 つづつ作成されていることが確認できます。
アプリケーション定義 を開き、バージョン を確認します。
インストールされたアプリケーションのバージョンと、ギャラリに登録されているアプリケーションのバージョンが異なると、インストール済みのカスタム・アプリケーションがアップグレード可能 と通知されます。
以上の作業を行なったのち、アプリケーションをエクスポートします。
エクスポート/インポート を開きます。
エクスポート を選択し、次 へ進みます。
ギャラリからインストールできるアプリケーションのエクスポート形式はZIPのみ です。そのため、複数のファイルに分割 は必ずON にします。せっかくサポートするオブジェクトも定義しているので、サポートするオブジェクトの定義をエクスポート ははい にします。
その他の設定を調整し、エクスポート を実行します。
fアプリケーションID.zip というファイル名で、アプリケーションがエクスポートされます。
このファイルをGitHubにアップロードします。アップロードしたファイルをダウンロードするためのURLを確認しておきます。今回作成したアプリケーションは、以下のURLからダウンロードできます。
https://raw.githubusercontent.com/ujnak/apexapps/master/exports/gallery-custom-apps.zip
作成したアプリケーションを実行し、カスタム・アプリケーションを登録します。
以下は、今回の入力例です。
Internal Name : GALLERY_CUSTOM_APPS (カスタム・アプリケーションで一意になる文字列を指定します。)
Author : Yuji N (作成者です。)
Version : リリース1.0 (エクスポートしたアプリケーションに定義されているバージョン です。)
Icon : 空白 (表示するアイコンを指定します。)
URL : https://apexugj.blogspot.com/2022/07/gallery-custom-apps.html (詳細情報へのリンクです。)
Source : 空白 (SQL形式のアプリケーションのエクスポートです。アプリケーションのインストールにはZIPが使われるため、どのような場合に参照されるのか不明です。)
Zip : https://raw.githubusercontent.com/ujnak/apexapps/master/exports/gallery-custom-apps.zip (エクスポートされたアプリケーションです。)
License : 空白 (参考情報です。)
Apex Version : 22.1 (APEXのバージョンです。manifest.jsonには含まれません。)
Language : ja (アプリケーション・ビルダーが日本語のときに表示されます。英語であればenです。de、es、fr、it、pt-br、zh-tw、zh-cn、koも指定できます。)
Name : ギャラリへカスタム・アプリケーションを登録する (カスタム・アプリケーションの名前です。)
Description : ギャラリへカスタム・アプリケーションを登録するアプリケーションです。REST APIの実装は含みません。 (カスタム・アプリケーションの説明文です。)
以上を入力し、保存 をクリックします。
登録されたカスタム・アプリケーションの情報を、JSON形式で出力するREST APIを作成します。
SQLワークショップ からRESTfulサービス を呼び出します。
ORDSにスキーマが登録されていない場合は、以下の画面が表示されます。ORDSにスキーマを登録 します。
スキーマ属性 は通常デフォルトから変更する必要はありませんが、
サンプル・サービスのインストール が
ON の場合、RESTfulサービス以外に表EMP、DEPTも作成されます。データベース・オブジェクトが作成されると困る場合は、
サンプル・サービスのインストール は
OFF にします。
スキーマ属性の保存 をクリックします。
RESTfulサービス(REST API)の作成ができるようになりました。
最初にモジュールを作成します。
左のツリーよりモジュール を選択し、モジュールの作成 をクリックします。
モジュール名 、ベース・パス ともにgallery と入力し、モジュールの作成 をクリックします。
モジュールgalleryが作成されました。続いて、テンプレートの作成を実施します。
テンプレートの作成 をクリックします。
URIテンプレート として
apps を入力し、
テンプレートの作成 をクリックします。
URIテンプレートappsが作成されました。最後にハンドラを作成します。
ハンドラの作成 をクリックします。
メソッド としてGET 、ソース・タイプ はMedia Resource を選択します。ソース として以下を記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select 'application/json'
, json_object(key 'customApps' value
json_arrayagg(
json_object(
key 'internalName' value a.internal_name
, key 'author' value a.author
, key 'version' value a.version
, key 'icon' value a.icon
, key 'url' value a.url
, key 'source' value a.source
, key 'zip' value a.zip
, key 'license' value a.license
, key 'i18n' value l.i18n
)
)
format json) as "manifest"
from gallery_custom_apps a join
(
select
custom_app_id
, json_objectagg(
key language
value json_object(
key 'name' value name
, key 'description' value description
)
) as i18n
from gallery_custom_apps_lang group by custom_app_id
) l on a.id = l.custom_app_id
以上を設定して、ハンドラの作成 をクリックします。
Oracle REST Data ServicesのREST APIで生のJSONを出力する方法については、米国オラクルのデータベース・ツール部門に所属しているPMのJeff Smithさんのブログ記事
ORDS: Returning Raw {JSON} を参照しています。
作成したREST APIが返すJSONドキュメントを確認するため、完全なURL をコピーします。
ブラウザに完全なURL を入力し、レスポンスを確認します。
manifest.jsonの定義に従ったJSONドキュメントが返されていることを確認します。
この情報を参照するように、APEXのインスタンス設定を変更します。
APEXの管理サービスにサインインします。
インスタンスの管理 を開きます。
インスタンスの設定 を開きます。
インスタンスの設定 のアプリケーション・ギャラリ のファイルURL として、先ほどの完全なURL を追記します。
変更の適用 をクリックします。
以上で、ギャラリのカスタム・アプリケーションの構成は完了です。
この記事の先頭のGIF動画で行っているように、アプリケーション・ビルダーよりギャラリにアクセスし、カスタム・アプリケーションのインストールや削除ができるようになっています。
Oracle APEXでは、サンプル・アプリケーションを提供するためにギャラリを利用していますが、企業などでの利用では、例えば会社のテーマを実装したアプリケーションや、認証スキーム、認可スキームといった共有コンポーネントが実装済みのアプリケーションを配布することにより、作成するAPEXアプリケーションの標準化を図るといった活用も考えられます。
補足 削除スクリプトの実行は、アプリケーション削除時に選択することができます。アプリケーションの削除時に、インストール時に作成された表が必ず削除されるわけではありません。
ギャラリのゴミ箱アイコンをクリックしたときは、必ず削除スクリプトが実行されます。 要注意です 。
完