Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RPA之PAD(Power Automate Desktop)组件开发

RPA之PAD(Power Automate Desktop)组件开发

作者头像
沙漠尽头的狼
发布于 2022-06-13 04:44:34
发布于 2022-06-13 04:44:34
98700
代码可运行
举报
文章被收录于专栏:Dotnet9Dotnet9
运行总次数:0
代码可运行

本文由网友蓝创精英团队投稿,欢迎转载、分享 原文作者:蓝创精英团队 原文链接:https://blog.csdn.net/i2blue/article/details/125040323


其实,PAD,现在官方文档还没有对外组件式或者插件式开发接口。

但是,有一些志同道合的朋友,比如(潘淳),潘总大佬,在RPA领域,还是很牛逼的。

只要有一扇门,就会有一个世界,现在已经有了一扇门(毕竟是.Net Framework,那么,研究借鉴就容易多了)。

组件开发环境

默认组件的位置是在当前应用下的这个目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Program Files (x86)\Power Automate Desktop\custom-modules

应用地址,按照你自己的来。

另外,插件的DLL,是需要DLL 代码签名了。

默认采用个人签名,放到系统 受信任的根证书颁发机构 即可。

如果有钱,可以买个代码签名。

目前,我这边还没别的好的方式,其中,签名大致分为两种,一种是域名证书SSL,和 代码签名,它们之间是不一样的,不能混用。

大致目录如下:

最简单的Demo

准备直接按照开发流程走一遍,最后,再总结。

新建空白解决方案

默认新增一个解决方案(空的解决方案)

新增组件库

组件DLL名要满足以下 规则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"?*.Modules.?*.dll",
"Modules.?*.dll"

而,官方的组件包是这样子的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Microsoft.Flow.RPA.Desktop.Modules.System.Actions.dll

所以,我这边也按照官方的标准走。

就叫 YZG.Modules.HelloWorld.Actions注:需要注意的是,像 demo,test等名字,可能会导致识别不出来的问题,所以,建议起一些特殊的名字。

打招呼组件项目

默认方案从打招呼开始

引用开发DLL包

然后,引用安装目录 C:\Program Files (x86)\Power Automate Desktop

下的这几个DLL包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Microsoft.Flow.RPA.Desktop.Modules.SDK.dll
 Microsoft.Flow.RPA.Desktop.Modules.SDK.Extended.dll

当然,如果你用的过程中,提示,需要哪个包,你也可以引入进来。

引入完,效果如下:

增加打招呼逻辑

以下就是全部逻辑代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Action(Id = "SayHello")]
[Icon(Code = "EFF7")]
[Throws("MyError")]
public class SayHello : ActionBase
{
    [InputArgument]
    public string UserName { get; set; }    

    [OutputArgument]
    public string Result { get; set; }
    public override void Execute(ActionContext context)
    {
        try
        {
            this.Result = $"{UserName} 你好,中国欢迎你! -{DateTime.Now}";
        }
        catch (ActionException ex)
        {
            throw new ActionException("MyError", ex.Message, ex.InnerException);
        }
    }
}

增加国际化支持

也不用增加外语,直接增加中文支持就可以了

首先,我们增加一个中文的资源文件(另外可以参考官网路径下的语言包来看内部结构分析)

下图帧数大于300(重新录制部分,有兴趣查看原文看完整gif)

组件显示大致规则

组件的名字从哪里来

是从程序集信息里的AssemblyTitle来的,这个名字默认是英文,但是,也可以汉化的。

另外这个名字最好和组件Action的名字不一致。这样,显示会方便点

组件内容的显示大致规则

通过对 组件名 或者 类型 以及 类属性 分割。

增加

  1. _FriendlyName
  2. _Description
  3. _Summary

其中 FriendlyName 就是各种组件的主名称,Description就是提示语相当于,Summary就是关键信息,作用还是很明显的,内部使用了模板引擎变量 < 属性名大写 >来动态显示一些信息。

