Copilot を活用した Power Automate Flow作成 #3

Copilot for Power Automate
この記事は約14分で読めます。

初めまして、私は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:

  1. Create a flow in Power Automate that triggers the HTTP request to SharePoint.
  2. Use the “Get items” action to retrieve the data from SharePoint.
  3. Add an action to create a new Excel file or update an existing Excel file with the retrieved data.
  4. Map the SharePoint data to the Excel file columns.
  5. 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メンバー出力用JSONParse 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に関する情報については、関連するガイドを参照してください。

この記事を書いた人

岩本敏彦

コメント

タイトルとURLをコピーしました