コンテンツにスキップ

view.AddColumnPlaceholder

概要

viewオブジェクトの「AddColumnPlaceholderメソッド」です。サーバスクリプトで拡張SQLのOnSelectingWhereのプレースホルダに動的なカラム名を指定する際に使用します。

制限事項

  1. カラム名以外の文字列を指定することはできません。

構文

view.AddColumnPlaceholder(placeholder, columnName);

パラメータ

No パラメータ 型 必須 概要
1 placeholder string ○ プレースホルダ
2 columnName string ○ カラム名

戻り値

戻り値はありません。

使用例

以下の例では、ユーザID 3 以外のユーザに Name が SelectingWhereName の拡張SQLを適用します。また、SQL内にある {{DynamicColumn}} のプレースホルダ文字列を ClassA に置換して実行します。

拡張SQL
1
2
3
4
5
6
{
    "Name": "SelectingWhereName",
    "SpecifyByName": true,
    "OnSelectingWhere": true,
    "CommandText": "(\"Results\".\"Status\"=900 and \"Results\".\"ClassB\"={{DynamicColumn}})"
}
JavaScript
1
2
3
4
if (context.UserId !== 3) {
    view.OnSelectingWhere = 'SelectingWhereName';
    view.AddColumnPlaceholder('DynamicColumn', 'ClassA');
}

サンプルコード

Note

コード内の【 ... 】は適宜修正してください。

1. ビューごとに、比べる2つの項目を拡張SQLに差し込んで絞る

「左の項目 > 右の項目」の拡張SQL「ColumnGreaterThan」を1つ置き、選んだビューに応じて、比べる項目をview.AddColumnPlaceholderで差し込みます。「予定超過」ビューでは実績工数 > 予定工数、「納期遅れ」ビューでは実績完了日 > 期限のタスクに絞ります。

実務での使いどころ

一覧のフィルタでは、項目どうしを比べる条件は作れません。比べ方が同じで項目のみ違う条件ごとに拡張SQLを書くと、ファイルが増え、変えるたびにプリザンターの再起動が要ります。項目をサーバスクリプトから差し込めば、拡張SQLは1つのまま、ビューを足すときはサーバスクリプトの定数を足すのみで済みます。

事前準備

1:プリザンターのサーバのApp_Data/Parameters/ExtendedSqlsの下に、下記の拡張SQLのJSONファイルを置き、プリザンターを再起動してください(拡張SQL)。拡張SQLは、画面からは設定できません。

JSON(ExtendedSqls/ColumnGreaterThan.json)
{
    "Name": "ColumnGreaterThan",
    "Description": "左の項目が右の項目より大きいレコード。項目はサーバスクリプトの view.AddColumnPlaceholder で指定する",
    "SpecifyByName": true,
    "OnSelectingWhere": true,
    "CommandText": "({{LeftColumn}} > {{RightColumn}})"
}

2:「タスク管理」テーブル(期限付きテーブル)で、以下の項目を有効化してください。

項目コード 内容
数値A(NumA) 実績工数
数値B(NumB) 予定工数
日付A(DateA) 実績完了日
日付B(DateB) 期限

3:「ビュー」タブで「予定超過」ビューと「納期遅れ」ビューを作成し、ビューのIDを控えてください。

4:サーバスクリプトを登録します。

4-1:「テーブルの管理 > サーバスクリプト」タブで「新規作成」を選択する。
 4-2:タイトル: 任意の名前(例:compareColumnsByView)
 4-3:スクリプト: 下記サンプルコードを貼り付け、【 】を3で控えたビューのIDにする
 4-4:条件: 「ビュー処理時」にチェック

JavaScript
// ビューごとに、比べる2つの項目(左の項目が右の項目より大きいレコードを出す)
// ビューのIDは、テーブルの管理の「ビュー」タブで確かめる
const COMPARISONS = {
    【「予定超過」ビューのID】: ['NumA', 'NumB'],            // 実績工数 > 予定工数
    【「納期遅れ」ビューのID】: ['DateA', 'DateB'],  // 実績完了日 > 期限
};

// 選んだビューに比べる項目があれば、拡張SQL「ColumnGreaterThan」の
// {{LeftColumn}}・{{RightColumn}} をその項目に置き換えて絞り込む
const pair = COMPARISONS[view.Id];
if (pair) {
    view.OnSelectingWhere = 'ColumnGreaterThan';
    view.AddColumnPlaceholder('LeftColumn', pair[0]);
    view.AddColumnPlaceholder('RightColumn', pair[1]);
}

注記

  • {{LeftColumn}}・{{RightColumn}}は、"Issues"."NumA"のようにテーブル名を付けた項目に置き換わります(PostgreSQLの場合)。拡張SQLの中でもテーブル名を付けると、SQLが正しくなくなり、エラーが返ります。
  • 置き換えられるのは項目名(カラム名)のみです。値を差し込むことはできません。
  • SpecifyByNameをtrueにした拡張SQLは、view.OnSelectingWhereで名前を指定したときのみ当たります。拡張SQLのJSONを変えたときは、プリザンターの再起動が必要です。

対応バージョン

対応バージョン 内容
1.2.2.0 以降 機能追加

関連情報