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

本文由网友蓝创精英团队投稿,欢迎转载、分享

原文作者:蓝创精英团队

原文链接:https://blog.csdn.net/i2blue/article/details/125040323


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

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

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

组件开发环境

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

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

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

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

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

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

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

大致目录如下:

8a05a2f046b673a79089682d9a633d32.png

最简单的Demo

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

新建空白解决方案

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

bba6203d1f6f36e63e7dcd9e3e5bc12d.png

新增组件库

组件DLL名要满足以下 规则

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

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

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

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

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

3494336158a5ffffee904bcfe128cf1e.png

打招呼组件项目

默认方案从打招呼开始

引用开发DLL包

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

下的这几个DLL包

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

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

引入完,效果如下:

890cf0b0c9974acd4b9de7afb2af6c7f.png

增加打招呼逻辑

以下就是全部逻辑代码

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

fe60b1d21ac6e2c77cfebb4231290c17.gif

组件显示大致规则

组件的名字从哪里来

913f5650bdc44046825148c14dc2a60c.png

是从程序集信息里的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 连接"

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

实际中文内容

我这边增加了这些内容

bea9c780e5b78e39534048ade1307160.png

增加组件项目签名

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

创建临时证书

2e582ac91e718e5c5241c6eb3d554979.png

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

5a3ca8a9fe04d5e45a99ec0dee361bb3.png

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

a1ebb7f1b01eb609e0198c3622d9ea9b.png

给组件DLL签名

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

当然,我也会提供出来。

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

d22573ed18c3ee0e7e5571789c0168b7.png1c37cbaff4ec005b7a87065be8da6952.png

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

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

583768ed8e2a345ba091cb03b305806f.png

双击bat进行签名

f7be0deb075f8656e04ef1d69d21db9a.png

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

c3903bbbf6d7826e5352134df2b40671.png

目标机器上安装证书

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

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

6c9a3b6d5cfa6dee173ac5585312d00b.png

直接下一步

d0ea1dac002e75444339e477dbdce54c.png

下一步

a3a62cc1d7f85a6e9c9e1d134a34114a.png

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

c99961b26cc3f51d1245677d60a2d357.png7a008c0913f08fd94cc7c078a8fd8b79.png

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

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

至此,证书安装完毕。

组件部署

前提,应用服务要退出,

042e1b18271f4448b3de78b6cc084720.png

要不然,DLL会被占用。

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

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

ad60ec363ef9b816dce4dfa7c316eb88.png

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

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

721060db062d709c42dd9a0e70dc2d16.png

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

e879bd093c1488d2e99df43da1b1a727.png

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

我们试一下

a3cb173aa64cd39c354ab43a714733f8.png

保存后如下所示

8f12e4a6d8503aa33b4b50334a6863a6.png

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

ed20530fb0d694ccbcf22843422416cc.gif

问题处理

  • 第一,中文不显示的问题,建议增加中文语言包,里面的名字要跟代码相匹配,具体可以参考示例。

  • 第二,加载不出来,提示错误,可以根据错误提示修改,或者添加缺失的引用包。

  • 第三,更多细节,只能多挖掘和尝试了

扩展组件的参数信息

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

ActionBase 需要的相关参数

3e20c488c39b396c726d6e031505ab6c.png

5e5eb3c7181cee5dd77122f05e339f7b.png

以及内置的相关类型

40dea7f9bd825023804e903e7d1ae0f5.png

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

完结

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

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

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

引用

https://github.com/kesshei/PADDemo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【地图学】高斯-克吕格(Gauss-Kruger)投影原理、应用详解(3°带、6°带)

一、高斯克吕格投影概述 德国数学家、物理学家、天文学家高斯于19 世纪20 年代拟定,后经德国大地测量学家克吕格于1912 年对投影公式加以补充,故称为高斯-克吕格投影(Gauss-Kruger,简称GK),又名"等角横切椭圆柱投影”。中央经线和赤道投影为相互垂直的直线,其它经线…

小程序的 HelloWord 01《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程&#xff0c;还不是粉丝的可以关注我并且到社区&#xff1a;https://bbs.csdn.net/topics/603436232 进行打卡&#xff0c;不是老粉的也可以获取最终的技术变现学习&#xff0c;最终还有详细的变现教程等你来。 前言 《 程序员变现指南之 微信…

octave中的一些基本操作

1.矩阵的表示&#xff1a;v [1 2 2] %表示1行3列的矩阵 v [1; 2; 2] %表示3行1列的矩阵 v [1 2; 2 3; 4 5] %3*2矩阵 size(v) % 求v的行与列 length(v) %求v的列 2.几个基本矩阵的表示&#xff1a;1&#xff09;s ones(2, 4) %2*4全1矩阵 2&#xff09;m zeros(3, 4) %3…

【大地信】新时代GIS发展趋势与未来展望

一、你必须知道的国内外知名学者 1. RogerTomlinson(罗杰汤姆林森)---GIS之父 Roger Tomlinson从1963年开始创建世界上第一个地理信息系统,即加拿大地理信息系统(CGIS)。因此,Tomlinson被誉为地理信息系统之父。 RogerTomlinson(1933.12---2014.2.9) 2. Michael Fran…

小程序获取头像试试水 02《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程&#xff0c;还不是粉丝的可以关注我并且到社区&#xff1a;https://bbs.csdn.net/topics/603436232 进行打卡&#xff0c;不是老粉的也可以获取最终的技术变现学习&#xff0c;最终还有详细的变现教程等你来。 前言 《 程序员变现指南之 微信…

zookeeper 入门讲解实例 转

