初めまして、私はPower Platformを利用して業務アプリの制作や支援を主に行っています。
最近PCに搭載されたモデルが発表され、世間の注目を集めているCopilot(副操縦士の意)は日々進化を遂げています。そこで、Copilot先生と共にステップバイステップでPower Automate Flowを作成する試みに挑戦し、その過程で得られるコツを紹介するBlogその3です。
前回の記事では書き出し用Excelブックの準備まで完了しています。
ターゲット:一般事務など・開発初心者
おさらい
今回の目標
今回は、SharePoint REST APIを使用してSharePoint Groupのメンバー一覧を取得するフローを敢えて構築することにします。トリガーを日本時間の毎日00:00に設定し、出力形式をExcelブックにします。
テンプレートは、Power Automateが効率的な構成を事前に用意した、多くの人に適するフローです。これを活用しない手はありません!基本的には、このテンプレートを自分の好みに合わせて修正し、独自の業務フローを作成するのが最も迅速な方法です。今回は、このPOINTを無視して目的の業務フローをCopilotが提示するコネクタを使って組み立ててみます。
完成を目指す
#ME:
What steps are required to output the results of an HTTP request to SharePoint to Excel?
和文:SharePoint への HTTP リクエストの結果を Excel に出力するにはどのような手順が必要ですか?
この結果を基にExcelに出力する手順を確認します。
#Copilot
To output the results of an HTTP request to SharePoint to Excel using Power Automate, you can follow these steps:
Create a flow in Power Automate that triggers the HTTP request to SharePoint.Use the “Get items” action to retrieve the data from SharePoint.Add an action to create a new Excel file or update an existing Excel file with the retrieved data.- Map the SharePoint data to the Excel file columns.
- Run the flow to export the SharePoint data to Excel.
手順④.マップする
Map the SharePoint data to the Excel file columns.
Power Automateで「マップする」とは、JSONデータを連想配列に変換することを指します。最初の記事で取得したSharePointグループは、直接使用することはできません。先にJSONを解析し、Excelのテーブルの列に適合させる作業が必要です。
JSON化の方法は、前回の記事で「OData.typeを判定するためのJSON」アクションについて解説しましたので、そちらをご覧ください。
配列の作成
配列の作成には「組み込み – データの操作 – 選択」コネクタを使用します。
今回のJSONスキーマは以下の構造になっています。
{
"type": "object",
"properties": {
"d": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
<item Schema>
}
}
}
}
}
}
ここで必要なのは”items”内の配列構造です。
「選択」コネクタの入力には、スキーマの”items”より上位にある”results”を「動的コンテンツ」から指定します。Mapでは、出力するExcelテーブルの列の順序に合わせてキーを設定し、それに対応する値を「動的コンテンツ」から選びます。
今回は「Id」、「グループ名を表すTitle」、「グループの所有者名を表すOwner Title」を選択しました。
事前に各キーがどのような値を持つかをテストの実行結果から確認します。
{
"d": {
"results": [
{
"__metadata": {
"id": "Id",
"uri": "uri",
"type": "SP.Group"
},
"Owner": {
"__deferred": {
"uri": "uri"
}
},
"Users": {
"__deferred": {
"uri": "REST APIに対するメンバー一覧取得用のフルパスが記載されている"
}
},
"Id": 0,
"IsHiddenInUI": false,
"LoginName": "EX1_365Room メンバー",
"Title": "EX1_365Room メンバー",
"PrincipalType": 8,
"AllowMembersEditMembership": true,
"AllowRequestToJoinLeave": false,
"AutoAcceptRequestToJoinLeave": false,
"Description": null,
"OnlyAllowMembersViewMembership": false,
"OwnerTitle": "EX1_365Room 所有者",
"RequestToJoinLeaveEmailSetting": ""
},
{...}
]
}
}
“__metadata”にはSharePoint REST APIに対するエンドポイント情報が記載されています。
この情報の活用方法をマスターすれば、メンバー一覧の取得時にもURLの設定が比較的容易になるでしょう。
今回はJSON解析時に前工程をテスト実施した”Body”全体を指定しました。
JSONを解析する際に、「results」以下のスキーマを指定することで、「Body」を選択時の入力として指定できるようになります。
これで基本的な部分は完成です。次に、Excel Online For Businessのコネクタを活用してデータを追加していきましょう。
手順⑤.Excelブックにデータを出力する
まず、事前に取得して配列を作成したSharePointグループの一覧を出力ファイルのテーブルに出力します。
Excel Online For Businessのコネクタは直感的に設定でき、Copilotの助けをほとんど必要としないように設計されています。
作成した配列をテーブルに書き込む。
この例では出力ファイル名が日々変わるため、テーブルの情報を静的に取得することはできません。
事前準備として、テンプレートファイルのテーブル名を”SharePointGroups”に設定しています。テーブル名と列情報がわかれば、列情報が一致する行を追加できます。
テーブルを動的ファイル名に指定する際には、「○○をカスタム値として使用する」を必ずクリックしてください。カスタムデータの指定がないと、エラーが発生します。
「Excel出力用配列(SPG)」で”Output 項目”を行として設定すると、アクションコネクタはFor eachループによって囲まれます。
これは、Power Automateが自動的に解析した結果であり、「Output 項目」がOutput配列の行データであるため、連想配列として作成された項目をそれぞれ抽出する処理です。
メンバー一覧書き出し用ワークシートとテーブルを作成する
現在、書き出し用ファイルの[SharePointGroups]ワークシート内の”SharePointGroups”テーブルに1行が追加されています。次に、現在のSharePointグループ名をワークシート名とする新しいワークシートを作成し、そのワークシートにテーブルを追加する処理を行います。
項目内の[Title]を参照する値を名前として数式に設定します。
数式内の「?」は参照を意味します。
item()?['Title']
ワークシートにテーブルを正確に作成するためには、「ワークシート名!開始セル」という形式で表の範囲を指定します。
ワークシート名に空白文字 ” ” が含まれている場合、「ワークシート名!開始セル」とすると参照エラーが生じることがあります。そのため、ワークシート名をシングルクォート[‘]またはダブルクォート[“]で囲むことで正しく参照できるようにします。
'outputs("ワークシートを作成のアクション名")?['Body/name']'!開始セル
テーブル名は任意の値を設定します。
SharePointグループのメンバーを取得しテーブルに追加する
ここからはこれまでの内容のおさらいになります。
アクション | コネクタ |
---|---|
SPGメンバーの取得 | Send an HTTP request to SharePoint |
SPGメンバー出力用JSON | Parse JSON(JSONの解析) |
SPGメンバー出力用配列 | Select(選択) |
表にメンバーを追加 | 表に行を追加 |
設定は上記の対応表に基づきますが、SPGメンバーの取得を除き、その他は既にこの記事で説明されているため省略します。
SharePoint REST APIに対するエンドポイント(URL)の特定
インターネットで検索すると多様な方法が見つかりますが、今回はSharePointグループを取得する際のHTTPレスポンスからメンバー一覧(users)へのURLを特定する方法を探してみます。
{
"d": {
"results": [
{
"__metadata": {
"id": "https://siteDomain/sites/EX1_365Room/_api/Web/SiteGroups/GetById(5)",
"uri": "https://siteDomain/sites/EX1_365Room/_api/Web/SiteGroups/GetById(5)",
"type": "SP.Group"
},
"Owner": {
"__deferred": {
"uri": "https://siteDomain/sites/EX1_365Room/_api/Web/SiteGroups/GetById(5)/Owner"
}
},
"Users": {
"__deferred": {
"uri": "https://siteDomain/sites/EX1_365Room/_api/Web/SiteGroups/GetById(5)/Users"
}
},
"Id": 5,
"IsHiddenInUI": false,
"LoginName": "EX1_365Room メンバー",
"Title": "EX1_365Room メンバー",
"PrincipalType": 8,
"AllowMembersEditMembership": true,
"AllowRequestToJoinLeave": false,
"AutoAcceptRequestToJoinLeave": false,
"Description": null,
"OnlyAllowMembersViewMembership": false,
"OwnerTitle": "EX1_365Room 所有者",
"RequestToJoinLeaveEmailSetting": ""
},
{...}
]
}
}
“__metadata”の下に”Users”が存在し、さらに”__deferred”と”uri”というメンバが含まれていることがわかります。必要なURLは”uri”メンバの’_api’以降の部分です。このGetById()関数の括弧内には、SharePointグループのIDを指定します。
この例では、For eachループを使用しており、最初にテーブルに書き込まれた行の[‘Id’]列を参照しています。実行すると、次のようなHTTPレスポンスが返されます。
{
"d": {
"results": [
{
"__metadata": {
"id": "https://siteDomain/sites/EX1_365Room/_api/Web/GetUserById(7)",
"uri": "https://siteDomain/sites/EX1_365Room/_api/Web/GetUserById(7)",
"type": "SP.User"
},
"Alerts": {
"__deferred": {
"uri": "https://siteDomain/sites/EX1_365Room/_api/Web/GetUserById(7)/Alerts"
}
},
"Groups": {
"__deferred": {
"uri": "https://siteDomain/sites/EX1_365Room/_api/Web/GetUserById(7)/Groups"
}
},
"Id": 7,
"IsHiddenInUI": false,
"LoginName": "c:0o.c|federateddirectoryclaimprovider|GUID-Id",
"Title": "EX1_365Room メンバー",
"PrincipalType": 4,
"Email": "exsample@siteDomain",
"Expiration": "",
"IsEmailAuthenticationGuestUser": false,
"IsShareByEmailGuestUser": false,
"IsSiteAdmin": false,
"UserId": null,
"UserPrincipalName": null
}
]
}
}
メンバー一覧は「results」という配列要素で取得されました。このデータをJSONで解析し、配列に変換した後、事前に作成したテーブルに書き込んでいきます。
これで今回の目的は達成できました。
この記事の内容は、そのままあなたの環境に適用しても問題なく動作するので、ぜひ実際に試して、Copilotの使い方をマスターしてください。
Copilotの検証を終えて
この記事を執筆するにあたり、私はPower Automateに初めて触れる一般事務職員であり、開発の初心者です。その観点から検証を行いましたが、Copilotの支援だけでは開発のハードルが高いと感じました。
公式発表によると、まだプレビュー版であるため、完璧なアクションの提供は難しいとされています。しかし、事前に準備されたシナリオに適合するフローでは、ほぼ完璧に機能するケースもあるようです。
また、Windowsに標準装備されているCopilotアプリや、EdgeのサイドバーからアクセスできるCopilotを使用すると、開発作業をより迅速に進めることができます。
また、この記事で紹介されていないCopilot For Power Automateに関する情報については、関連するガイドを参照してください。
コメント