初めまして、私は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を指定します。
{
  "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に関する情報については、関連するガイドを参照してください。
この記事を書いた人


 
  








コメント