Power Appsユーザー一覧便利アプリ実用アプリ

【Power Apps】コネクタのアクションで取得したユーザーのメールアドレス一覧をコレクションに格納するアプリの作り方

Power Apps

この記事では以下の記事で紹介したユーザーを複数取得できるコネクタのアクションを複数用いて、選択したユーザーをコレクションに格納するアプリの作り方を紹介します。

この記事は、Power Apps Advent Calendar 2023 12月5日担当分の記事です。

完成系

冒頭紹介した記事に出てきたアクションを使用して、4パターンでユーザーを選択できるようになっています。

M365(SharePointサイト+Teams)
Teamsのタグ
アプリのユーザー
フロー所有者

選択したユーザーを;で区切ったものをクリップボードにコピーできるようになっています。

発展ver

アプリ/フローの権限変更

アプリやフローの権限を色々なユーザーグループを用いて便利に変更するアプリの作り方
Power AppsやPower Automateの共有って地味に面倒ですよね。この記事ではアプリ/フローの共有をM365グループ(Teamsのチーム・SharePointサイト)TeamsのタグPo...

作り方

ユーザー一覧への入力パラメーター設定コンボボックス

ユーザーをどのコネクタで一覧出力するかを選択するドロップダウン(DropdownUsersCat)

ドロップダウンを配置し、プロパティをそれぞれ入力します。

プロパティ
OnChangeReset(ComboBoxSearch1);
Reset(ComboBoxSearch2)
Items["M365", "タグ", "アプリユーザー", "フロー所有者"]
Default"M365"

チームや環境を選択するコンボボックス(ComboBoxSearch1)

M365グループの場合はM365グループの一覧を、タグの場合はチームの一覧を、それ以外の場合は環境の一覧を選択できるようにしています。

環境の選択のみdisplayNameの格納場所が異なっていたり、idがname列に格納されていたりしているため、RenameColumns関数、ShowColumns関数やAddColumns関数を使用して列名を合わせています。

IfError(
    If(
        DropdownUsersCat.Selected.Value = "M365",
        Office365グループ.ListOwnedGroupsV2().value,
        DropdownUsersCat.Selected.Value = "タグ",
        MicrosoftTeams.GetAllTeams().value,
        RenameColumns(
            ShowColumns(
                AddColumns(
                    作成者向けPowerApps.GetEnvironments().value,
                    "displayName",
                    properties.displayName
                ),
                "displayName", "name"
            ),
            "name", "id"
        )
    ), 
    Table({displayName:"", id:""})
)
If(
    DropdownUsersCat.Selected.Value in ["アプリユーザー", "フロー所有者"],
    First(RenameColumns(
        ShowColumns(
            AddColumns(
                作成者向けPowerApps.GetEnvironments().value,
                "displayName",
                properties.displayName
            ),
            "displayName", "name"
        ),
        "name", "id"
    ))
)
プロパティ
DisplayFields["displayName","description"]
SearchFields["displayName"]
InputTextPlaceholderIf(
DropdownUsersCat.Selected.Value = "M365",
"M365グループの選択",
DropdownUsersCat.Selected.Value = "タグ",
"チームの選択",
"環境の選択"
)

タグ・アプリやフローを選択するコンボボックス(ComboBoxSearch2)

タグの場合はタグの一覧を、アプリの場合はアプリの一覧を、フローの場合はフローの一覧を選択できるようにしています。

こちらも列名を揃えるために、RenameColumns関数、ShowColumns関数やAddColumns関数を使用しています。

プロパティ
DisplayFields["displayName","description"]
SearchFields["displayName"]
InputTextPlaceholderIf(
DropdownUsersCat.Selected.Value = "タグ",
"タグの選択",
"ユーザーの選択"
)
VisibleDropdownUsersCat.Selected.Value <> "M365"
IfError(
    If(
        DropdownUsersCat.Selected.Value = "タグ",
        ShowColumns(MicrosoftTeams.GetTags(ComboBoxSearch1.Selected.id).value, "id", "displayName"),
        DropdownUsersCat.Selected.Value = "アプリユーザー",
        RenameColumns(ShowColumns(AddColumns(作成者向けPowerApps.GetApps().value, "displayName", properties.displayName), "name", "displayName"), "name", "id"),
        DropdownUsersCat.Selected.Value = "フロー所有者",
        RenameColumns(ShowColumns(AddColumns(PowerAutomate管理.ListMyFlows(ComboBoxSearch1.Selected.id).value, "displayName", properties.displayName), "name", "displayName"), "name", "id")
    ), 
    Table({displayName:"", id:""})
)

