以下のスクリプトを実行し、Genson-jsのESモジュールからOracle Database 23aiのMLEモジュールを作成します。
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
/* | |
* genson-js 0.0.8 より MLE Module ESM_GENSON_JS_0_0_8 を作成する。 | |
*/ | |
create or replace mle module ESM_GENSON_JS_0_0_8 | |
language javascript | |
version '0.0.8' | |
using clob | |
( | |
select | |
apex_web_service.make_rest_request( | |
p_url => 'https://cdn.jsdelivr.net/npm/genson-js@0.0.8/+esm' | |
,p_http_method => 'GET' | |
) | |
) | |
; | |
/* | |
* genson-jsを呼び出す際に使用するMLE環境を作成する。 | |
*/ | |
create or replace mle env JSONENV | |
imports ('/npm/genson-js@0.0.8/+esm' module ESM_GENSON_JS_0_0_8) | |
; |
SQLワークショップのSQLスクリプトとして実行するか、(SQLコマンドでは1行ごとでしか実行できないため)1行ごとにSQLコマンドで実行します。
最初にMLEモジュールESM_GENSON_JS_0_0_8を作成します。
モジュールESM_GENSON_JS_0_0_8を含むMLE環境JSONENVを作成します。
SQLコマンドで以下を実行し動作を確認します。SQLコマンドの言語としてJavaScript(MLE)を選択し、環境に先ほど作成したJSONENVを指定します。
const Genson = await import('/npm/genson-js@0.0.8/+esm');
const jsonData = {
"firstName": "Sakura",
"age": 35
};
const schema = Genson.createSchema(
jsonData
);
console.log(JSON.stringify(schema, null, 2));
スクリプトを実行してJSONスキーマが出力されれば、Genson-jsは正しくMLEモジュールとして作成されています。
アプリケーション作成ウィザードを起動します。作成するアプリケーションの名前はJSON Schema Generator by Genson-jsとします。
ページの追加をクリックし、ページ名をCreate Schemaとした空白のページとMerge Schemasとした空白のページを追加します。
以上で、アプリケーションの作成を実行します。
アプリケーションが作成されます。アプリケーションはCreate SchemaとMerge Schemasのページを含みます。
このアプリケーションからGenson-jsを呼び出すために、MLE環境として作成したJSONENVを紐づけます。
アプリケーション定義のセキュリティを開き、データベース・セッションのMLE環境に、JSONENVを設定します。
以上の設定で、このアプリケーション内でGensos-jsを呼び出すことができるようになります。
Create Schemaのページを開き、JSONデータからJSONスキーマを生成する機能を実装します。
JSONデータを入力するページ・アイテムとしてP2_JSON_DATAを作成します。タイプはテキスト領域です。続いて、JSONデータからJSONスキーマを生成するボタンCREATE_JSON_SCHEMAを作成します。動作のアクションはページの送信です。生成したJSONスキーマを保存するページ・アイテムとしてP2_JSON_SCHEMAを作成します。タイプはテキスト領域です。
ボタンCREATE_JSON_SCHEMAを押した時に実行されるプロセスを作成します。
識別の名前はCreate JSON Schemaとします。タイプはコードを実行です。ソースの言語にJavaScript(MLE)を選択し、JavaScriptコードとして以下を記述します。
const Genson = await import('/npm/genson-js@0.0.8/+esm');
const jsonData = JSON.parse(apex.env.P2_JSON_DATA);
const schema = Genson.createSchema(
jsonData
);
apex.env.P2_JSON_SCHEMA = JSON.stringify(schema, null, 2);
サーバー側の条件のボタン押下時にCREATE_JSON_SCHEMAを指定します。
以上でCreate Schemaのページは完成です。ページを実行すると以下のように動作します。
Merge Schemasのページを開き、JSONスキーマをマージする機能を実装します。
JSONスキーマを入力するページ・アイテムとしてP3_JSON_SCHEMA_1とP3_JSON_SCHEMA_2を作成します。Genson_jsのファンクションmergeSchemaの引数はマージするJSONスキーマの配列を受け付けるため、2つ以上のJSONスキーマを一度にマージすることができます。ただし、このページでは2つに限定しています。
JSONスキーマをマージするボタンMERGE_JSON_SCHEMAを作成します。動作のアクションはページの送信です。生成したJSONスキーマを保存するページ・アイテムとしてP3_JSON_SCHEMAを作成します。
ボタンMERGE_JSON_SCHEMAを押した時に実行されるプロセスを作成します。
識別の名前はMerge JSON Schemaとします。タイプはコードを実行です。ソースの言語にJavaScript(MLE)を選択し、JavaScriptコードとして以下を記述します。
const Genson = await import('/npm/genson-js@0.0.8/+esm');
const jsonSchema1 = JSON.parse(apex.env.P3_JSON_SCHEMA_1);
const jsonSchema2 = JSON.parse(apex.env.P3_JSON_SCHEMA_2);
const schema = Genson.mergeSchemas(
[ jsonSchema1, jsonSchema2 ]
);
apex.env.P3_JSON_SCHEMA = JSON.stringify(schema, null, 2);
以上でMerge Schemaのページは完成です。ページを実行すると以下のように動作します。
以上でアプリケーションは完成です。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/json-schema-generator-by-genson-js.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完