PowerAutomateのコネクタ情報をより詳しく取得する方法

# 本記事の目的
PowerAutomateに関してPowerAUtomateDesktopの無償化フィーバーもひと段落した感がありますが、GW最終日ということでPowerAutomateのクラウドフローに関してちょっとしたネタを共有しようかと思います。

# Power Automateコネクタ情報に付随するデータ
現状、PowerAutomateのコネクタに関して「Power Automate Management」コネクタの「List Connectors」アクションを用いてEnvironmentで利用可能なコネクタの情報を参照している方もいらっしゃるかと思います。
この「List Connectors」アクションの出力データに関して、デフォルトでは利用不可な追加データが既に準備されているので生の出力データを自前のJson Schemaで検証することにより追加情報をデータとして利用可能です。
現時点で私が把握している追加データは以下の通りです。

- Publisher  
文字通りコネクタの発行元企業。PowerAutomateリリース当初から用意されているような古いコネクタはサードパーティサービスのコネクタでもMicrosoftになっていることが多いです。
ただ、最近はサービス提供企業自身がPublisherになっているコネクタもだいぶ増えてきています。

- IsFirstParty  
Microsoftが提供するサービスのコネクタかどうかを示す項目だと推察されます(PowerAutomateのドキュメントに記載されていない模様)。
基本的にTrueとFalseが設定されています。
2021年5月現在ではすべてのコネクタにTrueもしくはFalseが設定されているわけではなく、比較的最近更新もしくは新規追加されたコネクタから徐々に値が設定されているようで、現在値が空なコネクタも多数あります。

生データを見ていると「Capabilities」とか「Scope」とか「wont」とか気になるキーワードがいろいろ含まれていますが現時点で個人的に利用可能だと判断したのは上記の2つのみです。
Publisherはあまり利用価値があるとは言い難いですが、isFirstPartyはDLPの機能が公開されてからずっと個人的に欲していた「Microsoft謹製サービス用コネクタか否か」を判別できると思しき情報なので今すぐにでも利用したいと考えて自前でJson Schemaを組むことにしました。
(追記：よくデータを見たところ、OneDrive for BusinessはIsFirstPartyがTrueで個人用のOneDriveはFalseなので単純にMS謹製サービスかどうかではないかもしれません。やはり正式提供まで様子見した方がいいかもしれませんね。)
ちなみに、今は「List Connectors」が標準で出力するデータに「Connector Tier」というStandardかPremiumかを示すデータが用意されていますが、これも以前は標準では出力されず自前のJson Schemaでしか取り出せなかったと記憶しているので、IsFirstPartyもデータがそろえばいつか標準で出力されるようになるかもしれません。

#自前のJson Schemaと処理方法
「List Connectors」の出力データ全体に対するJson Schemaを作るのではなく、コネクタ情報の配列をApply to Eachに渡してから個々のコネクタ情報に分割して1つのコネクタ情報に適用するJson Schemaを用意しました。
こうすることで、コネクタの更新情報を確認する際、追加もしくは更新されたコネクタの発行元やIsFirstPartyのデータを確認しやすくすることが可能です。
現状私が利用しているJson Schemaは以下の通りです。
とはいっても、ゼロから自前で組んだわけではなく、「List Connectors」アクションの出力データからコネクタ1つ分のデータを抜き出し、「Parse Json」のSchemaの「Generate from Sample」に食わせただけです。
かなり前に作ったものなので記憶が不確かですが、もしかしたらちょっと弄っているかもしれません。

<pre>
{
    "type": "object",
    "properties": {
        "name": {
            "type": "string"
        },
        "id": {
            "type": "string"
        },
        "type": {
            "type": "string"
        },
        "properties": {
            "type": "object",
            "properties": {
                "displayName": {
                    "type": "string"
                },
                "connectionParameters": {
                    "type": "object",
                    "properties": {
                        "token": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string"
                                },
                                "oAuthSettings": {
                                    "type": "object",
                                    "properties": {
                                        "properties": {
                                            "type": "object",
                                            "properties": {
                                                "IsFirstParty": {
                                                    "type": "string"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "metadata": {
                    "type": "object",
                    "properties": {
                        "source": {
                            "type": "string"
                        },
                        "brandColor": {
                            "type": "string"
                        },
                        "stackOwner": {
                            "type": "string"
                        },
                        "useNewApimVersion": {
                            "type": "string"
                        },
                        "version": {
                            "type": "object",
                            "properties": {
                                "previous": {
                                    "type": "string"
                                },
                                "current": {
                                    "type": "string"
                                }
                            }
                        }
                    }
                },
                "capabilities": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "description": {
                    "type": "string"
                },
                "createdTime": {
                    "type": "string"
                },
                "changedTime": {
                    "type": "string"
                },
                "releaseTag": {
                    "type": "string"
                },
                "tier": {
                    "type": "string"
                },
                "publisher": {
                    "type": "string"
                }
            }
        }
    }
}
</pre>

「List Connectors」アクションの「value」出力を「Apply to each」に食わせて、ループ内の「Current Item」にこのJson Schemaを適用すればPublisherとIsFirstPartyがデータとして「Apply to each」ループ内の後段のアクションで利用可能です。

![PowerAutomateImg01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239862/be4654da-bf9e-7869-aa08-aff68bc841db.png)

ループの外でIsFirstPartyを利用する場合は配列を用意して一度コネクタ情報をループ内で配列に追加するなどしないと利用できないので注意。

IsFirstPartyが標準出力として提供されるまで待てないせっかちなPowerAUtomatorはぜひ使ってみてください。