はじめに
PowerAutomate には多くのアクションがあらかじめ用意されていますが、プログラミングをしていると当たり前にあってほしいアクションが用意されていなかったりします。
文字列を MD5 でハッシュするといったアクションも PowerAutomate には最初から用意されていないアクションの一つです。この記事では、少し前に実装された PowerAutomate で C#のコードをそのままカスタムコネクターにする機能を使って、PowerAutomate にハッシュ計算用のカスタムコネクターを作成していきます。
カスタムコードの概要
PowerAutomate のカスタムコードを利用すると、自前で実行環境を用意することなく、あらかじめカスタムコネクタとして登録した C# のカスタムコードを PowerAutomate や PowerApps から簡単に呼び出すことができます。
カスタムコードの制限
スクリプトの内容や実行に関しては次のような制限があります。
- スクリプトは ScriptBase クラスを継承した Script クラス内に全て記載する必要がある
- インポート済みの名前空間のみ利用可能(外部ライブラリの参照は行えない)
- スクリプトの実行は 5 秒以内に完了する
- スクリプトのサイズは 1MB までにする
- 外部に通信する場合は、コンテキスト内の SendAsync メソッドを利用する
カスタムコネクタの作成
では、早速作っていきましょう。
まずは、+ カスタムコネクタの新規作成
ボタンをクリックし、一から作成
をクリックしてコネクタの作成を開始します。コネクタ名は ComputeHash としました。
1.全般
では、最低限ホスト名を入力する必要があります。今回はカスタムコードを利用するのでなんでも良いのですが、適当なホスト名がない場合はマイクロソフトのテストでよく使われる contoso.com
のホスト名を入れておくと良いでしょう。
今回は認証などの仕組みは導入しないので、2.セキュリティ
はそのままにして 3.定義
に進みます。
+新しいアクション
をクリックしてコネクタに含まれるアクションを追加していきます。
概要と 操作 ID
に MD5
という名前を設定し、+ サンプルからのインポート
をクリックしてアクションの引数を定義します。
value
で指定された文字列の MD5 ハッシュを計算したいので、URL としては下記のようなリクエストを想定しています。
GET Md5?value=hoge
サンプルからのインポート
画面で次のように設定してインポートボタンをクリックします。
このようなパラメーターが作成されました。
PowerAutomate で扱いやすいように返却の型定義もしておきます。今回は下記のようなレスポンスを返却する予定なので
{
"origin": "test",
"hashedString": "CY9rzUYh03PK3k6DJie09g=="
}
応答
の+既定の応答を追加する
からサンプルをもとにインポートします。
とりあえずここまで出来たらコネクタの作成
ボタンから作成しておきましょう。
カスタムコードの記述
カスタムコネクタの側ができたら、コード(プレビュー)
に移動してカスタムコードを登録します。まずはコードが無効
をクリックしてコードが有効
にします。
操作のドロップダウンでカスタムコードを適用するアクションを選択します。今回は前のページで定義した MD5 というアクションをカスタムコードに流すので MD5 のチェックを ON にします。
コードエディターが有効になるので、おもむろに下記のコードをペーストします。
カスタムコードでは一つのクラスしか登録できないため、1.全般
タブで割り振った 操作 ID
(OperationId) を元に処理を分岐して複数のアクションに対応しています。
今回ハッシュ計算に利用している System.Security.Cryptography.MD5
やクエリ文字列をパースしている System.Web.HttpUtility
などはインポート済みの名前空間に含まれるので利用可能ですが、使いたいクラスが利用できない場合もあるので注意してください。
public class Script: ScriptBase
{
public override async Task<HttpResponseMessage> ExecuteAsync()
{
await Task.CompletedTask;
return Context.OperationId switch
{
"MD5" => ComputeMd5(),
_ => new HttpResponseMessage(HttpStatusCode.BadRequest)
};
}
private HttpResponseMessage ComputeMd5()
{
var query = HttpUtility.ParseQueryString(Context.Request.RequestUri?.Query ?? string.Empty);
var origin = query.AllKeys.Any(_ => _ == "value")
? query["value"] : string.Empty;
var hashedString = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(origin));
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = CreateJsonContent((new JObject
{
["origin"] = origin,
["hashedString"] = hashedString,
}).ToString());
return response;
}
}
貼り付けたら、✓ コネクタの更新
をクリックしてコネクタを保存します。
関数のデプロイが始まり、問題が無ければコネクタが更新されます。
カスタムコード上に文法上の誤りや、デプロイなどに問題がある場合は画面上部にエラーメッセージが表示されるので、メッセージを確認して対応します。
5.テスト
で動作確認をしたらコネクタの作成は完了です。
作成したカスタムコネクタの利用
作成したカスタムコネクタはカスタムタブに表示されます。他のアクション同様利用することができます。
おわりに
カスタムコネクタ自体の開発体験には少し難がありますが、いくつかの制限はありますがこれまでのようにクラウド上のリソースを気にすることなく独自のコードをサクッとホストして PowerAutomate から利用できるのはとても楽で良いですね。
参考にしたページ