以下の内容はhttps://koruneko.hatenablog.com/entry/2024/09/23/223443より取得しました。


Power Appsでグループ情報を取得する


スポンサードリンク

はじめに

Power Appsでのグループ情報を取得して操作する方法を備忘録を兼てまとめます。

Power Appsでグループを操作する

Office 365 Groups

ListGroups

ListGroups を利用することで組織内のグループ一覧を取得することができます。

自分が所有者でもなく、また所属もしていないグループも取得することができます。
文字通りすべてのグループです。

Microsoft 365グループ、セキュリティグループどちらも取得することができます。

learn.microsoft.com

securityEnabled プロパティを確認することでセキュリティグループであるかどうかを確認できそうですが、

learn.microsoft.com

実際にはAzure PortalMicrosoft Entra管理センターから作成されたグループは securityEnabled が常に true となるので必ずしもこのプロパティを確認することでセキュリティグループであるかどうかを判断することはできません。

learn.microsoft.com

厳密に判断するのであれば groupTypes も併せて確認する必要がありますが、こちらのプロパティを確認する必要があります。

ただし Office365グループ.ListGroups().value アクションではこのプロパティを扱うことはできません。

応答みるに /groups を叩いているだけなので groupTypes も取れているんですけどね。
残念。。。

ListOwnedGroupsV2

ListOwnedGroupsV2 を利用することで自身が所有しているグループの一覧を取得することができます。

所有しているグループのみなので、所属しているグループは取得できません。

Microsoft 365グループ、セキュリティグループどちらも取得することができます。

learn.microsoft.com

取得できるプロパティは ListGroups と同じです。

モニターで確認してみると /me/ownedObjects リソースを取得しているようですね。

ListOwnedGroupsV3

ListOwnedGroupsV3 を利用することで自身が所有、もしくは所属しているグループの一覧を取得することができます。

自分が所有者でもなく、また所属もしていないグループは取得できません。

こちらはMicrosoft 365グループのみで、セキュリティグループは取得することができません。

learn.microsoft.com

取得できるプロパティは ListGroups と同じです。

なぜセキュリティグループは取得できないのか、、、

モニターで確認してみると /me/memberOf リソースを取得しているようですね。

ListGroupMembers

ListGroupMembers を利用することで指定したグループに所属しているメンバーを取得できます。
所有者は取得できません。

Office 365グループ、セキュリティグループともに取得することができます。

learn.microsoft.com

Graph API

自身が所属しているグループの一覧表示

以下3種のグループの種類に分けて自身がメンバーのグループを一覧表示させます。

  • Microsoft 365 Groups
  • 配布リスト
  • セキュリティ グループ

これを行うためには標準アクションでは行えないのでGraph APIを実行して取得します。

Microsoft 365グループ」を取得するためには groupTypesUnified であるものを取得します。
「配布リスト」を取得するためには groupTypesUnified でなく、 securityEnabledtrue でないものを取得します。
「セキュリティグループ」を取得するためには groupTypesUnified でなく、 securityEnabledtrue であるものを取得します。

これを式にすると以下になります。

UpdateContext(
    {
        searchMyGroupResult:
            With(
                {
                    groupType:
                        Switch(
                            TabList1.Selected.Value,
                            "Microsoft 365 Groups", "groupTypes eq 'Unified'",
                            "配布リスト", "groupTypes ne 'Unified' and securityEnabled ne true",
                            "セキュリティ グループ", "groupTypes ne 'Unified' and securityEnabled eq true",
                            Blank()
                        ),
                    searchTerm:
                        Concat(
                            Filter(
                                [
                                    If(
                                        !IsBlank(txtInputGroup.Value),
                                        $"""displayName:{EncodeUrl(txtInputGroup.Value)}"""
                                    ),
                                    If(
                                        !IsBlank(txtInputMail.Value),
                                        $"""mail:{txtInputMail.Value}"""
                                    )
                                ],
                                ThisRecord.Value <> Blank()
                            ),
                            ThisRecord.Value,
                            " AND "
                        )
                },
                Office365グループ.HttpRequest(
                    $"https://graph.microsoft.com/v1.0/me/memberOf?$filter={groupType}{If(!IsBlank(searchTerm),$"&$search={searchTerm}")}&$orderby=displayName&$count=true",
                    "GET",
                    "",
                    {
                        CustomHeader1: "ConsistencyLevel: eventual"
                    }
                )
            )
    }
);

ついでにグループの表示名やグループメールアドレスで検索できるようにしています。

自身が所有者のグループの一覧表示

自身が所有者のグループは /me/ownedObjects で取得することができます。

UpdateContext(
    {
        searchOwnGroupResult:
            With(
                {
                    groupType:
                        Switch(
                            TabList1_1.Selected.Value,
                            "Microsoft 365 Groups", "groupTypes eq 'Unified'",
                            "配布リスト", "groupTypes ne 'Unified' and securityEnabled ne true",
                            "セキュリティ グループ", "groupTypes ne 'Unified' and securityEnabled eq true",
                            Blank()
                        ),
                    searchTerm:
                        Concat(
                            Filter(
                                [
                                    If(
                                        !IsBlank(txtInputGroup_1.Value),
                                        $"""displayName:{EncodeUrl(txtInputGroup_1.Value)}"""
                                    ),
                                    If(
                                        !IsBlank(txtInputMail_1.Value),
                                        $"""mail:{txtInputMail_1.Value}"""
                                    )
                                ],
                                ThisRecord.Value <> Blank()
                            ),
                            ThisRecord.Value,
                            " AND "
                        )
                },
                Office365グループ.HttpRequest(
                    $"https://graph.microsoft.com/v1.0/me/ownedObjects?$filter={groupType}{If(!IsBlank(searchTerm),$"&$search={searchTerm}")}&$orderby=displayName&$count=true",
                    "GET",
                    "",
                    {
                        CustomHeader1: "ConsistencyLevel: eventual"
                    }
                )
            )
    }
);

グループの所有者の取得

グループの所有者は /groups/{group id}/owners で取得することができます。

UpdateContext(
    {
        groupOwners:
            Office365グループ.HttpRequest(
                $"https://graph.microsoft.com/v1.0/groups/{ThisItem.Value.id}/owners",
                "GET",
                ""
            )
    }
);

おわりに

Power AppsでMicrosoft Entraのグループ情報を取得する方法のまとめでした。

Office 365 Groupsコネクタの ListOwnedGroups 系アクションはバージョンが異なっているのに非推奨になっているわけではなく、アクションが異なるってちょっとややこしいですよね。




以上の内容はhttps://koruneko.hatenablog.com/entry/2024/09/23/223443より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14