一.概要
1.バージョン
帳票サーババージョン | 機能変動 |
11.0 | - |
2.期待される効果
「関数による動的列の実現」の帳票では、すべてのデータを取得する必要があり、その後動的列帳票を実現します。データ量が多く、選択された列があまり多くない場合、パフォーマンスが低下することがあります。
本文では別の動的列の作成方法を紹介します。この方法は、データ量が多い場合に「階層帳票の改ページクエリ」を実現でき、それにより帳票のパフォーマンスを向上させることができます。次の図に示すように:
3.実現の考え方
データセット変数を定義することで、表示する列を直接選択し、データ列をセルにドロップするだけで完了します。
二.例
1.データの準備
一般帳票を新規作成します。
1)新しいデータベースクエリds1を作成し、SQL文は次の通りです:SELECT ${col} FROM 販売量。データセット変数「col」を設定し、既定値は文字列型の「*」とし、つまりすべてのデータをクエリすることができます。次の図に示すように:

2)新しいデータベースクエリds2を作成し、SQL文は次の通りです:SELECT * FROM 販売量 limit 1。1件のデータをクエリすることで、テーブル内のすべてのフィールド名を取得します。次の図に示すように:
2.帳票のデザイン
2.1テーブルスタイルのデザイン
ユーザが選択するフィールドの数が不確定なため、テンプレートを作成する際にはすべての5つのフィールドをドロップする必要があります。
1)ヘッダ行
セルA1からセルE1までに数式を挿入し、$col変数を配列に変換します。セルA1からセルE1まではそれぞれ配列内の1番目から5番目までの値を返します。
数式の内容は以下の表の通りです:
セル | 数式 | 数式の説明 |
A1 | INDEXOFARRAY(split($col,","),1) | INDEXOFARRAY(array,index):配列arrayのindex番目の要素を返す。 SPLIT(String1,String2):String2で String1を分割してできる文字列配列を返す。 変数$colの既定値は文字列型であるため、正しい値を返すにはまず配列に変換する必要がある。 |
B1 | INDEXOFARRAY(split($col,","),2) | |
C1 | INDEXOFARRAY(split($col,","),3) | |
D1 | INDEXOFARRAY(split($col,","),4) | |
E1 | INDEXOFARRAY(split($col,","),5) |
操作手順は次の図に示すように:

2)テーブルの内容
セルA2からセルE2までに[データ列]を挿入します。[データセット]としてds1を選択し、[データ列]にそれぞれ #1、#2、#3、#4、#5 を入力します。[データ設定]は[一覧]、[展開方向]は[縦方向]とします。次の図のようになります:
注意:「#数字」はデータの対応する列番号を表し、#1は1列目のデータを表します。
2.2帳票枠線の設定
それぞれセルA2からセルE2までを選択し、右側の[条件属性]をクリックします。[条件の追加]をクリックし、「枠属性」を[外枠]に設定します。[数式条件]の[タイプ]を[数式]に選択し、数式内容は次の通りです:len($$$)!=0。つまり、セルにデータが存在する場合に枠線を表示するようになります。次の図に示すように:
2.3ヘッダ行背景の設定
セルA1からセルE1までに[条件属性]を追加します。「背景属性」を選択し、「青色」に設定します。また、「枠属性」を選択し、[外枠]に設定します。[数式条件]の[タイプ]を[数式]に選択し、数式内容は次の通りです:len($$$)!=0。つまり、セルにデータがある場合に背景と枠線を表示するようになります。操作手順は第2.2節と同じで、設定画面は次の図に示すように:
3.変数の設定
[変数パネル]をクリックし、[すべて追加]をクリックします。[変数パネル]に選択可能なウィジェットが表示され、[プルダウンチェックボックスウィジェット]を選択します。 次の図に示すように:
[プルダウンチェックボックスウィジェット]を選択します。[ウィジェット値]のタイプを[文字列]に設定し、既定値を空白に設定します。[データ辞書]のタイプを[数式]に設定し、[実際値]にTABLEDATAFIELDS(\"ds2\")という数式を入力します。次の図に示すように:
注意:[変数パネル]内の[プルダウンチェックボックスウィジェット]の既定値は必ず空白にする必要があります。そうしないとすべての列を取得できません。
4.クリックイベントの設定
変数が空白の場合、[クエリ]ボタンをクリックすると、既定で全ての列がクエリされます。
[変数パネル]の[クエリ]ボタンをクリックし、[クリックイベント]を新規追加します。変数aを設定し、その値には数式 TABLEDATAFIELDS("ds2") を指定し、全てのフィールド名を取得します。そして JavaScript コードを追加します。次の図に示すように:
JavaScriptコード次の通りです:
var Widget = this.options.form.getWidgetByName("col");
var value = Widget.getValue(); //ウィジェットの[実際値]を取得する
if(value==''||value==null){
/*[変数パネル]内の[テキスト]ウィジェットを取得し、判断後に値を代入する*/
Widget.setValue(a);
_g().parameterCommit();
}
5.効果プレビュー
1)PC端末
[改ページプレビュー]をクリックします。一部の対応するデータ列を選択し、[クエリ]をクリックすると、選択した列のデータが表示されます。効果は次の図の通りです:
2)モバイル端末
APP端末とHTML5端末の両方はサポートされています。効果は次の図に示すように: