2024年8月19日月曜日

HighchartsをOracle APEXのアプリケーションに組み込む

Highchartsを、Oracle APEXのアプリケーションに組み込んでみます。

Oracle JETやその他のチャート描画ライブラリの組み込み作業で表示したチャートと、同じチャートを表示してみます。HighchartsはSVGを使ってチャートを描画するため、ESモジュールを使用します。


直接Highchartsで描画


 
Highcharts file serviceにアクセスし、ページの一番下のECMASCRIPT MODULESを確認します。


HighchartsをESモジュールとして読み込むURLは以下でした。

https://code.highcharts.com/es-modules/masters/highcharts.src.js

スクリプトにESモジュールのURLを直書きする代わりに、別名を指定できるようにします。

ページ・プロパティHTMLヘッダーimportmapを記述します。Highchartsは、別名highchartsを指定してインポートできるようになります。
<script type="importmap">
    {
        "imports": {
            "highcharts": "https://code.highcharts.com/es-modules/masters/highcharts.src.js"
        }
    }
</script>


チャートに描画するデータを保持するページ・アイテムとしてP1_GROUPSP1_VALUEを作成します。タイプ非表示です。

ページ・アイテムP1_GROUPS計算を作成し、ページの描画前にデータを設定します。計算タイプとしてSQL問合せ(単一の値を返す)を選択し、SQL問合せに以下を記述します。
select
    json_arrayagg(
        ename
    order by empno asc )
from emp where deptno = 10

ページ・アイテムP1_VALUEにも計算を作成し、ページ描画前に値を設定します。SQL問合せに以下を記述します。
select
    json_arrayagg(
        sal
    order by empno asc )
from emp where deptno = 10

静的コンテンツのリージョンの名前Highchartsとし、ソースHTMLコードに以下を記述します。


以上で実装は完了です。ページを実行すると以下のように表示されます。



対話モード・レポートへの組み込み



対話モード・レポートのページのページ・プロパティHTMLヘッダーに、先ほどと同じimportmapを記述します。


対話モード・レポートソースSQL問合せとして以下を記述します。
select
    dname,
    json_arrayagg(
        ename
    order by empno asc ) groups,
    json_arrayagg(
        sal
    order by empno asc) value,
    '' chart
from emp_dept_v group by dname


対話モード・レポートの列CHARTを選択します。識別タイププレーン・テキストです。

列の書式HTML式として以下を記述します。


以上で実装は完了です。ページを実行すると以下のように表示されます。



テンプレート・コンポーネントの作成



Highchartsのバー・チャートをテンプレート・コンポーネントとして作成します。カスタム要素は作成しません。

テンプレート・コンポーネントの名前Highchats Bar Chartとしました。テンプレート部分には以下を記述しています。



カスタム属性としてCSS Classes、GroupsValueColorOrientationWidthHeightを作成しています。GroupsValueタイプセッション・ステート値ColorテキストWidthHeightは両方とも整数です。


チャートの向きの指定であるOrientation静的LOVは、horizontalの戻り値としてbarverticalの戻り値としてcolumnを設定します。


以上でテンプレート・コンポーネントは完成です。

このテンプレート・コンポーネントを使用するページでは、HTMLヘッダーimportmapを記述する必要があります。

対話モード・レポートにHighchartsのテンプレート・コンポーネントを実装します。

対話モード・レポートの列CHARTを選択し、識別タイプHighcharts Bar Chartに変更します。

設定CSS Classesw400GroupsGROUPSValueVALUEColor#309fdbOrientationhorizontalを設定します。Width400Height200を設定します。


以上で実装は完了です。ページを実行すると以下のように表示されます。


今回の記事は以上になります。

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

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