rpa之pad(power automate desktop)組件開發

rpa之pad(power automate desktop)組件開發

只要有一扇門,就會有一個世界,現在已經有了一扇門

最后更新 2022/5/30 下午9:24
蓝创精英团队
预计阅读 8 分钟
分类
.NET
标签
.NET C# RPA

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

原文作者:藍創精英團隊

原文連結:https://blog.csdn.net/i2blue/article/details/125040323


其實,pad,現在官方文檔還沒有對外組件式或者插件式開發接口。

但是,有一些志同道合的朋友,比如(潘淳),潘總大佬,在 rpa 領域,還是很牛逼的。

只要有一扇門,就會有一個世界,現在已經有了一扇門(畢竟是.net framework,那麼,研究借鑑就容易多了)。

組件開發環境

默認組件的位置是在當前應用下的這個目錄

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

應用地址,按照你自己的來。

另外,插件的 dll,是需要 dll 代碼簽名了。

默認採用個人簽名,放到系統 受信任的根證書頒發機構 即可。

如果有錢,可以買個代碼簽名。

目前,我這邊還沒別的好的方式,其中,簽名大致分為兩種,一種是域名證書 ssl,和 代碼簽名,它們之間是不一樣的,不能混用。

大致目錄如下:

最簡單的 demo

準備直接按照開發流程走一遍,最後,再總結。

新建空白解決方案

默認新增一個解決方案(空的解決方案)

新增組件庫

組件 dll 名要滿足以下 規則

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

而,官方的組件包是這樣子的

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

所以,我這邊也按照官方的標準走。

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

打招呼組件項目

默認方案從打招呼開始

引用開發 dll 包

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

下的這幾個 dll 包

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

當然,如果你用的過程中,提示,需要哪個包,你也可以引入進來。

引入完,效果如下:

增加打招呼邏輯

以下就是全部邏輯代碼

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

增加國際化支持

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

首先,我們增加一個中文的資源文件(另外可以參考官網路徑下的語言包來看內部結構分析)

組件顯示大致規則

組件的名字從哪裡來

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

參考如上信息,接下來,我們對打招呼程式進行中文內容填充。

實際中文內容

我這邊增加了這些內容

增加組件項目簽名

有錢的自己搞代碼簽名證書,沒錢的,按照我這個臨時自發證書先來。

創建臨時證書

來創建一個新的簽名(記得 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 的設計視圖,會如下所示:

已經新增了一個功能 測試案例 -> 打招呼 並新增了一個功能。

我們試一下

保存後如下所示

最後,可以看下實際的動作,效果很不錯的說。

問題處理

  • 第一,中文不顯示的問題,建議增加中文語言包,裡面的名字要跟代碼相匹配,具體可以參考示例。
  • 第二,加載不出來,提示錯誤,可以根據錯誤提示修改,或者添加缺失的引用包。
  • 第三,更多細節,只能多挖掘和嘗試了

擴展組件的參數信息

我這邊根據網友(潘淳)的總結以及自己的總結,也輸出一個這樣的文檔出來。

actionbase 需要的相關參數

以及內置的相關類型

這裡也感謝潘淳大佬的總結

完結

完結撒花,寫這個還真不容易,特別是 pad,識別你的組件的時候,會有各種各樣的問題。

這個時候就要重試好多遍,好多遍。

不過還好,我已經基於這個能擴展的組件,寫了一個 sqlite 的組件。也會發到示例了。供大佬們參考。

引用

https://github.com/kesshei/PADDemo

Keep Exploring

延伸阅读

更多文章