はじめに
益盛さんがこちらで紹介しているように、環境の払い出しにあたり申請を効率化したい。ということは管理者の方がよく考えることです。
そんなとき使われるのがPower Platformの管理コネクタやPowerShellなどなのですが、今回はその前段階となる申請フォームで欲しくなるDLP Policyの内容をPower Appsで表示する方法についてまとめたいと思います。
DLP Policyとは?という方はこちらの公式ドキュメントをご確認ください。
簡単に説明すると、ユーザーが意図せず組織のデータを外部に公開してしまうリスクを低減するために利用可能なコネクタを制限する設定のことです。
参考
DLP Policyをキャンバスアプリで管理するアプリは以前CoE Starter Kitにて公開されていました。
Versionは4.11のときにはまだキャンバスアプリで公開されていました。
アプリの名前は"DLP Editor V2"です。
こんな感じのアプリです。
これをベースにして記載します。(元の式はあまり変えずに記載します。)
アプリの解析
DLP Policy一覧を表示する
"管理者向けPowerPlatform"コネクタを追加します。
DLP Policyを一覧表示するにはギャラリーの Item
に以下を設定します。
管理者向けPowerPlatform.ListPoliciesV2().value
DLP Policyの名前を表示するためには、ラベルなどに ThisItem.displayName
を設定します。
ThisItem.name
ですと、表示名ではなく内部Idが取得されますのでご注意ください。
コネクタの割り当てを表示する
まずは選択されたポリシーの情報を一度変数にいれます。
PolicyGal.OnSelect
Set( varSelectedPolicy, PolicyGal.Selected ); ClearCollect( col_connectorGroups, PolicyGal.Selected.connectorGroups );
次にコネクターの情報を取得します。
PolicyGal.OnSelect
Clear( col_connGroups ); ForAll( col_connectorGroups, Collect( col_connGroups, { classification: col_connectorGroups[@classification], connectors: Filter( col_connectorGroups[@connectors], Not("Microsoft.ProcessSimple" in id) && name <> "Content Conversion"), sortOrder: Switch(col_connectorGroups[@classification], "Confidential", 1, "General", 2, "Blocked", 3) }); Collect( col_nonDefaultConnectors, col_connectorGroups[@connectors] ); ); Clear(col_connectors); Concurrent( ClearCollect( col_standardConnectors, 作成者向けPowerApps.GetConnectors({'$filter':"environment eq '~Default'", '$top':1000 }).value ); , ClearCollect( col_virtualConnectors, RenameColumns(管理者向けPowerPlatform.ListVirtualConnectors(), metadata, properties) ); , ClearCollect( col_unblockableConnectors, 管理者向けPowerPlatform.ListUnblockableConnectors() ); //,ClearCollect( col_desktopFlowConnectors, PowerAppsforMakers.GetConnectors({'$filter':"connectorType%20eq%20%27DesktopFlow%27", '$top':1000 }).value ); ); Collect( col_connectors, Filter( col_standardConnectors, properties.isCustomApi = false) );
もとの式だとこのようになっており、既定グループが除外されるようになっていますので今回は除外しました。
ForAll( col_connectorGroups, If( col_connectorGroups[@classification] <> varSelectedPolicy.defaultConnectorsClassification, Collect( col_connGroups, { classification: col_connectorGroups[@classification], connectors: Filter( col_connectorGroups[@connectors], Not("Microsoft.ProcessSimple" in id) && name <> "Content Conversion"), sortOrder: Switch(col_connectorGroups[@classification], "Confidential", 1, "General", 2, "Blocked", 3) }); Collect( col_nonDefaultConnectors, col_connectorGroups[@connectors] ); ); );
この情報をもとにまずは、"Business"、"Non-Business"、"Blocked"のグループを表示させます。
ギャラリーを用意して以下のように設定します。
ConnectorGroupGal.Items
SortByColumns(col_connGroups, "sortOrder")
ギャラリーの中にラベルを追加して対象のグループにいくつのコネクタが存在しているのかを表します。
こんな感じです。
Label.Text
Switch( ThisItem.classification, "Confidential", "Business", "General", "Non-Business", "Blocked", "Blocked" ) & " (" & CountRows(ThisItem.connectors) & ")" & If( ThisItem.classification = varSelectedPolicy.defaultConnectorsClassification, " | Default" )
続いてギャラリーを追加して対象のポリシーにあるコネクタを表示させます。
SortByColumns( Filter( col_connectors, id in ConnectorGroupGal.Selected.connectors.id, txtSearch.Text in properties.displayName), "name")
恐らく以下情報を表示させたいと思うので、それぞれどのように表示させるか記載しておきます。
プロパティ | 式 |
---|---|
アイコン | ThisItem.properties.iconUri |
名前 | ThisItem.properties.displayName |
クラス | LookUp(col_connectors, id=ThisItem.id).properties.tier |
公開元 | LookUp(col_connectors, id=ThisItem.id).properties.publisher |
おわりに
あくまでもここで紹介したのは最小限(?)の構成ですので、ちゃんと利用したい場合は実際のアプリを見てもらった方が良いと思います。