1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

プリザンターでAPIから拡張SQLを実行しテーブル上のレコードを更新する

Posted at

はじめに

APIを投げた際に拡張SQLによって、プリザンターのテーブルのデータを更新する処理を走らせます。今回の機能はプリザンターにサーバスクリプトがない時からあるレガシー機能になります。そして、あまり使わない機能でもあるため、なかなか慣れない作業でした。

拡張SQL

まずは拡張SQLについて知らなくてはいけません。拡張SQLを使用するためには「Parameters¥ExtendedSqls」フォルダの配下にjsonファイルを下記入力内容を参考に作成します。APIから拡張SQLを実行する前段階として、新規作成したjsonファイルには、Name項目にAPIと紐づけるための名前を、Api項目に「true」を設定します。ここで注意が必要なのですが、可能であればjsonファイル名とName項目の値は一致させたほうが良いかと思います。こちらの理由に関しては後述します。
詳しくは下記ユーザーマニュアルを参照してください。

{
    "Name": "Sample",
    "Api": true
}

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

APIから拡張SQLを実行

詳しくは下記ユーザーマニュアルを参照してください。

API

下記、サンプルAPIのようにリクエストを作成しましょう。リクエストに記述されているName項目は上記で作成したjsonファイルのName項目と紐づく一意の値を設定しましょう。また、Params項目は後述するSQL文に渡す値を設定することができます。そして、キーは後述のSQL文と紐づくものとなるためスペルミスは厳禁です。

{
    "ApiVersion": 1.1,
    "ApiKey": "XXXXXXXXXX...",
    "Name": "Sample",
     "Params": {
        "SiteId": 1
    }
}

また、APIのURLは下記になります。仮想ディレクトリを追加していなければ「{仮想ディレクトリ名}」は不要です。

http://{servername}/{仮想ディレクトリ名}/api/extended/sql

SQL文

下記、サンプルSQLのようにSQL文を作成しましょう。SQL文の置き場所は上記のjsonファイルと同じ「Parameters¥ExtendedSqls」フォルダの配下になります。また、WHERE句にある「@SiteId」は上記リクエストで指定した「1」が入ります。

UPDATE [Implem.Pleasanter].[dbo].[Results]
SET [ClassA] = '過去のレコード'
WHERE [SiteId] = @SiteId
AND [DateA] <= CAST(CURRENT_TIMESTAMP as date)

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

まとめると・・・

上記APIリクエストを投げると拡張SQLが実行され、テーブルの[SiteId]が「1」のサイト、かつ[DateA]が今日以前が設定されているレコードの[ClassA]に「過去のレコード」というテキストを設定し、更新するという処理になります。

問題発生

しかし、今回お問い合わせしてくださったお客様の環境では、仮想ディレクトリを追加した環境(localhost/pleasanter)と仮想ディレクトリを追加していない環境(localhost)で挙動がおかしいというご連絡をいただきました。具体的にいは仮想ディレクトリを追加した環境では、レコードの更新がされなかったというご連絡です。私も色々調べてみましたが、わかりませんでした。正直、お手上げです・・・。そのため、実際にオンラインで画面共有をしていただきながら操作していただきました。私や先輩が見てもおかしいところはありませんでしたが、やはり動きません。そこで、弊社社長も加わり調査しましたら、なんとjsonファイルのName項目が重複していることが判明いたしました。そのため、注意事項として「jsonファイル名とName項目の値は一致させたほうが良い」と記載させていただきました。そうすることでName項目の重複を防ぐこともでき、気づくことも可能です。皆さん、気を付けましょう。

おわりに

今回は「APIから拡張SQLを実行する」方法を学びました。これによって、APIを投げて直接DBを更新することが可能となりました。今回の件でVM環境から1つのWEBサーバーに複数のアプリケーションを入れる方法も学びました。まだまだ、改善の余地ありですが、次の記事は「1つのWEBサーバーに複数のアプリケーションを入れる方法」でも書こうかなと思っています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?