はじめに
先日投稿した、UiPathActivityCreatorを利用してカスタムアクティビティを作成するの、実践編になります。
「UiPathActivityCreatorとは」「インストール方法」は、前回の記事を御覧ください。
今回は、実際にUiPathActivityCreatorを利用してのカスタムアクティビティの作成及び、
UiPath Studioでの利用までをやっていきます。
今回作成するカスタムアクティビティ
今回はサンプルとして、PostgreSQLに接続、SELECT文を実行、結果を取得するアクティビティを作成したいと思います。
イメージとしてはこんな感じです。
※PostgreSQLへ接続する手段として、Npgsqlを使用します。
環境・バージョン情報
- Visual Studio 2022
- UiPath Studio 2022.4.4 Community License
- Npgsql v6.0.6
カスタムアクティビティ実装
1 .UiPathActivityCreatorを使って、プロジェクトを作成します。
作り方の詳細は、前回の記事を御覧ください。
今回は、以下の様の形でプロジェクトを作成しました。
2 .PostgreSQLへ接続する為、Npgsqlを導入します。
PostgreSQLConnection.Activitiesを右クリックし、NuGetパッケージ管理を押下
参照タブにて、'npgsql'と入力して検索を行い、Npgsqlをクリックし、インストールを押下
変更のプレビューが出てくる場合があるので、OKを押下
以下のように表示されたらインストール完了
3 .アクティビティの定義を実施します。
こちらも詳細は、前回の記事に記載されています。
今回はこんな形にしました。
アクティビティ定義
プロパティ定義
こんな感じで、自動でソースコードが生成されました。
#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接続はトランザクションをはるべきですが、今回割愛してます。
業務で実際に使う場合等は、トランザクションはるようにして下さい。
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;
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を右クリックし、発行を押下
今回は、ローカルフォルダに発行するため、フォルダを選択し、次へを押下
パッケージを作成するフォルダを入力し、完了を押下
公開準備が完了しました。と表示されるので、発行を押下
ビルドが正常に終了した場合、成功した旨のメッセージが表示されます
ここまでくれば、VisualStudioでの作業は終了です
6 .UiPathStudioで作成したパッケージを取り込みます。
設定>パッケージソースを管理>ユーザー定義のパッケージソースに、先程パッケージを出力した先のフォルダを指定
ロボット作成
1 .実際に作成したパッケージでプロセスを作成します。
プロセスの作成方法は、通常のロボットと同じで大丈夫です。
2 .作成したプロセスにパッケージを追加します。
パッケージ管理を押下
ローカルパッケージ(先程、ユーザー定義にて定義した名前)を選択し、
作成したパッケージを選択、インストールを押下し、最後に保存を押下します
インストールが実行され、アクティビティ一覧に表示されるようになります
2 .実際に作成したアクティビティを使用します。
通常のアクティビティ同様、Input、Outputに変数または固定値を入力します
※Input、OutputはUiPathActivityCreatorでのアクティビティ作成時に設定したものになります
今回はInputは予め用意したローカルDB接続情報(固定値)、Outputはretという変数に設定するようにしました
動作確認
ブレークポイントを設定して、デバックで実行してみます。
Output変数、retの中にSELECTの実行結果が入っていることが確認できました
まとめ
今回は実践編ということで、実際にUiPathActivityCreatorを使って、カスタムアクティビティ作成、利用をしてみました。
C#での実装の内容を変えれば他にも色々使えそうだと思いました。
ただ、以下点が気になりました。
- Input、Output定義を途中で変更したい場合、修正ウィンドウみたいなものが見当たらない
(途中で変数の定義漏れに気づいたのですが、やり方がわかりませんでした…) - アクティビティ定義、Input、Output定義のウィンドウで行の並べ替えが出来ない
(あったら嬉しいなぁと思いました)
とは言え、従来より格段にカスタムアクティビティ作れるようになっているので、
拡張機能としてはかなり便利だと思います。
今後も.Net6対応等アップデートされていくみたいなので、個人的にも楽しみです!