拡張SQL
概要¶
拡張SQLは、プリザンターがデータベースに対して発行するSQL処理を、プログラミングによってカスタマイズする機能です。
- レコードの作成前、更新後などのデータ反映時のタイミングで任意のSQLを追加、実行することができる
-
リンクサーバ(SQL Server)またはDBリンク(PostgreSQL)を利用することで、別システムのデータベースに対してSQLを実行できる
-
プリザンター内で発生するイベントに対して、対象をWhere句やOrderBy句で制御できる
- APIから呼び出して実行できる
拡張SQLの実行¶
拡張SQLは、SQLにプリザンターへの登録に必要な情報を添え、JSON形式のパラメータファイルとして専用のフォルダへ配置することで登録できます。
登録した任意の拡張SQLを実行する方法は2つに大別できます。
- プリザンター内で発生するイベントに紐付けして実行する方法
- 任意のタイミングで、サーバスクリプトまたはAPIから呼び出して実行する方法
このページでは前者の実行方法について説明します。後者の方法の詳細は、以下の各ページを確認してください。
サーバスクリプト¶
API¶
注意事項¶
- 本機能を誤って使用するとプリザンターを利用できなくなったり、プリザンター内のデータを壊してしまったりする可能性があります。
- 十分な検証、テストを経たうえで利用してください。
- APIキーやセッションによるログイン確認は行いますが、テーブルの権限確認は行いません。SQL内で確認が必要です。
制限事項¶
- 拡張SQLで使用するJSONファイル、SQLファイルの更新は、プリザンターの再起動後に反映されます。
- セキュリティ上の理由により、拡張SQLはWeb画面からは設定できません。
拡張SQLの設定方法¶
本マニュアルに従ってプリザンターをセットアップしている場合、以下の手順で設定できます。
- C:\web\pleasanter\Implem.Pleasanter\App_Data\Parameters\ExtendedSqls配下に以下の内容を含むJSONファイルを作成し、プリザンターを再起動してください。
- ファイルの拡張子は必ず「.json」としてください。
- ExtendedSqls\配下はフォルダで階層化できます。この場合、配下のすべてのJSONファイルが設定ファイルとして読み込まれます。
JSONファイルのパラメータ¶
基本設定¶
| パラメータ名 | 設定例 | 説明 |
|---|---|---|
| Name | Sample | APIから実行する際の識別名です。 |
| Description | "このSQLは...を実行します" | 拡張SQLの説明文です。省略可。 |
| Disabled | false | trueの場合、無効化され動作しません。 |
| CommandText | "update [Issues] set ..." | 実行するSQLを記述します。※詳細説明 |
実行対象の絞り込み¶
以下のパラメータは、いずれも省略可能です。
| パラメータ名 | 設定例 | 説明 |
|---|---|---|
| DeptIdList | [1,2,3] | 対象とする組織IDを配列形式で指定します。 |
| GroupIdList | [1,2,3] | 対象とするグループIDを配列形式で指定します。 |
| UserIdList | [1,2,3] | 対象とするユーザIDを配列形式で指定します。 |
| SiteIdList | [1,2,3] | 対象とするサイトのサイトIDを配列形式で指定します。 |
| IdList | [1,2,3] | 対象とするレコードのIDを配列形式で指定します。 |
イベントトリガー¶
以下のパラメータは、実行タイミングを制御するイベントトリガーです。
| パラメータ名 | 設定値 | 説明 |
|---|---|---|
| OnCreating | false | trueの場合、レコード作成前に実行する。 |
| OnCreated | false | trueの場合、レコード作成後に実行する。 |
| OnUpdating | false | trueの場合、レコード更新前に実行する。 |
| OnUpdated | false | trueの場合、レコード更新後に実行する。 |
| OnDeleting | false | trueの場合、レコード削除前に実行する。 |
| OnDeleted | false | trueの場合、レコード削除後に実行する。 |
| OnBulkDeleting | false | trueの場合、レコード一括削除前に実行する。 |
| OnBulkDeleted | false | trueの場合、レコード一括削除後に実行する。 |
| OnImporting | false | trueの場合、レコードインポート前に実行する。 |
| OnImported | false | trueの場合、レコードインポート後に実行する。 |
| OnUseSecondaryAuthentication | false | trueの場合、二段階認証前に実行する。 |
動的制御¶
| パラメータ名 | 設定例 | 説明 |
|---|---|---|
| OnSelectingColumn | false | trueの場合、一覧画面および編集画面に表示する項目の内容を動的に取得するためのSQLを追加します。 |
| ColumnList | ["ClassA"] | OnSelectingColumnを使用する際に対象となるデータベースのカラム名を指定します。 |
| OnSelectingWhere | false | trueの場合、一覧画面および編集画面に表示するレコードを限定するためのWhere句を追加します |
| OnSelectingWhereParams | ["ExtendedFieldName"] | 指定した拡張フィールドに値が入力されたとき、OnSelectingWhereへ値をパラメータとして追加します。 ※拡張フィールドのNameの値を指定 |
| OnSelectingWherePermissionsDepts | false | trueの場合、アクセス制御の選択肢一覧に表示するDeptsテーブルのレコードを限定するWhere句を追加します。 |
| OnSelectingWherePermissionsGroups | false | trueの場合、アクセス制御の選択肢一覧に表示するGroupsテーブルのレコードを限定するWhere句を追加します。 |
| OnSelectingWherePermissionsUsers | false | trueの場合、アクセス制御の選択肢一覧に表示するUsersテーブルのレコードを限定するWhere句を追加します。 |
| OnSelectingOrderBy | false | trueの場合、一覧画面に表示するレコードを並び替えるためのOrderBy句を追加します。 |
| OnSelectingOrderByParams | ["ExtendedFieldName"] | 指定した拡張フィールドに値が入力されたとき、OnSelectingOrderByへ値をパラメータとして追加します。 ※拡張フィールドのNameの値を指定 |
API連携¶
| パラメータ名 | 設定例 | 説明 |
|---|---|---|
| Api | false | trueの場合、APIから拡張SQLを実行できます。また、サーバスクリプトのextendedSqlオブジェクトからも実行可能となります。 |
| DbUser | "Owner" | APIから拡張SQLを実行するDBユーザを指定します。省略時は"User"で実行します。APIから実行する場合のみ有効となります。 |
| Html | false | trueの場合、HTMLのinputタグにhiddenタイプとして取得した値を格納します。 |
CommandTextの詳細¶
CommandText内では、以下の変数とプレースホルダーを利用できます。
変数¶
| 説明 | SQL Server | PostgreSQL | OnUseSecondaryAuthentication がtrueの場合の使用 |
|---|---|---|---|
| テナントID | @_T @TenantId | @ipT @TenantId | 不可 可 |
| 実行ユーザの組織ID | @_D | @ipD | 不可 |
| 実行ユーザのユーザID | @_U @UserId | @ipU @UserId | 不可 可 |
プレースホルダー¶
イベントトリガーOnUseSecondaryAuthenticationをtrueに設定した場合は、利用できません。
| プレースホルダー | 設定例 | 説明 |
|---|---|---|
| {{SiteId}} | 2 | サイトIDに置換されます。 |
| {{Id}} | 10 | レコードのIDに置換されます。 |
| {{Timestamp}} | 20171106 09:00:00.000 | フォームから投入されたレコード更新前のタイムスタンプに置換されます。OnUpdatingの場合のみ使用できます。レコードの更新競合のチェックに利用できます。 |
外部ファイル化¶
CommandTextの内容を外部ファイルにまとめ、インポートできます。
JSONファイルの「拡張子を含むファイル名」に「拡張子.sqlを追加」したSQLファイルを作成し、JSONファイルと同じディレクトリに配置してください。
例:sample.jsonのCommandTextを外部ファイル化する場合¶
ストアドプロシージャの実行¶
拡張SQLからストアドプロシージャを実行する場合には「Implem.Pleasanter_User」にEXECUTE権限を付与してください。
リンクサーバー¶
データベースにSQL Serverを利用している場合は、リンクサーバー機能を使用し、外部のデータベースとの入出力が可能です。
サンプルコード¶
➊ サイトID:2のレコードが更新された際にCommandTextのSQLを実行
以下のサンプルコードでは、サイトID:2のレコードが更新された際にCommandTextのSQLが実行されます。
JSON¶
➋ Users.Bodyに"NOLIST"が設定されているユーザを選択肢一覧から除外
以下のサンプルコードでは、Users.Bodyに"NOLIST"が設定されているユーザを選択肢一覧から除外します。
JSON¶
{
: 省略
"OnSelectingWherePermissionsUsers": true,
"CommandText": "(\"Users\".\"Body\" is null or \"Users\".\"Body\"<>'NOLIST')"
}
CommandTextにはWhere句の条件式のみを記述してください(キーワードWhere自体は不要です)。
実行イメージ¶
▼任意のレコードにおいて説明項目(Body)にNOLISTと入力