大体示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Close_Connection_Description = "新 SQL 连接的句柄"
Close_Connection_FriendlyName = "SQL 连接"
Close_Description = "关闭与数据库的开放连接"
Close_FriendlyName = "关闭 SQL 连接"
Close_Summary = "关闭 SQL 连接 <CONNECTION>"
ConnectAndExecute_Description = "连接到数据库并执行 SQL 语句"
ConnectAndExecute_Summary = "<if(RESULT)>\r\n执行 SQL 语句 <STATEMENT> 并将查询结果存储到 <RESULT> 中<else>\r\n执行 SQL 语句 <STATEMENT><endif>"
Connect_ConnectionString_Description = "用于连接到数据库的连接字符串"
Connect_ConnectionString_FriendlyName = "连接字符串"
Connect_Connection_Description = "新 SQL 连接的句柄"
Connect_Connection_FriendlyName = "SQL 连接"
Connect_Description = "打开与数据库的新连接"
Connect_FriendlyName = "打开 SQL 连接"
Connect_Summary = "<if(CONNECTION)>\r\n打开 SQL 连接 <CONNECTIONSTRING> 并将其存储到 <CONNECTION> 中<else>\r\n打开 SQL 连接 <CONNECTIONSTRING><endif>"
Database_Description = "连接到数据库并执行 SQL 语句"
Database_FriendlyName = "数据库"
ErrorMessage_CannotConnect = "无法连接到数据源"
ErrorMessage_CannotConnectError = "无法连接到数据源 {0}"
ErrorMessage_InvalidConnectionString = "连接字符串无效"
ErrorMessage_StatementError = "SQL 语句中的错误 {0}"
ErrorMessage_UniniatializedConnection = "SQL 连接未初始化。请仔细检查是否已指定正确的 SQL 连接,且该连接在“打开 SQL 连接”之后(而不是在已关闭该连接之后)使用"
Error_ConnectToDataSourceError_Description = "指示连接到数据源时出现问题"
Error_ConnectToDataSourceError_FriendlyName = "无法连接到数据源"
Error_InvalidConnectionStringError_Description = "指示指定的连接字符串无效"
Error_InvalidConnectionStringError_FriendlyName = "连接字符串无效"
Error_SqlStatementError_Description = "指示给定的 SQL 语句中存在错误"
Error_SqlStatementError_FriendlyName = "SQL 语句中的错误"
ExecuteSqlStatement_ConnectionString_Description = "用于连接到数据库的连接字符串"
ExecuteSqlStatement_ConnectionString_FriendlyName = "连接字符串"
ExecuteSqlStatement_Connection_Description = "新 SQL 连接的句柄"
ExecuteSqlStatement_Connection_FriendlyName = "SQL 连接"
ExecuteSqlStatement_Description = "连接到数据库并执行 SQL 语句"
ExecuteSqlStatement_FriendlyName = "执行 SQL 语句"
ExecuteSqlStatement_GetConnection_Description = "指定是从给定连接字符串创建新连接,还是选择已打开的连接"
ExecuteSqlStatement_GetConnection_FriendlyName = "获取连接的方式"
ExecuteSqlStatement_Result_Description = "来自数据库的结果,采用数据表的形式,包含行和列"
ExecuteSqlStatement_Result_FriendlyName = "查询结果"
ExecuteSqlStatement_Statement_Description = "要对数据库执行的 SQL 语句"
ExecuteSqlStatement_Statement_FriendlyName = "SQL 语句"
ExecuteSqlStatement_Timeout_Description = "等待来自数据库的结果的最长时间"
ExecuteSqlStatement_Timeout_FriendlyName = "超时"
Execute_Description = "连接到数据库并执行 SQL 语句"
Execute_Summary = "<if(RESULT)>\r\n对 <CONNECTION> 执行 SQL 语句 <STATEMENT> 并将查询结果存储到 <RESULT> 中<else>\r\n对 <CONNECTION> 执行 SQL 语句 <STATEMENT><endif>"
GetSQLConnectionBy_ConnectionString_FriendlyName = "连接字符串"
GetSQLConnectionBy_SQLConnectionVariable_FriendlyName = "SQL 连接变量"
Message_SqlConnection = "SQL 连接"
SqlConnectionHandle_FriendlyName = "SQL 连接"
SqlConnectionHandle_FriendlyNamePlural = "SQL 连接"

