1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowerAutomateでC#のカスタムコードを使って文字列のハッシュを計算する

Last updated at Posted at 2021-11-09

はじめに

PowerAutomate には多くのアクションがあらかじめ用意されていますが、プログラミングをしていると当たり前にあってほしいアクションが用意されていなかったりします。

文字列を MD5 でハッシュするといったアクションも PowerAutomate には最初から用意されていないアクションの一つです。この記事では、少し前に実装された PowerAutomate で C#のコードをそのままカスタムコネクターにする機能を使って、PowerAutomate にハッシュ計算用のカスタムコネクターを作成していきます。

カスタムコードの概要

PowerAutomate のカスタムコードを利用すると、自前で実行環境を用意することなく、あらかじめカスタムコネクタとして登録した C# のカスタムコードを PowerAutomate や PowerApps から簡単に呼び出すことができます。

カスタムコードの制限

スクリプトの内容や実行に関しては次のような制限があります。

  • スクリプトは ScriptBase クラスを継承した Script クラス内に全て記載する必要がある
  • インポート済みの名前空間のみ利用可能(外部ライブラリの参照は行えない)
  • スクリプトの実行は 5 秒以内に完了する
  • スクリプトのサイズは 1MB までにする
  • 外部に通信する場合は、コンテキスト内の SendAsync メソッドを利用する

カスタムコネクタの作成

では、早速作っていきましょう。

まずは、+ カスタムコネクタの新規作成 ボタンをクリックし、一から作成をクリックしてコネクタの作成を開始します。コネクタ名は ComputeHash としました。
image.png
image.png
1.全般では、最低限ホスト名を入力する必要があります。今回はカスタムコードを利用するのでなんでも良いのですが、適当なホスト名がない場合はマイクロソフトのテストでよく使われる contoso.com のホスト名を入れておくと良いでしょう。
image.png
今回は認証などの仕組みは導入しないので、2.セキュリティはそのままにして 3.定義に進みます。
+新しいアクションをクリックしてコネクタに含まれるアクションを追加していきます。
概要と 操作 IDMD5 という名前を設定し、+ サンプルからのインポートをクリックしてアクションの引数を定義します。
image.png
value で指定された文字列の MD5 ハッシュを計算したいので、URL としては下記のようなリクエストを想定しています。

GET Md5?value=hoge

サンプルからのインポート画面で次のように設定してインポートボタンをクリックします。
image.png
このようなパラメーターが作成されました。
image.png

PowerAutomate で扱いやすいように返却の型定義もしておきます。今回は下記のようなレスポンスを返却する予定なので

{
  "origin": "test",
  "hashedString": "CY9rzUYh03PK3k6DJie09g=="
}

応答+既定の応答を追加するからサンプルをもとにインポートします。
image.png
image.png

とりあえずここまで出来たらコネクタの作成ボタンから作成しておきましょう。
image.png

カスタムコードの記述

カスタムコネクタの側ができたら、コード(プレビュー)に移動してカスタムコードを登録します。まずはコードが無効をクリックしてコードが有効にします。
image.png
操作のドロップダウンでカスタムコードを適用するアクションを選択します。今回は前のページで定義した MD5 というアクションをカスタムコードに流すので MD5 のチェックを ON にします。
image.png

コードエディターが有効になるので、おもむろに下記のコードをペーストします。
カスタムコードでは一つのクラスしか登録できないため、1.全般 タブで割り振った 操作 ID(OperationId) を元に処理を分岐して複数のアクションに対応しています。
今回ハッシュ計算に利用している System.Security.Cryptography.MD5 やクエリ文字列をパースしている System.Web.HttpUtility などはインポート済みの名前空間に含まれるので利用可能ですが、使いたいクラスが利用できない場合もあるので注意してください。

Script.cs
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;
    }
}

貼り付けたら、✓ コネクタの更新をクリックしてコネクタを保存します。
関数のデプロイが始まり、問題が無ければコネクタが更新されます。
image.png
カスタムコード上に文法上の誤りや、デプロイなどに問題がある場合は画面上部にエラーメッセージが表示されるので、メッセージを確認して対応します。
image.png
5.テストで動作確認をしたらコネクタの作成は完了です。
image.png

作成したカスタムコネクタの利用

作成したカスタムコネクタはカスタムタブに表示されます。他のアクション同様利用することができます。
image.png
image.png

おわりに

カスタムコネクタ自体の開発体験には少し難がありますが、いくつかの制限はありますがこれまでのようにクラウド上のリソースを気にすることなく独自のコードをサクッとホストして PowerAutomate から利用できるのはとても楽で良いですね。

参考にしたページ

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?