2023年9月8日金曜日

JETチャートを各種レポートに組み込む

Oracle APEXに含まれていないOracle JETのチャートを、クラシック・レポート、対話モード・レポート、対話グリッドおよびカードに組み込んでみます。

JET Picto Chartをサンプルに使用します。APEXアプリケーションは、こちらの記事で作成したJET without Knockoutのアプリケーションに、それぞれのレポートのページを追加します。

最初にクラシック・レポートのページを作成します。


JET Picto Chartを組み込むページには、ページ・プロパティに以下を設定します。

JavaScriptファイルURLとして以下を設定します。

[require jet]

JavaScriptページ・ロード時に実行に以下を設定します。

require(["ojs/ojpictochart"], function() {});

CSSファイルURLに以下を設定します。

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

CSSインラインに以下を設定します。

.oj-dvt-datatip-value {
    display: none;
}


クラシック・レポートのソースSQL問合せとして、以下のSELECT文を記述します。列TEMPERATURESにJET Picto Chartのitemsに与えるJSON形式のデータが返されます。


TEMPERATURESタイププレーン・テキスト列の書式HTML式として以下を記述します。


クラシック・レポート属性を開き、ページ区切り部分ページ・リフレッシュオフにします。クラシック・レポートにJETチャートを表示する場合、この設定は必須です


以上で、クラシック・レポートにJETチャートを表示することができます。

続いて対話モード・レポートのページを作成します。


ソースSQL問合せはクラシック・レポートと同じです。


TEMPERATURESタイプ列の書式HTML式も、クラシック・レポートと同じです。


対話モード・レポートでは、属性パフォーマンス遅延ロードオフにします。JETチャートの描画は非同期に行われるため、遅延ロードがオンだとJETチャートが表示されません。


しかし、対話モード・レポートで遅延ロードオフにすることで抑止される処理はレポートの初回表示時のみです。ページ送りによるレポートの描画は必ず遅延ロードが適用されます。結果として、ページ送りをしたときはJETチャートが表示されません。

対話モード・レポートのリフレッシュ後に、ページのリロードを実行することが、ワークアラウンドのひとつです。

対話モード・レポートに動的アクションを作成します。

タイミングイベントリフレッシュ後を選択します。


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

location.reload(false);


以上で、対話モード・レポートでJETチャートが表示されるようになります。

JETチャートが非同期で表示される点については、そのJETチャートをラップするWebコンポーネントを作成することにより対応可能です。Oracle CorporationにてAPEXを開発しているRonny Weißさんがドイツで開かれたカンファレンスAPEXConnect 2023にて、その実装を紹介されています。この実装については、また別の機会にまとめたいと思います。

対話グリッドではクラシック・レポートや対話モード・レポートとは異なり、遅延ロードの設定に関わらずJETチャートは表示されます。


対話グリッドのソースSQL問合せは以下になります。

チャートのデータとなる列とチャートを表示する列を別にする必要があるため、これまでのレポートのソースSQLに列CHARTを追加しています。


TEMPERATURES属性タイプ非表示に変更します。


CHART識別タイプHTML式に変更し、ヘッダーは(非表示にした列TEMPERATURESの代わりに)Temperatures設定HTML式として以下を記述します。

置換文字列として#TEMPERATURES#の代わりに&TEMPERATURES.を使います。


以上で、対話グリッドでJETチャートが表示されるようになります。

最後に、カード・リージョンでJETチャートを表示します。


カード・リージョンのソースSQL問合せは、クラシック・レポートおよび対話モード・レポートと同じです。


カードの属性を開きます。

タイトルとしてCITY_NAMEサブタイトルとしてMONTHを選択します。本体拡張フォーマットオンに変更し、HTML式に対話グリッドで使用した式を記述します。


カード・リージョンも対話グリッドと同様に、遅延ロードの設定に関わらずJETチャートは表示されます。

各種レポートやカード・リージョンへのJETチャートの組み込みについての説明は以上です。

今回作成したレポートやカードのページは、APEXアプリケーションJET with Knockoutに追加しています。
https://github.com/ujnak/apexapps/blob/master/exports/jet-without-knockout.zip

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