Power AppsやPower Automateの共有って地味に面倒ですよね。
この記事ではアプリ/フローの共有を
- M365グループ(Teamsのチーム・SharePointサイト)
- Teamsのタグ
- Power Appsアプリのユーザー
- Power Automateフローの共同所有者
から設定できるようにしたアプリの作り方を紹介し、msappファイルを共有します。
またこの記事は以下の記事の続きですので、ぜひこちらも合わせてご覧ください。
この記事は、Power Apps Advent Calendar 2023 12月1日担当分の記事です。
完成系
アプリ/フロー選択画面
環境・アプリ/フローを選択して権限を変更する画面です。個別にユーザーを追加・削除することが可能です。
画面右上の複数追加ボタンをクリックするとユーザー変更画面に遷移します。
ユーザー変更画面
アプリ/フロー選択画面で選択したアプリ/フローのユーザーを変更できます。
ユーザーはM365グループ、Teamsのタグ、他のアプリ/フローのユーザーから取得して、まとめて追加することが可能です。
また選択したユーザーの;区切りメールアドレスも出力されているので、Outlookの宛先にも使用することができます。
msappのダウンロード
こちらから.msappファイルをダウンロードして、実際にアプリを動かしてみてください。
データソースは使用していないので、すぐに使用することができます。
アプリやフローの権限を他のユーザーグループから設定するアプリ(ShareAppsApp)
主要箇所のコード説明
アプリ/フローの一覧(GalleryItems)
If(
TabList1.Selected.Value = "Power Apps",
Filter(作成者向けPowerApps.GetApps().value, properties.environment.name = Lower(ComboboxCanvasEnviroments.Selected.name)),
AddColumns(PowerAutomate管理.ListMyFlows(ComboboxCanvasEnviroments.Selected.name).value, "id", "")
)
画面上部のコンボボックスで選択した環境でアプリ/フローをフィルターしています。
GetApps内でフィルタークエリが使用できないエラーが発生してしまうので、エラーなく記述する方法をご存知の方は教えてください。
またアプリの権限変更にPermissionIDが必要なため、PowerAutomate管理.ListMyFlowsにid列を追加しています。
アプリ/フローのユーザー一覧(GalleryUsers)
AddColumns(
If(
TabList1.Selected.Value = "Power Apps",
作成者向けPowerApps.GetAppRoleAssignment(GalleryItems.Selected.name).value,
PowerAutomate管理.ListFlowOwners(ComboboxCanvasEnviroments.Selected.name, GalleryItems.Selected.name).value
),
"ユーザー名",
Office365ユーザー.UserProfileV2(name).displayName
)
GalleryItemsで選択したアプリ/フローのユーザーを一覧表示しています。
name列にユーザーIDが格納されているので、AddColumns関数でユーザーの表示名列を作成しています。
Appsのみユーザー権限の変更(DropdownCanvasUserRole)
ユーザーのロールを表示・変更するドロップダウンです。
Appsのみ表示したり、Owner権限は変更不可だったりという制御が入っています。
作成者向けPowerApps.EditAppRoleAssignment(
GalleryItems.Selected.name,
{
'$filter':"enviroment eq '" & ComboboxCanvasEnviroments.Selected.name & "'",
put:
[
{
properties:
{
principal:
{
tenantId:Host.TenantID,
id:ComboboxCanvasUser.Selected.Id,
email:"",
type:""
},
roleName: Self.Selected.Value,
NotifyShareTargetOption: "2"
}
}
]
}
)
ユーザーの権限を削除するボタン(ButtonCanvasDeleteUser)
ユーザーの権限を削除するためのボタンです。
Owner権限は削除不可になっています。
If(
TabList1.Selected.Value = "Power Apps",
作成者向けPowerApps.EditAppRoleAssignment(
GalleryItems.Selected.name,
{
'$filter':"enviroment eq '" & ComboboxCanvasEnviroments.Selected.name & "'",
delete:[{id:GalleryItems.Selected.id & "/permissions/" & GalleryUsers.Selected.name}]
}
),
PowerAutomate管理.ModifyFlowOwners(
ComboboxCanvasEnviroments.Selected.name,
GalleryItems.Selected.name,
{
delete:
[
{
properties:
{
principal:
{
id:ThisItem.properties.principal.id,
type:"User"
}
}
}
]
}
)
)
ユーザー検索コンボボックス(ComboboxCanvasUser)
ユーザーを検索するコンボボックスです。
Office365ユーザー.SearchUserV2({searchTerm:Self.SearchText,isSearchTermRequired:false}).value
ユーザー追加ボタン(ButtonCanvasAddUser)
ComboboxCanvasUserで選択したユーザーを追加するボタンです。
If(
TabList1.Selected.Value = "Power Apps",
作成者向けPowerApps.EditAppRoleAssignment(
GalleryItems.Selected.name,
{
'$filter':"enviroment eq '" & ComboboxCanvasEnviroments.Selected.name & "'",
put:
[
{
properties:
{
principal:
{
tenantId:Host.TenantID,
id:ComboboxCanvasUser.Selected.Id,
email:"",
type:""
},
roleName: "CanEdit",
NotifyShareTargetOption: "2"
}
}
]
}
),
PowerAutomate管理.ModifyFlowOwners(
ComboboxCanvasEnviroments.Selected.name,
GalleryItems.Selected.name,
{
put:
[
{
properties:
{
principal:
{
id:ComboboxCanvasUser.Selected.Id,
type:"User"
}
}
}
]
}
)
)
ユーザー変更画面に遷移するボタン
ユーザーのコレクションへの格納と、ユーザーを複数選択する画面に遷移するボタンです。
ClearCollect(
ColOrgUsers,
ShowColumns(
AddColumns(
GalleryUsers.AllItems,
"id",
properties.principal.id,
"role",
properties.roleName
),
"id",
"role"
)
);
Navigate(Screen2)
選択した結果に応じてユーザーの権限を変更するボタン(IconModifyUserRole)
ここまでの操作を一括で反映させるボタンです。
テーブルの型を合わせれば処理も数式も短くなりますが、今回は汎用性を考慮してForAllで繰り返し処理にしました。
削除処理は減分を取得して削除しています。
ForAll(
Filter(ColOrgUsers, role <> "Owner"),
If(
TabList1.Selected.Value = "Power Apps",
作成者向けPowerApps.EditAppRoleAssignment(
GalleryItems.Selected.name,
{
'$filter':"enviroment eq '" & ComboboxCanvasEnviroments.Selected.name & "'",
put:
[
{
properties:
{
principal:
{
tenantId:Host.TenantID,
id:ThisRecord.id,
email:"",
type:""
},
roleName: ThisRecord.role,
NotifyShareTargetOption: "2"
}
}
]
}
),
PowerAutomate管理.ModifyFlowOwners(
ComboboxCanvasEnviroments.Selected.name,
GalleryItems.Selected.name,
{
put:
[
{
properties:
{
principal:
{
id:ThisRecord.id,
type:"User"
}
}
}
]
}
)
)
);
ForAll(
//減分
Filter(
GalleryUsers.AllItems,
Not(name in ColOrgUsers.id)
),
If(
TabList1.Selected.Value = "Power Apps",
作成者向けPowerApps.EditAppRoleAssignment(
GalleryItems.Selected.name,
{
'$filter':"enviroment eq '" & ComboboxCanvasEnviroments.Selected.name & "'",
delete:[{id:GalleryItems.Selected.id & "/permissions/" & ThisRecord.name}]
}
),
PowerAutomate管理.ModifyFlowOwners(
ComboboxCanvasEnviroments.Selected.name,
GalleryItems.Selected.name,
{
delete:
[
{
properties:
{
principal:
{
id:ThisRecord.name,
type:"User"
}
}
}
]
}
)
)
);
Back()
コメント