LoginSignup
3
2

More than 1 year has passed since last update.

UiPathActivityCreatorを利用してカスタムアクティビティを作ってみた(実践編)「UiPath, PostgreSQL接続」

Last updated at Posted at 2022-08-15

はじめに

先日投稿した、UiPathActivityCreatorを利用してカスタムアクティビティを作成するの、実践編になります。
「UiPathActivityCreatorとは」「インストール方法」は、前回の記事を御覧ください。

今回は、実際にUiPathActivityCreatorを利用してのカスタムアクティビティの作成及び、
UiPath Studioでの利用までをやっていきます。

今回作成するカスタムアクティビティ

今回はサンプルとして、PostgreSQLに接続、SELECT文を実行、結果を取得するアクティビティを作成したいと思います。
イメージとしてはこんな感じです。
172705.png
※PostgreSQLへ接続する手段として、Npgsqlを使用します。

環境・バージョン情報

  • Visual Studio 2022
  • UiPath Studio 2022.4.4 Community License
  • Npgsql v6.0.6

カスタムアクティビティ実装

1 .UiPathActivityCreatorを使って、プロジェクトを作成します。
 作り方の詳細は、前回の記事を御覧ください。

今回は、以下の様の形でプロジェクトを作成しました。

  • プロジェクト名:PostgreSQLConnection
    WS000000.JPG

2 .PostgreSQLへ接続する為、Npgsqlを導入します。
 PostgreSQLConnection.Activitiesを右クリックし、NuGetパッケージ管理を押下
WS000001.JPG
参照タブにて、'npgsql'と入力して検索を行い、Npgsqlをクリックし、インストールを押下
WS000002.JPG
変更のプレビューが出てくる場合があるので、OKを押下
WS000003.JPG
以下のように表示されたらインストール完了
WS000004.JPG

3 .アクティビティの定義を実施します。
 こちらも詳細は、前回の記事に記載されています。
 今回はこんな形にしました。
アクティビティ定義
WS000005.JPG
プロパティ定義
WS000006.JPG
こんな感じで、自動でソースコードが生成されました。
WS000007.JPG

SELECT.cs(一部抜粋)
#region Protected Methods

        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
            if (Server == null) metadata.AddValidationError(string.Format(Resources.ValidationValue_Error, nameof(Server)));
            if (Port == null) metadata.AddValidationError(string.Format(Resources.ValidationValue_Error, nameof(Port)));
            if (UserId == null) metadata.AddValidationError(string.Format(Resources.ValidationValue_Error, nameof(UserId)));
            if (DbName == null) metadata.AddValidationError(string.Format(Resources.ValidationValue_Error, nameof(DbName)));
            if (Password == null) metadata.AddValidationError(string.Format(Resources.ValidationValue_Error, nameof(Password)));
            if (Enlist == null) metadata.AddValidationError(string.Format(Resources.ValidationValue_Error, nameof(Enlist)));

            base.CacheMetadata(metadata);
        }

        protected override async Task<Action<AsyncCodeActivityContext>> ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken)
        {
            // Inputs
            var server = Server.Get(context);
            var port = Port.Get(context);
            var userid = UserId.Get(context);
            var dbname = DbName.Get(context);
            var password = Password.Get(context);
            var enlist = Enlist.Get(context);
    
            ///////////////////////////
            // Add execution logic HERE
            ///////////////////////////

            // Outputs
            return (ctx) => {
                Result.Set(ctx, null);
            };
        }

#endregion

4 .'Add execution logic HERE'の箇所に処理を実装します。
変更を加えた箇所だけピックアップして記載します。

  • クエリ文は、直接コードに実装しました。
    本来は、INPUTパラメータで渡して、動的に変更出来るようにするのがベストです。
    今回はカスタムアクティビティを実装して使うのが目的なので割愛しました。
  • DB接続はトランザクションをはるべきですが、今回割愛してます。
    業務で実際に使う場合等は、トランザクションはるようにして下さい。