参考如上信息,接下来,我们对打招呼程序进行中文内容填充。

实际中文内容

我这边增加了这些内容

增加组件项目签名

有钱的自己搞代码签名证书,没钱的,按照我这个临时自发证书先来。

创建临时证书

来创建一个新的签名(记得VS要管理员模式,就是以管理员方式启动)

然后,就创建了一个签名pfx文件

给组件DLL签名

这个时候,我们要用这个工具(signtool.exe)进行签名,只要安装了vs就会自带。

当然,我也会提供出来。

一个签名的bat脚本(默认签名密码为 123456

基本只需要这两个程序集进行签名,其他的,引用的nuget库是不需要的。

主要是YZG.Modules.HelloWorld.Actions.dllzh-Hans\YZG.Modules.HelloWorld.Actions.resources.dll放到签名的地方

双击bat进行签名

这样就签名成功了。另外在DLL上右键,是能看到签名信息的。

目标机器上安装证书

如果你的证书是掏钱买的,自然就不用安装了。直接被认可的。否则,还是要安装证书的。

安装证书,非常的简单,直接双击,输入密码,然后,选择指定的位置即可。

直接下一步

下一步

选择受信任的根证书颁发机构

然后,完成,是否导入,是,确定,即可。

输入CMD命令( certmgr.msc ) 就可以看到指定分组下就有你的证书了。

至此,证书安装完毕。

组件部署

前提,应用服务要退出,

要不然,DLL会被占用。

然后,把签名后的项目放入到安装目录下的指定插件目录里大致如下所示。

另外,我这个是C盘,还有一个权限的问题。需要注意,能安装到其他盘最好

然后,运行 PAD应用,新建一个任务流,或者编辑任意一个任务流。

如果出现以下问题,那就是证书没有安装到目标机器,安装一下就好。

然后,正常情况下,打开PAD的设计视图,会如下所示:

已经新增了一个功能 测试案例 -> 打招呼 并新增了一个功能。

我们试一下

保存后如下所示

最后,可以看下实际的动作,效果很不错的说(原图超过300帧,微信限制,重新录制了部分,有兴趣请看原文)。

问题处理

  • 第一,中文不显示的问题,建议增加中文语言包,里面的名字要跟代码相匹配,具体可以参考示例。
  • 第二,加载不出来,提示错误,可以根据错误提示修改,或者添加缺失的引用包。
  • 第三,更多细节,只能多挖掘和尝试了

扩展组件的参数信息

我这边根据网友(潘淳)的总结以及自己的总结,也输出一个这样的文档出来。

ActionBase 需要的相关参数

以及内置的相关类型

这里也感谢潘淳大佬的总结

完结

完结撒花,写这个还真不容易,特别是PAD,识别你的组件的时候,会有各种各样的问题。

这个时候就要重试好多遍,好多遍。

不过还好,我已经基于这个能扩展的组件,写了一个Sqlite的组件。也会发到示例了。供大佬们参考。

引用

https://github.com/kesshei/PADDemo

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dotnet9 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C#连接数据库不安装Oracle客户端
Oracle提供了这样的Oracle.ManagedDataAccess.dll,让用可以需要安装Oracle客户端即可连接数据库,并且不区分32位和64位。
_一级菜鸟
2019/09/10
1.7K0
C#连接数据库不安装Oracle客户端
C#二十五 连接式访问数据库
在连接式访问数据库方式下,数据库就好比一个水池,你要取水池里的水进行操作就必须先建立一条管道,连接就相当于通向数据库的管道。在操作时连接不可以断开,一旦连接断开将造成数据访问的严重错误。
张哥编程
2024/12/13
1570
C#二十五 连接式访问数据库
C#操作sql通用类 SQLHelper
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Collections; using System.Data.SqlClient; /// <summary> /// 数据库的通用访问代码 /// 此类为抽象类,不允许实例化,在应用时直接调用即可 /// </summary> public abstract class
艳艳代码杂货店
2021/10/27
2.4K0
C#三十四 常用开发的部分总结
如果为了实现数据库操作类DbHelperSQL能同一项目支持多个数据库访问的情况,则可以保留原来带有的连接字符串参数的方法,实现方法的重载。例如:
张哥编程
2024/12/13
750
RPA与数据库
在RPA实施过程中,经常会遇到与数据库交互的场景。通过与数据库交互,可以更方便的取到结构化的数据,以便在之后使用。本篇文章主要讲解在UiPath中使用MySQL的情景。 1. 安装MySQL ODBC驱动 mysql-connector-odbc下载地址: https://dev.mysql.com/get/Downloads/Connector-ODBC/3.51/mysql-connector-odbc-3.51.30-win32.msi 安装好MySQL 2. 在UiPath中配置MySQL ODBC
用户2017109
2018/06/19
1.4K0
自己写的GeneralDatabaseLayer
菜鸟一个 在校大二学生 奉老师旨意写了个通用数据库层 各位大哥大姐的看过的给点意见 本人实在是没什么经验 指点指点我啊
MJ.Zhou
2022/05/07
4140
C#二十九 数据封装
如果你经常从事基于.NET的应用程序的数据库开发,你会有这种感觉--总是觉得自己在反复编写相同的数据访问代码。很多相似的代码每天在复制来,粘贴去。你是否想过将数据访问代码包装在一个Helper函数里,以便能够在不同的类中共用?如果你还没有这样做,那么我这里就告诉你如何从复用的角度来设计和包装一个我们自己的数据访问类,从而减少冗余代码,提高开发效率。
张哥编程
2024/12/13
710
C#二十九 数据封装
我的数据访问类(第二版)—— for .net2.0 (一)
asp.net2.0已经出来好久了,由于许多的原因一直没有使用,一个月前才开始使用VS2005写东西。 这一个月里又重新学习了一下基础知识,比如多态、接口了什么的。 既然已经到了2.0了嘛,那么以前的数据访问的方式要不要变一下呢?简单看了一下,感觉还是我的那种方式好,至少时我已经用习惯了。那么用.net2.0的方法重写一遍吧。 看了一下Framework 2.0的代码,发现一个问题。虽然表面上ADO.NET的使用没有什么变化(加了一些功能,原来由的功能没有变),但是内部实现有比较大的变化,原来的接口的“工作
用户1174620
2018/02/07
7770
办公用品管理系统VB——模块
'DbFunc.bas '== 标记数据库是否连接 == Private IsConnect As Boolean '== 标记执行Connect()函数后,访问数据库的次数 == Private Connect_Num As Integer Private cnn As ADODB.Connection '连接数据库的Connection对象 Private rs As ADODB.Recordset '保存结果集的Recordset对象 '连接数据库 Private Sub Connect
landv
2018/09/26
9450
5,ORM组件XCode(动手)
本篇才真正是XCode教程第一篇。《速览》是为了以最简洁的语言最短小的篇幅去吸引开发者;《简介》则是对XCode组件和XCode开发模式的一个整体介绍,让开发者从宏观的角度去理解XCode;《共舞》把XCode提到了一个新的高度,让开发者感受到它的贵族血统!     先抛出三篇来吸引人,再出《动手》,其实就是吊人胃口。如果到这里你还没有想试一试XCode的念头冲动,好吧,我承认是我的失败,不过你可以欺骗我,可别欺骗你自己! XCode开发模式建议先有数据库再有实体模型,然后借助代码生成器生成实体代码;当
大石头
2018/01/15
1.1K0
5,ORM组件XCode(动手)
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
  在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relational Mapping,对象关系映射)出现了,我们开始使用 EF、Dapper、NHibernate,亦或是国人的 SqlSugar 代替我们原来的 SqlHelper.cs。通过这些 ORM 工具,我们可以很快速的将数据库中的表与代码中的类进行映射,同时,通过编写 SQL 或是 Lambda 表达式的方式,更加便捷的实现对于数据层的访问。
