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.pswp.cn/news/286729.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286729.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286729.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【地圖學】高斯-克呂格(Gauss-Kruger)投影原理、應用詳解(3°帶、6°帶)

一、高斯克呂格投影概述 德國數學家、物理學家、天文學家高斯于19 世紀20 年代擬定,后經德國大地測量學家克呂格于1912 年對投影公式加以補充,故稱為高斯-克呂格投影(Gauss-Kruger,簡稱GK),又名"等角橫切橢圓柱投影”。中央經線和赤道投影為相互垂直的直線,其它經線…

Linux安裝 微信開發者工具(deepin linux ubt)

一.環境:: deepin linux15.4.1 二.安裝過程: 2.1 安裝wine sudo apt-get install wine 2.2 安裝nwjs-sdk 2.2.1 下載linux版nwjs-sdk wget https://dl.nwjs.io/v0.25.4/nwjs-sdk-v0.25.4-linux-x64.tar.gz 2.2.2 解壓nwjs-sdk tar xvf nwjs-sdk-v0.25.4-linux-x64.tar.gz 2.2…

Python 3.6學習筆記(一)

開始之前 基礎示例 Python語法基礎&#xff0c;python語法比較簡單&#xff0c;采用縮緊方式。 # print absolute value of a integer a 100 if a > 0:print(a) else:print(-a) 可以看到&#xff0c;注釋以#開頭&#xff0c;python的變量不需要任何前綴&#xff0c;行結束不…

小程序的 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…

Docker 日志最佳實踐

當運行在 docker 容器中的應用程序打印日志時&#xff0c;日志會輸出到標準輸出流 stdout 和標準錯誤流 stderr。容器日志驅動可以訪問這些流&#xff0c;并將日志發送到文件、本機運行的日志收集器或遠端的日志服務端點&#xff08;endpoint&#xff09;。本文將介紹選擇不同的…

Android之提示A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution

1 問題 編譯項目的時候提示錯誤如下 A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution 2 原因 有2次我寫room數據庫的時候都提示這個 ColumnInfo(name "isAddBookmark")var isAddBookmark falseColumnInfo(name "…

一個獲取a標簽傳值的函數

//獲取url查詢參數 var getUrlParams function () {var href"",params;return function (key,url) {if(url) {href url;params null;} else if(!url && !href) href window.location;//console.log(href);if(!params) {params {};var search href.sea…

【大地信】新時代GIS發展趨勢與未來展望

一、你必須知道的國內外知名學者 1. RogerTomlinson(羅杰湯姆林森)---GIS之父 Roger Tomlinson從1963年開始創建世界上第一個地理信息系統,即加拿大地理信息系統(CGIS)。因此,Tomlinson被譽為地理信息系統之父。 RogerTomlinson(1933.12---2014.2.9) 2. Michael Fran…

Python3.6學習筆記(二)

Python 的高級特性 切片 對于指定索引范圍取值的操作&#xff0c;Python提供了slice方法&#xff0c;類似于Excel中數據透視表的切片器。 >>> L [Michael, Sarah, Tracy, Bob, Jack’] #聲明一個List&#xff0c;取前三個值 >>> L[0:3] #表示從0開始&…

小程序獲取頭像試試水 02《 程序員變現指南之 微信QQ 小程序 真的零基礎開發寶典》

本系列教程是針對粉絲的變現教程&#xff0c;還不是粉絲的可以關注我并且到社區&#xff1a;https://bbs.csdn.net/topics/603436232 進行打卡&#xff0c;不是老粉的也可以獲取最終的技術變現學習&#xff0c;最終還有詳細的變現教程等你來。 前言 《 程序員變現指南之 微信…

VNX NETAPP NAS 備份恢復

做多少次快照的時間是自定義 的&#xff0c;例如可以每隔4小時做一次。 例如有A&#xff0c;B&#xff0c;C&#xff0c;D四個文件。 1&#xff09;第一次快照&#xff08;COW&#xff09;&#xff1a; 快照是瞬時的&#xff0c;拍照時候創建了一個快照空間&#xff0c;例如20%…

Git之cherry-pick命令

1 需求 有時需要把某遠程分支(比如dev分支)的某一次提交合并到另一遠程分支(比如master分支),這就需要用到git cherry-pick命令。 比如我們現在有0.1分支和0.2分支,我在0.1分支上提交了最后一次代碼,推上去了,現在需要合并這次提交到0.2 2 操作步驟 我們先到0.1分支…

【空間數據庫】時空數據庫,時態數據模型詳解

一、時態空間數據庫概述 現實世界的數據不僅與空間相關,而且與時間相關。在許多應用領域,如環境監測、搶險救災、交通管理、醫療救援等,相關數據隨著時間變化而變化,稱之為時態數據。很多空間數據庫應用都涉及時態數據,這些應用不僅需要存取空間數據庫的當前狀態,也需要存…

輸出日志實例改成用Spring的AOP來實現

1.采用Interception Around通知的形式實現 Interception Around通知會在Join Point的前后執行&#xff0c;實現Interception Around通知的類需要實現接口MethodInterceptor。其實現思路是&#xff1a; 1&#xff09;首先實現接口MethodInterceptor&#xff0c;在Invoke()方法里…

基于.NetCore開發博客項目 StarBlog - (9) 圖片批量導入

系列文章基于.NetCore開發博客項目 StarBlog - (1) 為什么需要自己寫一個博客&#xff1f;基于.NetCore開發博客項目 StarBlog - (2) 環境準備和創建項目基于.NetCore開發博客項目 StarBlog - (3) 模型設計基于.NetCore開發博客項目 StarBlog - (4) markdown博客批量導入基于.N…

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;便可在系統…

【空間數據庫】空間數據庫引擎(Spatial DataBase Engine)ArcSDE詳解

一、空間數據庫引擎概述 空間數據庫引擎的概念最早由ESRI提出。ESRI對SDE的定義是:從空間數據管理的角度看,SDE是一個連續的空間數據模型,借助這一模型,我們可以將空間數據加人到關系數據庫系統( RDBMS)中去。 SDE可以理解為基于特定的空間數據模型,在特定的數據存儲、數…