介绍
这将是使用前几天发布的 UiPathActivityCreator 创建自定义活动的实用版本。
《什么是UiPathActivityCreator》和《如何安装》请参考上一篇文章。
这一次,实际上是使用 UiPathActivityCreator 和
我们将继续在 UiPath Studio 中使用它。
这次要创建的自定义活动
这次作为示例,我想创建一个连接到 PostgreSQL、执行 SELECT 语句并获取结果的活动。
图像看起来像这样。
* Npgsql 用作连接到 PostgreSQL 的一种方式。
环境和版本信息
- Visual Studio 2022
- UiPath Studio 2022.4.4 社区许可证
- Npgsql v6.0.6
自定义活动实施
1. 使用 UiPathActivityCreator 创建一个项目。
制作方法详见上篇文章。
这一次,我创建了一个如下格式的项目。
- 项目名称:PostgreSQLConnection
2. 安装 Npgsql 以连接到 PostgreSQL。
右键单击 PostgreSQLConnection.Activities 并按管理 NuGet 包
在 Browse 选项卡中,输入 'npgsql' 进行搜索,单击 Npgsql,然后按 Install
可能会出现更改的预览,因此请按 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参数传递,这样就可以动态改变了。
这次的目的是实现和使用一个自定义的activity,所以我省略了。 - 数据库连接应该有一个事务,但是这次被省略了。
如果您实际上将其用于商业等,请进行交易。
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.导入使用 UiPath Studio 创建的包。
在“设置”>“管理包源”>“用户定义的包源”中指定先前输出包的文件夹
被添加到用户定义的包源中
机器人创作
1. 用实际创建的包创建一个进程。
进程创建方法与普通机器人相同。
2. 将包添加到创建的进程中。
新闻资料包管理
选择本地包(前面用户定义中定义的名称),
选择创建的包,按安装,最后按保存
安装将运行,现在将出现在活动列表中
2. 使用您实际创建的活动。
像正常活动一样在 Input 和 Output 中输入变量或固定值
* Input 和 Output 将是使用 UiPathActivityCreator 创建活动时设置的那些
这次,Input 设置为预先准备好的本地 DB 连接信息(固定值),Output 设置为名为 ret 的变量。
操作检查
设置断点并在调试中运行。
我能够确认输出变量 ret 包含 SELECT 的执行结果
顺便说一下,test DB的内容是这样的。
概括
这一次,作为一个实用版,我实际使用了 UiPathActivityCreator 来创建和使用自定义活动。
我认为可以通过更改 C# 中的实现内容来使用各种其他东西。
但是,我担心以下几点。
- 如果要更改中间的Input和Output定义,找不到修改窗口之类的东西
(我注意到途中缺少变量定义,但我不知道该怎么做......) - 无法对活动定义、输入和输出定义窗口中的行进行排序
(我觉得如果有就好了)
但是,由于现在可以比以前更多地创建自定义活动,
我认为它作为扩展非常有用。
看来以后还会继续更新支持.Net6,个人很期待!
参考资料
- 从 C# 连接到 PostgreSQL(.NET 系列)(TransactionScope 和分布式事务)
- 我尝试使用 UiPathActivityCreator 创建自定义活动(如何制作)
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308623464.html