LoginSignup
5

More than 1 year has passed since last update.

APIから外部データベースの情報を取得してみた!!

Last updated at Posted at 2020-12-19

APIから外部データベースの情報を取得してみた!!

はじめに

プリザンターを使用している上で、外部のアプリケーション等から情報を取得して何らかの処理を行いたいケースをよく見かけることがあります。
ただ、その外部のアプリケーション等がAPIを提供していなかったりするとちょっと厄介ですよね。
今回、そんなケースの1つの解決策として、プリザンターの機能を使用したものをご紹介したいと思います。

使用する機能

API機能

プリザンターでは様々なAPI機能を提供しています。
今回使用するものは「APIによる拡張SQL実行」になります。機能の詳細につきましてはこちらをご覧ください。

拡張機能

プリザンターでは様々な拡張機能を提供しています。
今回使用するものは「拡張SQL」になります。機能の詳細につきましてはこちらをご覧ください。

リンクサーバー

こちらでは、SSMS(SQL Server Management Studio)を使用してリンクサーバーを作成し、別(外部)のデータにアクセスできるようにします。リンクサーバーの機能につきましてはこちらをご確認ください。

外部データベース接続準備

今回使用している環境は以下の通り。
・OS:Windows10
・DB:SQL Server(プリザンター)
   PostgreSQL(外部)
今回はプリザンターをSQL Serverで構築されていることを前提として進めたいと思います。
データベース接続にはSSMS(SQL Server Management Studio)を使用します。また、外部のデータベースはPostgreSQLとします。

データソース作成

① ブラウザで下記ページへアクセスし、PostgreSQL向けドライバを取得する。
 https://www.postgresql.org/ftp/odbc/versions/
 ※取得の際、下記ページも参考になるかと思います。
 https://www.sraoss.co.jp/tech-blog/pgsql/psqlodbc/
② スタートメニューからコントロールパネルを開き、「システムとセキュリティ」をクリックする。
 image.png
③ 「管理ツール」をクリックする。
 image.png

④ 「ODBCデータソース(64ビット)」を開く。
 image.png

⑤ 「システムDSN」タブで「追加」をクリックする。
 image.png

⑥ 「PostgreSQL Unicode(x64)」を選択し、「完了」をクリックする。
 image.png

⑦ 「PostgreSQL Unicode ODBC セットアップ」で各項目に値を入力し、「テスト」をクリックする。
 image.png

⑧ 「Connection Test」ダイアログで「OK」をクリックする。
 image.png

⑨ 「保存」をクリックする。

リンクサーバー作成

① SSMSを起動する。
② 「サーバーインスタンス名」→「サーバーオブジェクト」の順に展開する。
 image.png

③ 「リンクサーバー」を右クリックし、サブメニュー内の「新しいリンクサーバー」をクリックする。
 image.png

④ 左側の「ページの選択」にある「全般」にて各項目に値を入力し、「OK」をクリックする。
 image.png
リンクサーバー:作成するリンクサーバの名称を入力。
プロバイダー:「Microsoft OLE DB Provider for ODBC Drivers」を選択。
製品名:リンクサーバーを作成(設置)するサーバー名(IPでも可)
データソース:作成したデータソースを入力。

実際に外部からデータを取得してみる

テーブル情報

以下のようなテーブルを作成します。入力方法(分類B)の値を変更したタイミングで、「自動入力」だった場合、名前(分類A)項目に外部から取得した値を入れます。
image.png

拡張SQL

以下のJSONファイルとSQLファイルをExtendedSqlフォルダに配置してIISを再起動します。
■ JSONファイル(GetOldestPersonName.json)

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

■ SQLファイル(GetOldestPersonName.json.sql)

select top(1) [name] from [TESTDB].[testdb].[public].[person] order by [age] desc;

■取得先テーブル情報
取得する名前は以下のテーブルからになります。
image.png

スクリプト

以下のスクリプトをテーブルに設定します。

■ スクリプト(JavaScript)

$('#Results_ClassB').change( () => {
    if($('#Results_ClassB').val() === '自動入力') {
        const url = 'http://localhost:1759//api/extended/sql'
    const json = {
        ApiVersion: 1.1,
        ApiKey: 'a2ce2f3d235accae04a19e022aef5cf14317da0073d4e973a0d25793b24e755709746d342f6ddf7d8e16f6f223bc9a1d1aded227c07063eb7c8f5ba193e73118',
        Name: 'GetOldestPersonName'
    }
    $.ajax({
        type: "post",
        url: url,
        data: JSON.stringify(json),
        contentType: "application/json",
        dataType: "json",
        scriptCharset: "utf-8",
    })
        .then(
            (data) => {
                console.log('Success!');
                console.log(data);
                console.log(JSON.stringify(data));
                console.log(data.Response.Data.Table[0].name);
                $p.set($('#Results_ClassA'),data.Response.Data.Table[0].name)
            }
        )
        .catch(
            (data) => {
                console.log('Fail!');
                console.log(data);
            }
        );
    }
});

動作確認

新規作成ボタンをクリックして以下の画面が表示されます。
image.png

入力方法(分類B)項目の値を「自動入力」に切り替えると、名前(分類A)に外部から取得した名前(taro)がセットされます。
image.png

さいごに

プリザンターから外部のデータを引っ張ってきて何らかの処理を行いたいケースは、ぜひこちらの機能を使用してご対応いただけたら幸いです。また、ご覧いただいた機能以外にも様々なものがプリザンターには備わっておりますので、ぜひお手元でお試しいただければと思います。最後までご覧いただきありがとうございました。

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
What you can do with signing up
5