本文由网友
蓝创精英团队投稿,欢迎转载、分享オリジナル:Blue Creation Elite Team
原文へのリンク:https//www.example.com
実際、PADには現在の公式文書には外部コンポーネントやプラグイン開発インターフェイスはありません。
しかし、RPAの分野では、“潘淳”や“潘総兄”など、志を同じくする友人もいます。
ドアがある限り、世界があります。ドアがあります。ここではドアがあります。結局、. NET Frameworkなので、研究や学習がはるかに簡単になります。
コンポーネントの開発環境
デフォルトのコンポーネントの場所は、現在のアプリケーションの下のこのディレクトリです。
C:\Program Files (x86)\Power Automate Desktop\custom-modules
自分の住所に従って申請します。
さらに、プラグインDLLにはDLLコード署名が必要です。
デフォルトでは、システムの信頼できるルート認証局に個人署名を使用します。
お金があれば、コード署名を購入できます。
現時点では、私の側には他の良い方法がありませんが、署名は大きく2つに分かれています。1つはドメイン名証明書SSLとコード署名で、それらは同じではなく、混在することはできません。
概要は以下の通り。

最も単純なデモ。
開発プロセスに直接従い、最後にまとめます。
新規ブランクソリューション
新しいソリューション(空のソリューション)を追加する

新規コンポーネントライブラリ
コンポーネント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
以下のパッケージです。
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の名前と一致しない方が良いです。そうすればディスプレイが簡単になります
コンポーネントコンテンツの表示の大まかな規則
通过对 组件名 或者 类型 以及 类属性 分割。
増加する。
- _FriendlyName
- _Description
- _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に署名する
この場合、VSがインストールされている限り、このツール(signtool.exe)で署名します。
もちろん、私も提供します。
一个签名的 bat 脚本(默认签名密码为 123456)


署名に必要なのはこれら2つのアセンブリだけで、他の参照nugetライブラリは必要ありません。
主要是YZG.Modules.HelloWorld.Actions.dll和zh-Hans\YZG.Modules.HelloWorld.Actions.resources.dll放到签名的地方

batをダブルクリックして署名する

署名は成功した。また、DLL上で右クリックすると、署名情報が表示されます。

ターゲットマシンに証明書をインストールする
証明書を購入した場合は、当然インストールする必要はありません。直接承認されます。それ以外の場合は、証明書をインストールします。
証明書のインストールは非常に簡単で、ダブルクリックしてパスワードを入力し、指定した場所を選択します。

直接次のステップ

次のステップ

信頼できるルート局の选択


そして、完了、インポートするかどうか、はい、OK、OK。
输入 CMD 命令( certmgr.msc ) 就可以看到指定分组下就有你的证书了。
これで証明書がインストールされます。
コンポーネントの配備
アプリケーションサービスが終了する場合、

そうでなければ、DLLは占有される。
次に,署名した項目をインストールディレクトリ下の指定プラグインディレクトリに置くと,おおよそ次のようになる.
また、私はCディスクであり、** 許可の問題があります。他のディスクにインストールするのが最善です。

次に、PADアプリケーションを実行し、新しいタスクフローを作成するか、タスクフローを編集します。
次の問題が発生した場合、証明書がターゲットマシンにインストールされていません。

通常、PADのデザインビューを開くと、次のようになります。

機能テストケースが追加されました->挨拶して機能を追加しました。
試してみましょう

保存後は以下の通り。

最後に、実際の動きを見ることができ、非常に効果的です。

問題の処理
- まず、中国語の問題が表示されない場合は、中国語言語パックを追加することをお勧めします。名前はコードと一致する必要があります。
- 第二に、ロードが失敗し、エラーが表示され、エラープロンプトに従って修正するか、欠落した参照パッケージを追加することができます。
- 第三に、より多くの詳細は、より多くを掘り下げて試すことができる。
拡張アセンブリのパラメータ情報
私の側では、ネチズン(潘淳)の要約と私自身の要約に基づいて、また、そのような文書を出力します。
ActionBaseに必要な関連パラメータ


関連する組み込み型

また、マスターの要約に感謝します。
仕上げました
これを書くのは本当に簡単ではありません。特にPADは、コンポーネントを識別するときには、さまざまな問題があります。
何度も何度も何度も試してみましょう
幸いにも、私はこの拡張機能に基づいてSqliteコンポーネントを書きました。サンプルもお送りします。長老たちのために。