今回はSQLServerにマスタを作って管理する方法を試したいと思います。
SQL Serverにテーブルを作る
Microsoft SQL Server Management Studio(以下、SSMS)を起動します。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F8841d91f-8d68-b895-f9e3-9098fcabf53f.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=fcf19ca791b647a4a03e9a744568f08f)
「サーバー名」をメモしておきましょう。BPから接続するときに使います。
※今回はWindows認証で接続する前提で進めます。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F74560cdb-a0a2-7c4a-5168-9e781fcf95a0.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=c6e76fdaa84067aa94a60cbffe986d9b)
Blue Prismのテーブル一覧の一部です。
ビューも含めると160~170くらいでしょうか。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Ffb5dd4d4-cba5-4b28-7469-be0c5324ac58.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=6965afc4fd3a64300b4d9112ba3bb1da)
「データベース」を右クリックし、「新しいデータベース」をクリックします。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F795d0d81-c705-ad44-87b1-966da5a09674.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=993bdda2e2aa745befc20d50461a8185)
データベース名はbpmasterとしておきます。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F0e0f3f4e-7bc2-bead-a6f5-aaeb99c33267.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=f1276d41f97e7bebe929125359c1be97)
bpmasterが作成されました。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F5a2483db-2cbc-9be0-1242-c988d374bccc.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=a0817a10ec1233f5684da38329f0dc9d)
bpmasterにテーブルを作ります。
本当は、どのロボットのマスタなのか分かるように、
命名規則を定めてテーブル名を定義するのが良いのですが。。。
今回は分かりやすくm_settingというテーブルを作ることにします。
「データベース」を右クリックし、「新しいクエリ」をクリックします。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Ffdb2a2ca-d8c7-7cef-245e-8fa1e2d0605e.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=53b11aa1d244e6e1d827f49911aa4f4b)
クエリウインドウに以下SQLを書き、「実行」ボタンをクリックします。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Faffbc1b7-fa91-e477-fd83-b3dbec99eea6.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=abe4c201ffbb7ac9ac6f134388cc392b)
create table m_setting (
name nvarchar(128) not null
, description nvarchar(max)
, value nvarchar(max)
, primary key (name)
);
m_settingテーブルが作成されました。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Ffe6852bc-5580-4a7a-df9f-e2d242955f11.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=27bf44baffb2758da4265219298da498)
今度はデータを入れてみましょう。
クエリウインドウに以下SQLを書き、実行ボタンをクリックします。
insert into m_setting (name, description, value) values ('test', 'testtest', 'sssss');
m_settingテーブルを右クリックし、「上位1000行の選択」もしくは「上位200行の編集」をクリックします。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Fee3be340-ddfa-3637-20f7-06245a2c5c93.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=4456f41d23dc9c9cfca3940910734561)
データが投入されたことが確認できました。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F07fd9907-4733-b5da-c7b0-b0395375bff4.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=5afe9840f66ad89101a31b83012ec350)
Blue PrismからSQL Serverに接続する
今度はBlue PrismからSQL Serverに作ったm_settingテーブルの
マスタデータを参照する実装です。
DBへの接続を確立した後、SQLを発行してデータを抽出するという流れになります。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Fe39216d0-7ae4-eecd-fc1c-33d92ddb0c4f.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=d72fe58cfa4b719ad1df01fb0482f095)
DB接続系のオブジェクトは「Data – SQL Server」を使います。
アクションは「Set Connection」ですね。
「DB接続」アクションで行う設定は以下の通りです。
Server:SSMSの起動時にメモした「サーバー名」
Database:”bpmaster”
User:(Windows認証のため空欄)
Password:(Windows認証のため空欄)
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F90e40c39-3a78-0ca4-4cb1-884d8ee5a11f.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=63e7cb7401c709aec7c3b7bc678ff096)
「select」アクションで行う設定は以下の通り。
使うアクションは「Get Text」もしくは「Get Collection」です。
今回は取得するデータが1つのみなので、Get Textを使います。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Fca3321fe-dd33-dbe7-9105-cabbdee0dade.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=207e925da842205930c0375ed86dd385)
発行するSQLですが、WHERE句に指定するパラメータは必ず変数化しておきましょう。
※今回は簡略化のため直書きにしてます。
"SELECT value FROM m_setting WHERE name = 'test'"
実行結果
DBから値が取れていることが確認できました。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F64117123-389c-8949-3d38-e8511fb6a70e.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=5853debda3e3947166ae69bb542be90e)
Get Collectionを使った場合
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Fb9e91d54-0ca1-e18e-2a6d-86adb4f9b8c4.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=8ed0e56ab02f2899a799260bb8661547)
複数行・列でもコレクションとして取得できています。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2Fe457967f-4959-7207-39ef-d9b745ff6e79.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=497695257cfea072e8d36ad6afa3027c)
まとめ
DB接続時の接続NGの場合やデータが0件だった場合などの
エラーハンドリングはきっちり実装するとして、DBがある程度分かる人であれば、こういうやり方もアリかもしれないです。
以前、大量のデータをコレクションに格納していたため、処理途中で固まってしまったことがありました。
ワークテーブルに一旦データを退避させ、ちょっとずつデータを引っ張り出して処理する方法に変えたらうまく動いたことがあります。
マシンのスペックにもよりますが、コレクションデータ数が10000~20000件くらいで発生した記憶があります。
マスタ管理や大量データの扱いなど、DBを活用することで解決できることも多いと思いますので、DBについての知見を深めることをおススメします。