【PowerAutomate】SharePointのリストからJSON配列を作りArrayFilterでさらに絞り込む


概要

事前に構築しているアドレス帳というリストに登録されているデータの中から、GroupがAの情報をJSON配列として保持し、そのJSON配列から指定した条件のデータだけにさらにJSON配列を加工するPowerAutomateのフローを作成します。

実際にはリストから条件を指定して目的の情報を一発で抽出することも可能なのですが、
単純にPowerAutomateで使いそうなJSON配列とArrayFilterを活用したかったというだけで、
意味ありそうなフローを構築してみました。

フローの全体像

今回構築するフローの全体像は以下の通りです。
PowerAutomateのアクションは、日本語だったり英語だったり、日本語のものでもアクションの検索ボックスでヒットしなかったり、使いづらさを感じますね。。。

それぞれのフローの解説

手動でフローをトリガーします

PowerAutomateのフローには、そのフローを実行するきっかけとなるトリガーが必要です。
ここでは手動でフローをトリガーするというトリガーを利用しています。

JSON配列を格納する変数を定義

コネクタ アクション
変数 変数を初期化する

listsという名前で配列(Array)型の変数を初期化しています。
アドレス帳のリスト情報から抽出したデータを格納するために利用します。

{
    "inputs": {
        "variables": [
            {
                "name": "lists",
                "type": "array"
            }
        ]
    }
}

SharePointのリストからデータを取得

コネクタ アクション
SharePoint 複数の項目の取得

SharePointに作成済みのアドレス帳リストから、Group=Aのデータ(3件)だけを抽出します。

{
    "inputs": {
        "host": {
            "connectionName": "shared_sharepointonline",
            "operationId": "GetItems",
            "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline"
        },
        "parameters": {
            "dataset": "https://younameisyu.sharepoint.com/sites/Microsoft365",
            "table": "4cc19b07-a334-4aab-a1fb-dca9fb70195a",
            "$filter": "Group eq 'A'"
        },
        "authentication": {
            "type": "Raw",
            "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"
        }
    }
}

取得したデータをJSON配列に格納

コネクタ アクション
コントロール Apply to each
データ操作 作成
変数 配列変数に追加

SharePointのアドレス帳リストから、Group=Aのデータを取得し、その宛先情報をJSONオブジェクトにして、配列(lists)に追加しています。
JSONの構造としては、"name"に宛先の名前を、"mail"にメールアドレスをセットしています。

作成
{
    "inputs": {
        "name": "@items('Apply_to_each')?['Title']",
        "mail": "@items('Apply_to_each')?['Address']"
    }
}
配列変数に追加
{
    "inputs": {
        "name": "lists",
        "value": "@outputs('作成')"
    }
}

JSON配列の中身を一旦確認する

コネクタ アクション
データ操作 HTML テーブルの作成

上記までで作成されたJSON配列の中身を一旦確認するために、HTMLテーブルの作成というアクションを利用します。
テスト実行した際の結果として確認しやすいので利用しています。

JSON配列から指定した条件のデータだけ抽出する

コネクタ アクション
データ操作 アレイのフィルター処理

このArrayFilterを使ってみるためだけに利用しているのですが、ここではほげ 三郎以外のデータだけを抽出しています。

{
    "inputs": {
        "from": "@variables('lists')",
        "where": "@not(equals(item()?['mail'], '[email protected]'))"
    }
}

テスト実行

ここで構築したフローをテスト実行してみます。
最終的にHTMLテーブルの作成の結果として出ているのが、ほげ太郎とほげ次郎の2人分のアドレス帳データとなっていることがわかります。

本当はGroup=Aに一致するデータの中にほげ三郎も含まれますが、ほげ三郎だけは除外するようにArrayFilterで条件していしているので、期待した結果となっていますね。