转 http://www.blogjava.net/BucketLi/archive/2010/12/21/341268.htmlzookeeper使用和原理探究&#xff08;一&#xff09;zookeeper介绍zookeeper是一个为分布式应用提供一致性服务的软件&#xff0c;它是开源的Hadoop项目中的一个子项目&#xff0c;并且根据google发表的&l…

小程序仿微信发现页 03《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程&#xff0c;还不是粉丝的可以关注我并且到社区&#xff1a;https://bbs.csdn.net/topics/603436232 进行打卡&#xff0c;不是老粉的也可以获取最终的技术变现学习&#xff0c;最终还有详细的变现教程等你来。 前言 《 程序员变现指南之 微信…

Silverlight与WCF之间的通信(4)silverlight以net.tcp方式调用console上寄宿的wcf服务

&#xff08;由于最近是针对一个demo进行的研究&#xff0c;在之前公开过代码结构&#xff0c;这里只是对需要改动的地方加以说明&#xff09; WCF4.0使得编写wcf服务不再那么复杂&#xff0c;去掉了许多的配置信息&#xff0c;客户端只需要一个服务地址&#xff0c;便可在系统…

Maui学习之路(一)--Windows窗体设置

Maui的学习之路作为 Maui的先行者&#xff0c;我有话要说&#xff0c;微软你为了让我成为牛 B 的程序员真的是煞费苦心&#xff0c;你一定是觉得我不够牛逼所以针对我&#xff0c;存心想气死我。好了废话不多说&#xff0c;Maui现在也算是正式发布了&#xff0c;我有点想用它来…

Git 常用命令大全

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码&#xff0c;管理私人的文档和源代码也有很多优势。 Git常用操作命令&#xff1a; 1) 远程仓库相关命令 检出仓库&#xff1a;$ git clone git://github.com/jquery/jquery.git 查看远程仓库&#…

为什么本地使用js或jquery操作cookie在谷歌浏览器chrome中不生效?

2019独角兽企业重金招聘Python工程师标准>>> 为什么本地使用js或jquery操作cookie在谷歌浏览器chrome中不生效&#xff1f;新手学习js或jquery时&#xff0c;一般是在本地调试&#xff08;前端学习一般用不到服务器端&#xff09;&#xff0c;当学习到cookie一节时&…

全解小程序猜数字游戏 04《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程&#xff0c;还不是粉丝的可以关注我并且到社区&#xff1a;https://bbs.csdn.net/topics/603436232 进行打卡&#xff0c;不是老粉的也可以获取最终的技术变现学习&#xff0c;最终还有详细的变现教程等你来。 社区有奖励 下面有投票 本文也…

sublime text 3 安装、添加命令行启动、汉化、注册码

1. 安装sublime&#xff1a; 下载&#xff1a;http://www.sublimetext.com/3 添加命令行启动&#xff1a;设置环境变量->计算机->右键属性->高级系统设置->环境变量->系统变量->Path->编辑&#xff0c;加入";安装路径"(如&#xff1a;;D:\Progr…

Linux下的用户和组

2019独角兽企业重金招聘Python工程师标准>>> 用户和组 GNU/Linux 通过用户和用户组实现访问控制 —— 包括对文件访问、设备使用的控制。Linux 默认的访问控制机制相对简单直接&#xff0c;不过还有一些更加高级的机制&#xff0c;包括 ACL 和 LDAP Authentication.…

漫画C语言 做个聊天软件你不懂也得懂

学完C语言做不出东西&#xff1f;不存在的&#xff0c;咱们做一个最“隐私”的聊天器&#xff0c;就俩人&#xff0c;你和我。咱们聊天的信息你知我知没别人知。 对了&#xff0c;本文评论区点赞、收藏抽奖。 社区也有抽奖&#xff0c;本周社区抽奖帖子 &#xff1a;https://b…

【Microstation】第一章:Microstation三维模型构建概述

MicroStation 是国际上和AutoCAD齐名的二维和三维CAD设计软件&#xff0c;第一个版本由Bentley兄弟在1986年开发完成。其专用格式是DGN&#xff0c;并兼容AutoCAD的DWG/DXF等格式。 MicroStation是Bentley 工程软件系统有限公司在建筑、土木工程、交通运输、加工工厂、离散制造…

libgdx游戏引擎开发笔记(十)SuperJumper游戏例子的讲解(篇四)---- 主游戏界面内部框架编写...

上一讲&#xff0c;我们已经实现了点击play进入游戏界面但仅仅是个黑屏 今天&#xff0c;我们就试着编写代码让它出现游戏的一些简单场景。还是在上一讲的代码基础上&#xff0c;我们创建两个类&#xff1a;World 和 WorldRenderer 1.Word类&#xff1a; 12345678910111213141…

看看《System.CommandLine》

记得之前出过几篇.net tool工具的文章&#xff0c;当时的做法是所有工具的语法分析全部自己解释&#xff0c;自己执行&#xff0c;语法的解释占了大部分时间&#xff0c;反而工具的功能被弱化了。其实微软有一个CommandLine框架在缓慢的发展着&#xff0c;至今都没有正式发布&a…

Sublime Text 3 import Anaconda 无法正常补全模块名解决办法

Sublime Text 3 Anaconda配置 在安装Sublime Text3之后我们总会安装一些插件&#xff0c;比如Python的Anaconda自动补全插件。但是&#xff0c;装好之后发现import 时无法像别的IDE里面那样自动补全模块名&#xff0c;就像图中一样&#xff1a; 解决办法在Sublime Text的git…

Android之添加固定图标到桌面

我的QQ群 1 需求 Android之添加固定图标到桌面 2 部分实现 在AndroidManifest.xml里面添加如下权限 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.android.launcher.perm…