首页 > 其他分享 >RPA之PAD(Power Automate Desktop)组件开发

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

时间:2023-05-16 22:07:29浏览次数:53  
标签:Description Power Desktop RPA 组件 ExecuteSqlStatement SQL FriendlyName 连接


Power Automate Desktop 组件开发

其实,PAD,现在官方文档还没有对外组件式或者插件式开发接口。
但是,有一些志同道合的朋友,比如(潘淳),潘总大佬,在RPA领域,还是很牛逼的。

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

组件开发环境

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

C:\Program Files (x86)\Power Automate Desktop\custom-modules

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

另外,插件的DLL,是需要DLL 代码签名了。
默认采用个人签名,放到系统 受信任的根证书颁发机构 即可。
如果有钱,可以买个代码签名。
目前,我这边还没别的好的方式,其中,签名大致分为两种,一种是域名证书SSL,和 代码签名,它们之间是不一样的,不能混用。

大致目录如下:

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

最简单的Demo

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

新建空白解决方案

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

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

新增组件库

组件DLL名要满足以下 规则

"?*.Modules.?*.dll",
"Modules.?*.dll"

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

Microsoft.Flow.RPA.Desktop.Modules.System.Actions.dll

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

就叫 YZG.Modules.HelloWorld.Actions

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

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

打招呼组件项目

默认方案从打招呼开始

引用开发DLL包

然后,引用安装目录
C:\Program Files (x86)\Power Automate Desktop
下的这几个DLL包

Microsoft.Flow.RPA.Desktop.Modules.SDK.dll
 Microsoft.Flow.RPA.Desktop.Modules.SDK.Extended.dll

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

引入完,效果如下:

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

增加打招呼逻辑

以下就是全部逻辑代码

[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);
            }
        }
    }

增加国际化支持

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

首先,我们增加一个中文的资源文件

(另外可以参考官网路径下的语言包来看内部结构分析)

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

组件显示大致规则

组件的名字从哪里来

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


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

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

组件内容的显示大致规则

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

  1. _FriendlyName‎
  2. _Description
  3. _Summary

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

大体示例如下:

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 连接"

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

实际中文内容

我这边增加了这些内容

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

增加组件项目签名

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

创建临时证书

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


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

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


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

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

给组件DLL签名

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

当然,我也会提供出来。

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

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


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


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

主要是YZG.Modules.HelloWorld.Actions.dll和zh-Hans\YZG.Modules.HelloWorld.Actions.resources.dll

放到签名的地方

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

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


双击bat进行签名

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


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

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

目标机器上安装证书

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

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

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


直接下一步

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


下一步

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


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

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

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


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

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

至此,证书安装完毕。

组件部署

前提,应用服务要退出,

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


要不然,DLL会被占用。

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

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

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


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

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

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


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

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

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

我们试一下

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


保存后如下所示

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


最后,可以看下实际的动作,效果很不错的说。

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

问题处理

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

扩展组件的参数信息

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

ActionBase 需要的相关参数

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


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


以及内置的相关类型

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


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

完结

完结撒花,写这个还真不容易,特别是PAD,识别你的组件的时候,会有各种各样的问题。
这个时候就要重试好多遍,好多遍。
不过还好,我已经基于这个能扩展的组件,写了一个Sqlite的组件。也会发到示例了。供大佬们参考。

引用

https://github.com/kesshei/PADDemo


标签:Description,Power,Desktop,RPA,组件,ExecuteSqlStatement,SQL,FriendlyName,连接
From: https://blog.51cto.com/kesshei/6287411

相关文章

  • RPA之PAD(Power Automate Desktop) 产品介绍
    RPA之PAD(PowerAutomateDesktop)产品介绍简介RPA之前我已经介绍了,它就是一个机器人流程自动化的概念。基于RPA,有很多的产品,其中PowerAutomateDesktop(PAD)就是一个相对来讲,免费的,容易使用的一个RPA,另外它的国际化做的也很不错,中文效果也是很棒。其中,国内的RPA产品影刀也是......
  • WebView2 通过 PuppeteerSharp 实现RPA获取壁纸 (案例版)
    此案例是《.NetWebView2项目,实现嵌入WEB页面Chromium内核》文的续集。主要是针对WebView2的一些微软自己封装的不熟悉的API,有一些人已经对PuppeteerSharp很熟悉了,那么,直接用PuppeteerSharp的话,那就降低了学习成本,那还是很有必须要的。之前自己也RPA获取过联盟的高清原画,......
  • Powershell 无法将“mysql”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    Win键+Q,在搜索框内输入Powershell。点击以管理员身份运行Powershell。粘贴代码 set-executionpolicyremotesigned 按回车键执行命令。输入A,按回车键确认。 ......
  • 为powerdesigner添加mysql的字符集支持
    [url]http://jooben.blog.51cto.com/253727/309467[/url]一般建模可能都会用到:powerdesigner但是,在建表的时候,我一直没有找到:DEFAULTCHARACTERSETCOLLATE两个选项。因此,想了个方法,点击:工具栏-》database-》editcurrentDBMS[img]http://img1.51c......
  • 使用Powerline为VIM和Bash注入强劲动力
    导读Powerline是一个极棒的Vim编辑器的状态行插件,这个插件是使用Python开发的,主要用于显示状态行和提示信息,适用于很多软件,比如bash、zsh、tmux等等。特色使用python编写,使其更具扩展性且功能丰富稳定易测的代码库,兼容python2.6+和python3支持多种 Lin......
  • python基础学习-用Python操作Word和PowerPoint
    参考链接:Python-Core-50-Courses/第26课:用Python操作Word文件和PowerPoint.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)......
  • 两表比对无M版(Power Query)
    问题:两表比对,结果如下A10:E13中的显示,要求,不使用自定义的M函数,全部使用PowerQuery的内置功能。let源=Table.NestedJoin(表1,{"单号"},表2,{"单号"},"表2",JoinKind.FullOuter),#"展开的“表2”"=Table.ExpandTableColumn(源,"表2",{"单号"......
  • PowerShell-get-counter-算机上找不到任何性能计数器集: 错误 800007d0
    #已经解决了,感谢国外大神的解答:https://techcommunity.microsoft.com/t5/windows-powershell/get-counter-could-not-find-any-performance-counter-sets-on-the/m-p/3811330/thread-id/6430#M6433 获取计数器:在192.168.50.101计算机上找不到任何性能计数器集:错误80000 ......
  • 服务器上安装Power BI Data Gateway
    安装时注意事项  服务器开通好网络策略,例如一些相关的目标地址和IP加到服务器防火墙里,服务器可以联网后,还需要做浏览器相关设置,如下:   1)浏览器Tools->Internetoptions->security->customlevel->Scripting->Enableactivescripting&enablescriptingofJavaapple......
  • #PowerBi 10分钟学会,以X为结尾的聚合函数
    前言在PowerBI中,我们经常需要对数据进行聚合计算,比如求和、求平均、求最大值等。PowerBI提供了一系列的聚合函数,可以用来对表中列的值进行聚合然后返回一个值。这些函数通常只需要一个参数,就是要聚合的列名。如SUM(‘销售表’[销量]),就是求销售表里的销量总和。但是有时候,我......