サンプル・データセットのEMP/DEPTに含まれる表EMPをクラシック・レポートで表示します。
アプリケーションの作成を実行します。
ページの作成を実行します。
クラシック・レポートを含むページが作成されます。
クラシック・レポートのリージョンを選択し、プロパティ・エディタの属性タブを開きます。外観のテンプレートとしてStandardが選択されていることが分かります。
テンプレートの定義は共有コンポーネントのテンプレートに含まれています。
レポート・テンプレートのテンプレートStandardは、汎用列(列テンプレート)というタイプです。
ページ・デザイナからテンプレート・オプションとして指定できるCSSクラスが定義されています。
行の前として、レポートの先頭に出力されるHTMLが定義されています。
列テンプレートが定義されています。汎用列の場合、置換文字列#COLUMN_VALUE#が列の値に置き換えられます。
列テンプレートの条件を指定することにより、最大4つの列テンプレートに切り替えることができます。
各行の後として</tr>が定義されています。
行の後として、レポートの末尾に出力されるHTMLが定義されています。
ページ送りの表示を除けば、上記の設定でHTMLのTABLE要素が完成します。
Oracle APEXが提供する装飾を除いた、単純なTABLE要素を生成するテンプレートを作成します。
テンプレート一覧より作成をクリックします。
テンプレート・タイプとしてレポートを選択します。
通常は既存のテンプレートのコピーを修正して新しいテンプレートを作る方が容易です。今回は仕組みを説明するためにテンプレートを作成するため、レポート・テンプレートの作成に最初からを選択します。
次へ進みます。
新しく作成するテンプレートの名前はSimple Table 1とします。テンプレート・タイプとして汎用列(列テンプレート)を選択します。
テーマは42. Universal Themeです。テンプレート・クラスは標準を選択します。Oracle APEX 5.0以前は複数のテーマがサポートされていたため、この選択肢が残っています。最近のOracle APEXのテーマはUniversal Themeのみであるため、この選択肢にそれほど意味はありません。
作成をクリックします。
レポート・テンプレートとしてSimple Table 1が作成されます。
作成したテンプレートSimple Table 1を開き、HTMLのTABLEを表示するための最低限の設定を行います。説明を簡単にするため、ページ送りの表示は除きます。
行の前は<table>です。
列ヘッダーの前は<thead>、列ヘッダー・テンプレートは<th>#COLUMN_HEADER#</th>、列ヘッダーの後は</thead><tbody>です。
各行の前は<tr>です。
列テンプレートは<td>#COLUMN_VALUE#</td>です。列テンプレートの条件を使用することにより、列のデータを参照してテンプレートを切り替えたり、偶数行と奇数行で適用するテンプレートを切り替えることができます。
Oracle APEX 23.1で導入されたテンプレート・コンポーネントでは、テンプレート・ディレクティブを使って表示形式を切り替えることができるようになりました。そのため、最大4つのテンプレートしか切り替えれらないという制限は無くなりました。
各行の後は</tr>です。
行の後は</tbody></table>です。
以上で(ページ送りを除いて)表EMPの内容を、最も単純な形でHTMLのTABLE要素として表示できるようになりました。
先ほど作成したStandardテンプレートを使ったページをコピーし、レポート・テンプレートとして今回作成したSimple Table 1を適用します。ページ区切りのタイプはページ区切りなし(すべての行の表示)に変更します。
表示する列を全て選択し、ソート可能をオフにします。ソート可能がオンの場合、置換文字列COLUMN_HEADERにソートを適用するためのHTMLタグが追加されます。
上記の変更を行い、表EMPのレポートを表示します。
出力されたHTMLを確認すると、定義したテンプレートに表EMPの値が埋め込まれたHTMLが、ほぼそのまま出力されていることが確認できます。
例えば、列テンプレート1の定義のstyleとしてmin-width: 400pxを与えてみます。
<td style="min-width: 400px">#COLUMN_VALUE#</td>
レポートの表示は以下のように、TD要素のstyleとしてmin-width: 400pxが適用された表示に変わります。
Oracle APEXは、定義されたテンプレートにデータを穴埋めしてHTMLを出力します。そのため、テンプレート定義を変更すると表示形式を自由に変更できます。ただし、標準のテンプレートでのCSSクラスの割り当てを変更すると、表示がレスポンシブ(デバイスやブラウザの表示領域の大きさに従って自動的にレイアウトを調整する)で無くなる可能性が高くなります。
先ほど作成したレポート・テンプレートのタイプは汎用列(列テンプレート)でした。
同じHTMLを生成するレポート・テンプレートを、もう一つのタイプ名前付き列(行テンプレート)で作成してみます。
先ほどと同様にテンプレートの作成を開始します。
今回は名前をSimple Table 2、テンプレート・タイプとして名前付き列(行テンプレート)を選択します。
作成をクリックします。
テンプレート・タイプが名前付き列(行テンプレート)の場合は、行テンプレート1として、以下の1行を記述します。
<tr><td>#ENAME#</td><td>#JOB#</td><td>#MGR#</td><td>#HIREDATE#</td><td>#SAL#</td><td>#COMM#</td><td>#DEPTNO#</td></tr>
最初の行の前と最後の行の後のテキストとして以下を記述します。
行の前です。
<table>
<thead>
<tr><th>ENAME</th><th>JOB</th><th>MGR</th><th>HIREDATE</th><th>SAL</th><th>COMM</th><th>DEPTNO</th></tr>
</thead>
<tbody>
行の後です。
</tbody>
</table>
作成したレポート・テンプレートをクラシック・レポートに適用すると、以下の表示になります。
名前付き列のテンプレートはテンプレートに列名が埋め込まれていることにより、汎用列のテンプレートのようにデータ・ソースの定義を選ばない用途では使えません。
名前付き列の場合は汎用列とは異なり、一行の単位で書式を決めることができます。簡単な例では、列ENAMEだけmin-width: 400pxを適用するといったことが可能です。列テンプレートの条件を設定する必要はありません。
<tr><td style="min-width: 400px">#ENAME#</td><td>#JOB#</td><td>#MGR#</td><td>#HIREDATE#</td><td>#SAL#</td><td>#COMM#</td><td>#DEPTNO#</td></tr>
Oracle APEX 23.1の新機能として、テンプレート・コンポーネントが追加されています。テンプレート・コンポーネントは、レポート・テンプレートの名前付き列(行テンプレート)の汎用性の無さを解消しています。
同じ出力を行うテンプレート・コンポーネントを作成します。
テンプレート・コンポーネントは共有コンポーネントのプラグインに含まれます。
作成をクリックします。
プラグインの作成として最初からを選択します。
次へ進みます。
作成するプラグインの名前はSimple Table TCとします。タイプとしてテンプレート・コンポーネントを選択します。レポートで使用するため、テンプレートの次として使用可能の複数(レポート)にチェックを入れます。
テンプレートの部分に以下を記述します。今回は遅延ロードの対応は含めません。
<td>#ENAME#</td><td>#JOB#</td><td>#MGR#</td><td>#HIREDATE#</td><td>#SAL#</td><td>#COMM#</td><td>#DEPTNO#</td>
レポート本文に以下を記述します。#APEX$ROWS#は、次に記述するレポート行が複数生成されたデータに置換されます。
レポート本文に以下を記述します。#APEX$ROWS#は、次に記述するレポート行が複数生成されたデータに置換されます。
<table>
<thead>
<tr>
<th>ENAME</th><th>JOB</th><th>MGR</th><th>HIREDATE</th><th>SAL</th><th>COMM</th><th>DEPTNO</th>
</tr>
</thead>
<tbody>
#APEX$ROWS#
</tbody>
</table>
レポート行に以下を記述します。#APEX$PARTIAL#は部分に置換されます。
<tr #APEX$ROW_IDENTIFICATION#>#APEX$PARTIAL#</tr>
テンプレートの部分に含まれている置換文字列より、カスタム属性が設定されています。
Hiredateを開き、設定を変更します。
今回は設定のデータ型を日付にします。
変更の適用をクリックします。
作成したテンプレート・コンポーネントSimple Table TCを使って、レポートを表示します。
テンプレート・コンポーネントを使用する場合は、リージョンの識別のタイプとしてSimple Table TCを設定します。
プロパティ・エディタの属性タブを開き、設定に属性と列のマッピングを設定します。レポート・テンプレートとは異なり、テンプレート内の置換文字列と列名が一致している必要はありません。遅延ロードの処理をテンプレート・コンポーネントに記載していないため、これはオフにします。
作成したページを実行すると、ほぼ同じ表示になります。
名前付き列(行テンプレート)と同様に、テンプレートの部分を以下のように書き換えると、レポートの表示が変わります。
<td style="min-width: 400px;">#ENAME#</td><td>#JOB#</td><td>#MGR#</td><td>#HIREDATE#</td><td>#SAL#</td><td>#COMM#</td><td>#DEPTNO#</td>
Oracle APEXのテンプレート処理の紹介は以上になります。
今回作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-apex-templating.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完