【BluePrism】DBを活用したマスタ管理


概要

UiPathでロボットを作っていたとき、「設定マスタ」ファイルをExcelであらかじめ用意しておき、

dictionary型の変数に格納して使い回していました。

BPの場合、dictionary変数は作れなさそうだったので、前述の方法は断念。

環境変数を使えばマスタ管理はできそうなのですが、

ロボットが増えたときに、環境変数が大量にできるのは避けたいなーとも思う。。。

(ロボットごとに環境変数をまとめておくだけなら、命名規則で解決すると思います)

非エンジニア向きではないですが。。。

今回はSQLServerにマスタを作って管理する方法を試したいと思います。


SQL Serverにマスタテーブルを作る

Microsoft SQL Server Management Studio(以下、SSMS)を起動します。

image.png

「サーバー名」をメモしておきましょう。BPから接続するときに使います。

※今回はWindows認証で接続する前提で進めます。

image.png

BPのテーブル一覧の一部です。

ビューも含めると160~170くらいでしょうか。

余談ですが、以前ロボットの稼働実績をまとめた統計資料を作る際に、

BPの各テーブルのデータを参照して、SQLでいい感じの統計データを抽出してましたw

image.png

「データベース」を右クリックし、「新しいデータベース」をクリックします。

image.png

データベース名はbpmasterとしておきます。

image.png

bpmasterが作成されました。

image.png

bpmasterにテーブルを作ります。

本当は、どのロボットのマスタなのか分かるように、

命名規則を定めてテーブル名を定義するのが良いのですが。。。

今回は分かりやすくm_settingというテーブルを作ることにします。

「データベース」を右クリックし、「新しいクエリ」をクリックします。

image.png

クエリウインドウに以下SQLを書き、「実行」ボタンをクリックします。

image.png

create table m_setting (

name nvarchar(128) not null
, description nvarchar(max)
, value nvarchar(max)
, primary key (name)
);

m_settingテーブルが作成されました。

image.png

今度はデータを入れてみましょう。

クエリウインドウに以下SQLを書き、実行ボタンをクリックします。

insert into m_setting (name, description, value) values ('test', 'testtest', 'sssss');

m_settingテーブルを右クリックし、「上位1000行の選択」もしくは「上位200行の編集」をクリックします。

image.png

データが投入されたことが確認できました。

image.png


BPからSQL Serverに接続する

今度はBPからSQL Serverに作ったm_settingテーブルの

マスタデータを参照する実装です。

DBへの接続を確立した後、SQLを発行してデータを抽出するという流れになります。

image.png

DB接続系のオブジェクトは「Data - SQL Server」を使います。

アクションは「Set Connection」ですね。

「DB接続」アクションで行う設定は以下の通りです。

Server:SSMSの起動時にメモした「サーバー名」

Database:"bpmaster"

User:(Windows認証のため空欄)

Password:(Windows認証のため空欄)


image.png

「select」アクションで行う設定は以下の通り。

使うアクションは「Get Text」もしくは「Get Collection」です。

今回は取得するデータが1つのみなので、Get Textを使います。

image.png

発行するSQLですが、WHERE句に指定するパラメータは必ず変数化しておきましょう。

※今回は簡略化のため直書きにしてます。

"SELECT value FROM m_setting WHERE name = 'test'"


実行結果

DBから値が取れていることが確認できました。

image.png

Get Collectionを使った場合

image.png

複数行・列でもコレクションとして取得できています。

image.png


まとめ

DB接続時の接続NGの場合やデータが0件だった場合などの

エラーハンドリングはきっちり実装するとして、

DBがある程度分かる人であれば、こういうやり方もアリかもしれないです。

以前、大量のデータをコレクションに格納していたため、処理途中で固まってしまったことがありました。

ワークテーブルに一旦データを退避させ、ちょっとずつデータを引っ張り出して処理する方法に変えたら

うまく動いたことがあります。

マシンのスペックにもよりますが、

コレクションデータ数が10000~20000件くらいで発生した記憶があります。

マスタ管理や大量データの扱いなど、DBを活用することで解決できることも多いと思いますので、

DBについての知見を深めることをおススメします。