はじめに
Power Appsでのグループ情報を取得して操作する方法を備忘録を兼てまとめます。
Power Appsでグループを操作する
Office 365 Groups
ListGroups
ListGroups を利用することで組織内のグループ一覧を取得することができます。
自分が所有者でもなく、また所属もしていないグループも取得することができます。
文字通りすべてのグループです。
Microsoft 365グループ、セキュリティグループどちらも取得することができます。
securityEnabled プロパティを確認することでセキュリティグループであるかどうかを確認できそうですが、

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

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

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

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

ListOwnedGroupsV2
ListOwnedGroupsV2 を利用することで自身が所有しているグループの一覧を取得することができます。
所有しているグループのみなので、所属しているグループは取得できません。
Microsoft 365グループ、セキュリティグループどちらも取得することができます。
取得できるプロパティは ListGroups と同じです。
モニターで確認してみると /me/ownedObjects リソースを取得しているようですね。
ListOwnedGroupsV3
ListOwnedGroupsV3 を利用することで自身が所有、もしくは所属しているグループの一覧を取得することができます。
自分が所有者でもなく、また所属もしていないグループは取得できません。
こちらはMicrosoft 365グループのみで、セキュリティグループは取得することができません。
取得できるプロパティは ListGroups と同じです。
なぜセキュリティグループは取得できないのか、、、
モニターで確認してみると /me/memberOf リソースを取得しているようですね。
ListGroupMembers
ListGroupMembers を利用することで指定したグループに所属しているメンバーを取得できます。
所有者は取得できません。
Office 365グループ、セキュリティグループともに取得することができます。
Graph API
自身が所属しているグループの一覧表示
以下3種のグループの種類に分けて自身がメンバーのグループを一覧表示させます。
- Microsoft 365 Groups
- 配布リスト
- セキュリティ グループ
これを行うためには標準アクションでは行えないのでGraph APIを実行して取得します。
「Microsoft 365グループ」を取得するためには groupTypes が Unified であるものを取得します。
「配布リスト」を取得するためには groupTypes が Unified でなく、 securityEnabled が true でないものを取得します。
「セキュリティグループ」を取得するためには groupTypes が Unified でなく、 securityEnabled が true であるものを取得します。
これを式にすると以下になります。
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 系アクションはバージョンが異なっているのに非推奨になっているわけではなく、アクションが異なるってちょっとややこしいですよね。