SELECT.cs(参照部分)
using System;
using System.Activities;
using System.Threading;
using System.Threading.Tasks;
using System.Data;
using PostgreSQLConnection.Activities.Properties;
using UiPath.Shared.Activities;
using UiPath.Shared.Activities.Localization;
+ using Npgsql;
SELECT.cs(実処理部分)
protected override async Task<Action<AsyncCodeActivityContext>> ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken)
        {
            // Inputs
            var server = Server.Get(context);
            var port = Port.Get(context);
            var userid = UserId.Get(context);
            var dbname = DbName.Get(context);
            var password = Password.Get(context);
            var enlist = Enlist.Get(context);

            // 接続文字列の生成
+           string connectStr = $"Server={server};Port={port};User ID={userid};Database={dbname};Password={password};Enlist={enlist}";
+
+           // 返却用変数
+           DataTable table = new DataTable();
+
+            // DB接続
+            using (NpgsqlConnection connection = new NpgsqlConnection(connectStr)) { 
+               
+               // DB接続開始
+               connection.Open();
+
+                // 実行クエリ
+               string queryStr = "SELECT * FROM test";
+
+                // 実行準備
+               NpgsqlCommand command = new NpgsqlCommand(queryStr, connection);
+               NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(command);
+
+                
+               // 実行
+               adapter.Fill(table);
+
+               // DB接続クローズ
+               connection.Close();
+           }

            // Outputs
            return (ctx) => {
+               Result.Set(ctx, table);
-               Result.Set(ctx, null);
            };
        }

5 .作成したアクティビティをパッケージ化して使えるようにします。
PostgreSQLConnection.Activitiesを右クリックし、発行を押下
WS000009.JPG
今回は、ローカルフォルダに発行するため、フォルダを選択し、次へを押下
WS000010.JPG
パッケージを作成するフォルダを入力し、完了を押下
WS000012.JPG
公開準備が完了しました。と表示されるので、発行を押下
WS000013.JPG
ビルドが正常に終了した場合、成功した旨のメッセージが表示されます
ここまでくれば、VisualStudioでの作業は終了です
WS000014.JPG
WS000015.JPG

6 .UiPathStudioで作成したパッケージを取り込みます。
設定>パッケージソースを管理>ユーザー定義のパッケージソースに、先程パッケージを出力した先のフォルダを指定
WS000018.JPG

ユーザー定義のパッケージソースに追加されます
WS000019.JPG

ロボット作成

1 .実際に作成したパッケージでプロセスを作成します。
 プロセスの作成方法は、通常のロボットと同じで大丈夫です。

2 .作成したプロセスにパッケージを追加します。
パッケージ管理を押下
WS000020.JPG

ローカルパッケージ(先程、ユーザー定義にて定義した名前)を選択し、
作成したパッケージを選択、インストールを押下し、最後に保存を押下します
WS000021.JPG

インストールが実行され、アクティビティ一覧に表示されるようになります
WS000022.JPG

2 .実際に作成したアクティビティを使用します。
通常のアクティビティ同様、Input、Outputに変数または固定値を入力します
※Input、OutputはUiPathActivityCreatorでのアクティビティ作成時に設定したものになります
今回はInputは予め用意したローカルDB接続情報(固定値)、Outputはretという変数に設定するようにしました
WS000024.JPG

動作確認

ブレークポイントを設定して、デバックで実行してみます。
Output変数、retの中にSELECTの実行結果が入っていることが確認できました
WS000025.JPG

ちなみに、テスト用のDBの中身はこうなってます。
WS000026.JPG

まとめ

今回は実践編ということで、実際にUiPathActivityCreatorを使って、カスタムアクティビティ作成、利用をしてみました。
C#での実装の内容を変えれば他にも色々使えそうだと思いました。
ただ、以下点が気になりました。

  • Input、Output定義を途中で変更したい場合、修正ウィンドウみたいなものが見当たらない
    (途中で変数の定義漏れに気づいたのですが、やり方がわかりませんでした…)
  • アクティビティ定義、Input、Output定義のウィンドウで行の並べ替えが出来ない
    (あったら嬉しいなぁと思いました)

とは言え、従来より格段にカスタムアクティビティ作れるようになっているので、
拡張機能としてはかなり便利だと思います。

今後も.Net6対応等アップデートされていくみたいなので、個人的にも楽しみです!

参考資料

3
2
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
3
2