ユーザマニュアル




2024/09/13

MANUAL

開発者向け機能:拡張機能:拡張SQL:APIから拡張SQLを実行する

## 概要 [API](/ja/manual/api)と[拡張SQL](/ja/manual/extended-sql)を組み合わせてデータベースから直接データを取得したり更新したりすることができます。 ## 注意事項 1. 誤って使用するとプリザンターが利用できなくなったり、データが壊れたりする可能性がありますので、十分なテストを行った上でご利用ください。 1. APIキーやセッションによるログイン確認は行いますが、テーブルへの権限チェックなどが行われないため、SQLの中で実施する必要があります。 1. [レコード取得API](/ja/manual/api-record-get)と異なり、取得件数の上限はありません。そのため取得内容・条件によっては処理時間が非常に長くなる可能性がありますので、十分なテストを行った上でご利用ください。 ## 制限事項 1. 拡張SQLのJSONファイルやSQLファイルを更新した後は「アプリケーションを再起動」するまで反映しません。 1. セキュリティ上の理由により拡張SQLはWeb画面から設定できません。 ## 事前準備 APIの操作を行う前に[APIキーの作成](/manual/api-key)を実施してください。 .jsonファイルにて以下の2項目は必須項目となります。 |パラメータ名|設定例|説明| |:--|:--|:--| |Name|Sample|APIから実行させる際の名前を設定します。| |Api|true|trueの場合APIからの実行を許可します。| CommandTextに直接SQL文を記載できますが、SQL文が長文になる場合など、ファイルを分けることが可能です。 その場合のファイル名は以下の画像のように、.jsonファイルと同名.sqlとしてください。 例) APItoSQL.json ←定義ファイル APItoSQL.json.sql ←SQL文 ![image](https://pleasanter.org/binaries/2d01585929d44f339937c9873ba5293e) ## URL 下記のURLを使用します。 HTTPメソッドはPOSTです。 http://{ServerName}/api/extended/sql "http://{ServerName}" の部分は、環境に合わせて編集してください。 ## リクエスト 下記例のようにParamsに入れたパラメータは@RefIDのように拡張SQLに渡すパラメータとして使用することができます。 標準で用意されている@_Uなどのパラメータも使用できます。 ```json { "ApiVersion": 1.1, "ApiKey": "XXXXXXXXXX...", "Name": "Sample", "Params": { "RefID": 1 } } ``` ## JSONファイル APItoSQL.json ```json { "Name": "Sample", "Api": true } ``` ## SQL文(外部ファイル) APItoSQL.json.sql ```sql SELECT [ReferenceId] ,[DeptId] ,[GroupId] ,[UserId] ,[Ver] ,[PermissionType] FROM [Implem.Pleasanter].[dbo].[Permissions] WHERE [ReferenceId]=@RefID ``` ## レスポンス テーブル内にはレコードの配列があり、レコード内はKey, ValueのHashでカラム名と値が入ってきます。 ```json { "StatusCode": 200, "Response": { "Data": { "Table": [ { "ReferenceId": 1, "DeptId": 0, "GroupId": 0, "UserId": 1, "Ver": 1, "PermissionType": 511 }, { "ReferenceId": 1, "DeptId": 0, "GroupId": 0, "UserId": 9, "Ver": 1, "PermissionType": 31 }, { "ReferenceId": 1, "DeptId": 0, "GroupId": 0, "UserId": 10, "Ver": 1, "PermissionType": 31 }, { "ReferenceId": 1, "DeptId": 0, "GroupId": 1, "UserId": 0, "Ver": 1, "PermissionType": 511 } ] } } } ``` 複数のテーブルから値を取得した場合は以下のようなレスポンスとなります。 Response.Data.Table (1つめのテーブル) Response.Data.Table1 (2つめのテーブル) Response.Data.Table2 (3つめのテーブル) ## ユーザを指定して実行する 操作対象のオブジェクトの所有者がImplem.Pleasanter_Ownerである場合、以下のようなエラーが発生します。 例)PostgreSQLでItemsテーブルへのInsertをUser権限で実行した場合 「"PostgresException: 42501: permission denied for sequence Items_ReferenceId_seq"」 これは、シーケンスオブジェクトの所有者がImplem.Pleasanter_Ownerであるのに対して、実行者がImplem.Pleasanter_Userであるためです。 APIから拡張SQLを実行する際に以下のように指定すると、Owner権限で実行することができます。 ## JSONファイル APItoSQL.json ```json { "Name": "Sample", "Api": true, "DbUser": "Owner" } ``` ## 関連情報 <div id="ManualList"><ul><li><a href="/ja/manual/api">開発者向け機能:API</a><span>2023/08/16 up</span></li> <li><a href="/ja/manual/api-record-get">開発者向け機能:API:テーブル操作:単一レコード取得</a><span>2023/08/17 up</span></li> <li><a href="/ja/manual/api-record-get-multi">開発者向け機能:API:テーブル操作:複数レコード取得</a><span>2023/12/14 up</span></li></ul></article> <ul><li><a href="/ja/manual/extended-sql">開発者向け機能:拡張機能:拡張SQL</a><span>2024/09/13 up</span></li></ul></article> <ul><li><a href="/ja/manual/faq-api-paging">FAQ:API で 200 レコードを超えるデータを取得したい</a><span>2024/04/29 up</span></li> <li><a href="/ja/manual/faq-api">FAQ:API実行でエラーになる</a><span>2024/04/29 up</span></li> <li><a href="/ja/manual/faq-json-format">FAQ:変更後の設定ファイルやAPIリクエスト(JSON形式)が正しく認識されない場合の確認事項</a><span>2024/04/29 up</span></li></ul></article></div><input id="SearchTextHidden" type="hidden" value="" />
TOP
このページをシェアする
記載された商品名、各製品名は各社の登録商標または商標です。 © Implem Inc.