出力ギャラリー

出力ギャラリー(GalleryUsersResult)

コンボボックスの選択結果に応じて一覧表示する項目を変化させます。

こちらも列名を合わせるために数式が長くなっています。

IfError(
    If(
        DropdownUsersCat.Selected.Value = "タグ",
        RenameColumns(ShowColumns(MicrosoftTeams.GetTagMembers(ComboBoxSearch1.Selected.id, ComboBoxSearch2.Selected.id).value, "userId"), "userId", "id"),
        DropdownUsersCat.Selected.Value = "M365",
        Office365グループ.ListGroupMembers(ComboBoxSearch1.Selected.id).value,
        DropdownUsersCat.Selected.Value = "アプリユーザー",
        RenameColumns(ShowColumns(作成者向けPowerApps.GetAppRoleAssignment(ComboBoxSearch2.Selected.id).value, "name"), "name", "id"),
        DropdownUsersCat.Selected.Value = "フロー所有者",
        RenameColumns(ShowColumns(PowerAutomate管理.ListFlowOwners(ComboBoxSearch1.Selected.id, ComboBoxSearch2.Selected.id).value, "name"), "name", "id")
    ), 
    Table({name:"", id:""})
)

ギャラリー内の画像(Image1)

UserPhotoMetadataを使用して画像がある時のみアイコン画像を表示するようにしています。

IfError(
    If(
        Office365ユーザー.UserPhotoMetadata(ThisItem.id).HasPhoto,
        Office365ユーザー.UserPhotoV2(ThisItem.id),
        SampleImage
    ), ""
)

ギャラリー内のラベル(Label1)

ユーザーのIDをUserProfileV2を使用してユーザーの表示名に変換しています。

IfError(Office365ユーザー.UserProfileV2(ThisItem.id).displayName, "")

ギャラリー内のアイコン(Icon1)

既に選択済みの場合は×、未選択の場合は+アイコンを表示し、それぞれのアイコンで処理を切り替えています。

条件式はIconプロパティにのみ記載し、その他のプロパティではアイコンの種類に連動させるようにするのがミソです。

If(
    Self.Icon = Icon.CancelBadge,
    RemoveIf(ColOrgUsers,id =ThisItem.id),
    Collect(ColOrgUsers, {id:ThisItem.id})
)
If(
    ThisItem.id in ColOrgUsers.id,
    Icon.CancelBadge,
    Icon.Add
)
If(
    Self.Icon = Icon.CancelBadge,
    RGBA(215, 58, 60, 1),
    RGBA(56, 96, 178, 1)
)

全選択(ButtonCanvasSelectAllUsers)

GalleryUsersResultに表示されているユーザーをコレクションに格納します。

Collect(
    ColOrgUsers,
    GalleryUsersResult.AllItems.id
)

全削除(ButtonCanvasDeleteAllUsers)

GalleryUsersResultに表示されている選択済みのユーザーをコレクションから削除します。

RemoveIf(
    ColOrgUsers,
    id in GalleryUsersResult.AllItems.id
)

選択ギャラリー

選択ギャラリー(GallerySelectedUsers)

ItemsプロパティにColOrgUsersを設定するだけです。

また、ギャラリー内の画像とラベルはGalleryUsersResultと同じです。

ギャラリー内のアイコン(Icon2)

IconプロパティをIcon.CancelBadgeに設定し、OnSelectプロパティを以下に設定します。

RemoveIf(ColOrgUsers,id = ThisItem.id)

全削除(ButtonCanvasDeleteSelectedUsers)

Clear(ColOrgUsers)

選択したユーザーの;区切りメールアドレス出力部分

選択したユーザーの;区切りメールアドレス(TextInput1)

Concat(ColOrgUsers,Office365ユーザー.UserProfileV2(id).mail & ";")

リセットボタン(IconReset)

Reset(TextInput1)

コピーボタン(IconCopy)

Copy(TextInput1.Text);
Notify("コピーしました。")

コメント

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