2023年9月4日月曜日

Oracle JETのoj-bind-if要素をOracle APEXで扱う

Oracle JET Cookbookに記載されているoj-bind-ifのサンプルをOracle APEXで実装してみます。

作成されたアプリケーションは以下のように動作します。


実装の元にしたoj-bind-ifのサンプルは、Oracle JET Cookbookの以下のページです。


Oracle APEXのアプリケーションでは、Oracle JETでのアバターの状態をOracle APEXに取り込む実装と、アバターの表示のオン/オフをAPEX側から切り替える実装を追加しています。

JETのdemo-containerに含まれているアバターの状態を取り出すボタンBUTTON_VALUEと、アバターの状態を表示するページ・アイテムP1_BUTTON_VALUEを作成しています。また、APEX側から切り替えを行なうページ・アイテムP1_SWITCHを作成しています。

以下より実装手順を紹介します。

アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。名前JET Bind Ifとします。今回の実装ではデータベースのデータは参照せず、HTMLとJavaScriptだけの実装です。そのためOracle JET Cookbookのサンプルを、あまり変更せずに利用できます。


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

最初にBreadcrumb BarにあるリージョンJET Bind If削除します。


Body以下にリージョンを新規作成します。

識別タイトルFor Eachタイプとして静的コンテンツを選択します。ソースHTMLコードとして以下を記述します。これはOracle JET Cookbookのdemo.htmlのdemo-container要素を抜き出したものです。

oj-avatarsrcとなるURLをAPEXから参照できるよう絶対パスにしているのと、shape="square"を追加しています。(oj-avatarのshapeのデフォルトはsquareですが、なぜかcircleで表示されます。)

外観テンプレートとしてBlank with Attributes (No Grid)を選択します。


ページ・プロパティJavaScriptファイルURLに以下を記述します。

[require jet]

ファンクションおよびグローバル変数の宣言に以下を記述します。

var view;

ページ・ロード時に実行に以下を記述します。

CSSファイルURLに以下を記述します。

#JET_CSS_DIRECTORY#redwood/oj-redwood-notag-min.css


この状態でアプリケーションを実行すると、Oracle JET Cookbookの状態まで実装できていることが確認できます。


アバターの表示はOn/Offのボタンの値buttonValueより確認できます。この値を取り出しページ・アイテムに設定するボタンを作成します。

ボタンBUTTON_VALUEを作成します。ラベルButton Value動作アクションとして動的アクションで定義を選択します。


ボタンの状態を設定するページ・アイテムP1_BUTTON_VALUEを作成します。タイプテキスト・フィールドラベルButton Valueとします。


ボタンBUTTON_VALUEに動的アクションを作成します。

識別名前onClick BUTTON_VALUEタイミングイベントはデフォルトのクリックです。


TRUEアクションとして値の設定を選択します。設定タイプの設定としてJavaScript Expressionを選択し、JavaScript式として以下を記述します。

view.buttonValue()

影響を受ける要素選択タイプとしてアイテムを選び、アイテムとしてP1_BUTTON_VALUEを設定します。

APEXのボタンやアイテムの初期化時にはまだOracle JETの初期化は終わっていないことから、実行初期化時に実行オフにします。


アバターの表示を切り替えるページ・アイテムを作成します。

識別名前P1_SWITCHタイプとして切替えを選択します。ラベルSwitch設定デフォルトの使用オフにし、オン値onオン・ラベルオンオフ値offオフ・ラベルオフを指定します。


ページ・アイテムP1_SWITCHに動的アクションを作成します。

識別名前onChange SWTCHタイミングイベントはページ・アイテムのデフォルトである変更です。


TRUEアクションとしてJavaScriptコードの実行を選択し、設定コードとして以下を記述します。

view.buttonValue($v(this.triggeringElement));


以上でアプリケーションは完成です。アプリケーションを実行すると、記事の先頭のGIF動画のように動作します。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/jet-bind-if.zip

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