程序员宇说
2019/09/11
1.9K0
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
C#操作Access通用类
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.Ol
艳艳代码杂货店
2021/10/29
8800
采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)
本文介绍了如何利用Opserver插件在Visual Studio Code中监控ASP.NET Core应用,包括定义监控配置、集成日志、代码覆盖率、性能指标等。同时,还介绍了如何将日志、性能指标等数据上报到Opserver,以及如何使用Opserver的Web UI来查看监控数据。此外,还讲解了如何使用Opserver的API触发器来自动记录日志、性能指标等数据,以及如何使用Opserver的SQL存储来保存数据。通过使用Opserver,开发者可以更加方便地监控和管理他们的ASP.NET Core应用,从而提高应用的质量和稳定性。
GuZhenYin
2018/01/04
1.4K0
采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)
SQLServer 中的身份验证及登录问题
SQL Server 支持两种身份验证模式,即Windows 身份验证模式和混合模式。
授客
2019/09/12
4.6K0
SQLServer 中的身份验证及登录问题
我的数据访问函数库的源代码(一)—— 共用部分
/* 2008 4 25 更新 */ 我的数据访问函数库的源码。整个类有1400多行,原先就是分开来写的,现在更新后还是分开来发一下吧。 第一部分:内部成员,初始化设置等。 using System; using System.Data; using System.Data.SqlClient; using HBS.DataStruct; using HBS.Form; //using System.Security.Principal; namespace HBS {     
用户1174620
2018/02/07
8230
SqlConnection.ConnectionString 属性
ConnectionString 类似于 OLE DB 连接字符串,但并不相同。与 OLE DB 或 ADO 不同,如果“Persist Security Info ”值设置为 false(默认值),则返回的连接字符串与用户设置的 ConnectionString 相同但去除了安全信息。除非将“Persist Security Info ”设置为 true,否则,SQL Server .NET Framework 数据提供程序将不会保持,也不会返回连接字符串中的密码。
全栈程序员站长
2022/09/14
1.1K0
.NET简谈设计模式之(策略模式)
策略模式在我们日常开发中经常被用到,这篇文章不是策略模式的深入讨论和学术研究,只是让初学者能有个基本的了解。
王清培
2022/03/14
7330
.NET简谈设计模式之(策略模式)
Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持
一、Oracle XE 数据库与连接工具安装使用 Oracle数据库历来以价格昂贵出名,当然贵有贵的道理,成为一个Oracle DBA也是令人羡慕的事情,如果程序员熟悉Oracle使用也有机会接触到大型的项目,但是Oracle似乎对一般程序员不怎么友好,因为其繁琐的安装配置过程和对系统硬件的苛求,另一般人望而止步,我最早从Oracle 9i开始接触它,深有感受,特别是熟悉了SqlServer的开发人员,初次接触Oracle还是很不习惯的。比如它没有SqlServer数据“库”的概念,一个sa账号管理很多数据
用户1177503
2018/02/27
3K0
Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持
Windows中使用MySql.Data库将C# 接到 MySQL
本文翻译自CodeProject上的一篇博文:Connect C# to MySQL,作者是: Etienne Rached。 由于文章是2009 年 11 月 18 日写的,到现在已经将近15年了,所以有些地方需要基于最新的.Net和C#版本进行修改,尤其是在MySql.Data库和.Net版本的使用和匹配上。
ccf19881030
2024/05/24
5520
Windows中使用MySql.Data库将C# 接到 MySQL
通用.NET数据库访问类SqlHelper
通用.NET数据库访问类SqlHelper using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collections; using System.Configuration; /*解释: * --------连接字符串属性-------- * "Server"或"Data Source"属性:服务器名 * "Database"或"Initial Catalog"属性
摘繁华
2021/12/27
3.2K0
相关推荐
C#连接数据库不安装Oracle客户端
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验