2021/07/13

MANUAL

開発者向け機能:拡張機能:拡張SQL

## 概要 標準機能では実現できないデータの更新を可能にするために、レコードの作成時、更新時、削除時等のSQLを拡張します。 ## 注意事項 1. 誤って使用するとプリザンターが利用できなくなったり、データが壊れたりする可能性がありますので、十分なテストを行った上でご利用ください。 1. APIキーやセッションによるログイン確認は行いますが、テーブルへの権限チェックなどが行われないため、SQLの中で実施する必要があります。 ## 制限事項 1. 拡張SQLのJSONファイルやSQLファイルを更新した後は「アプリケーションを再起動」するまで反映しません。 1. セキュリティ上の理由により拡張SQLはWeb画面から設定できません。 ## 対応バージョン #### OnSelectingColumn 1. .NET Core版 1.1.33 以降 1. .NET Framweork版 0.50.257 以降 ## 拡張SQLの設定方法 .¥Pleasanter¥App_Data¥Parameters¥ExtendedSqls¥ 配下に以下の内容を含むjsonファイルを作成し、IISを再起動してください。ファイルの拡張子は必ずjsonにしてください。ExtendedSqls配下はフォルダで階層化する事が可能です。この場合、配下の全てのjsonファイルが設定ファイルとして読み込まれます。 |パラメータ名|値の例|説明| |:--|:--|:--| |Name|例)Sample|APIから実行させる際の名前を設定します。| |Description|例)"このSQLは・・・を実行します"|SQLの説明。動作には影響しません。| |Disabled|例)false|trueの場合は無効化され動作しません。| |Disabled|例)false|trueの場合は無効化され動作しません。| |DeptIdList|例)[1,2,3]|対象となる組織IDを配列形式で指定します。指定しない場合には省略可能です。| |UserIdList|例)[1,2,3]|対象となるユーザIDを配列形式で指定します。指定しない場合には省略可能です。| |SiteIdList|例)[1,2,3]|対象となるサイトのサイトIDを配列形式で指定します。指定しない場合には省略可能です。| |IdList|例)[1,2,3]|対象となるレコードのIDを配列形式で指定します。指定しない場合には省略可能です。| |ColumnList|例)["ClassA"]|OnSelectingColumnを使用する際に対象となる「[データベースのカラム名](/manual/dev-column-name)」を指定します。| |Api|例) false|trueの場合「[APIから拡張SQLを実行](/manual/extended-sql-api)」する事が可能です。また「[サーバスクリプト](/manual/table-management-server-script)」の「[extendedSqlオブジェクト](/manual/sever-script-extended-sql)」から使用可能となります。| |Html|例) false|trueの場合Htmlのinputタグにhiddenタイプとして取得した値を格納します。| |OnCreating|例)false|trueの場合レコード作成前に実行します。| |OnCreated|例)false|trueの場合レコード作成後に実行します。| |OnUpdating|例)false|trueの場合レコード更新前に実行します。| |OnUpdated|例)true|trueの場合レコード更新後に実行します。| |OnDeleting|例)false|trueの場合レコード削除前に実行します。| |OnDeleted|例)false|trueの場合レコード削除後に実行します。| |OnBulkDeleting|例)false|trueの場合レコード一括削除前に実行します。| |OnBulkDeleted|例)false|trueの場合レコード一括削除後に実行します。| |OnImporting|例)false|trueの場合レコードインポート前に実行します。| |OnImported|例)false|trueの場合レコードインポート後に実行します。| |OnSelectingColumn|例)false|trueの場合一覧画面及び編集画面に表示する項目の内容を動的に取得するためのSQLを追加します。| |OnSelectingWhere|例)false|trueの場合一覧画面及び編集画面に表示するレコードを限定するためのWhere句の条件式を追加します。| |CommandText|例)"update [Issues] set ....."|実行するSQLを記述します。| ## CommandTextに使用可能な変数 CommandText内の下記の記述は変数として利用できます。 |変数|値の例|説明| |:--|:--|:--| |@_T|例)1|テナントIDに置換されます。| |@_D|例)10|実行ユーザが所属する組織の組織IDに置換されます。| |@_U|例)30|実行ユーザのユーザIDに置換されます。| ## CommandTextに使用可能なプレースホルダー CommandText内の下記の記述はプレースホルダーとして置換されます。 |プレースホルダー|値の例|説明| |:--|:--|:--| |{{SiteId}}|例)2|サイトIDに置換されます。| |{{Id}}|例)10|レコードのIDに置換されます。| |{{Timestamp}}|例)20171106 09:00:00.000|フォームから投入されたレコード更新前のタイムスタンプに置換されます。OnUpdatingの場合のみ使用できます。レコードの更新競合のチェックに利用できます。| ## CommandTextを外部ファイルから読み込む jsonファイルと同じディレクトリに、jsonファイルに拡張子.sqlを追加したテキストファイルを作成すると、CommandTextを外部ファイルから読み込む事が可能です。sample.jsonの外部ファイルのファイル名はsample.json.sqlです。 ## サンプルコード 下記の例では、サイトID:2で、"OnUpdated": trueによりレコードが更新された際にCommandTextのSQLが実行されます。 ##### JSON ``` { "Description": "Sample", "SiteIdList": [2], "OnUpdated": true, "CommandText": "-- Write an arbitrary SQL statement." } ``` ## ストアドプロシージャの実行 拡張SQLからストアドプロシージャを実行する場合には「Implem.Pleasanter_User」にEXECUTE権限を付与してください。 ## リンクサーバー SQL Serverの場合にはリンクサーバー機能を使用することで、外部のデータベースと接続しI/Oを行うことが可能です。 ## 関連情報 <div id="ManualList"><ul><li><a href="/manual/table-management-server-script">テーブルの管理:サーバスクリプト</a><span>2021/05/23 up</span></li></ul></article> <ul><li><a href="/manual/dev-column-name">項目名とデータベース上のカラム名の対応</a><span>2021/05/30 up</span></li></ul></article> <ul><li><a href="/manual/server-script">開発者向け機能:サーバスクリプト</a><span>2021/08/20 up</span></li> <li><a href="/manual/sever-script-extended-sql">開発者向け機能:サーバスクリプト:extendedSqlオブジェクト</a><span>2021/06/11 up</span></li></ul></article> <ul><li><a href="/manual/extended-sql-api">開発者向け機能:拡張機能:拡張SQL:APIから拡張SQLを実行する</a><span>2021/06/29 up</span></li></ul></article> <ul><li><a href="/manual/faq-server-script-log">FAQ:サーバスクリプトのエラーログを出力する</a><span>2021/06/24 up</span></li></ul></article></div><input id="SearchTextHidden" type="hidden" value="" />
このページをシェアする