IT Hands-on Lab

小規模組織向けIT環境の構築・運用に役立つ情報を、ハンズオン形式で紹介しています。

【Power Apps】ファイル出力機能付き メンバー一覧アプリ

PowerApps ファイル出力機能付き メンバー一覧アプリ

Microsoft社が提供するローコード開発ツール「Power Platform」のアプリ機能(Power Apps)を使用した、ファイル出力機能付きメンバー一覧アプリの作成例を紹介します。
データソースはMicrosoft Entra IDのユーザー情報を使用します。
  • 操作環境:
    • OS:Windows 11
    • Webブラウザー:Edge
  • 使用プラン:Microsoft 365 Business Premium

 

 

Entraユーザー情報によるメンバー照会

Microsoft Entra IDのユーザー情報はOutlookの連絡先で照会できますが、以下のような挙動のため、メンバー照会の要件に合わないと感じるかもしれません。

  • 更新の反映に時間がかかる
  • 環境によっては無効化したアカウントが表示される
  • 会議室等のリソースや共有アカウント等、メンバー以外のアカウントが表示される
  • Exchange Onlineのメールボックスを持たないユーザーが表示されない

 

今回は、Microsoft Entra IDのユーザー情報を活用しつつ、必要な情報に絞った上でタイムラグなく照会できるアプリをPowerAppsで作成してみたいと思います。

図表1-1 Outlook連絡先(Entra IDのユーザー情報)

図表1-1 Outlook連絡先(Entra IDのユーザー情報)

 

処理の流れ・項目の整理

処理の流れは以下の通りです。一覧画面で一覧検索とファイル出力するだけのシンプルなアプリです。

  • 一覧検索:Microsoft Entra IDからユーザー情報を取得し表示します。
  • ファイル出力:ファイル出力フローにより、画面表示されたユーザー情報をSharePointドキュメント上のCSVファイルに出力し、このファイルを起動します。

図表2-1 処理の流れ

図表2-1 処理の流れ


今回使用する項目については、Microsoft Entra IDのユーザー画面で確認します。

WebブラウザーよりMicrosoft Entra管理センターにアクセスし、左メニューの[ユーザー>すべてのユーザー]を選択します。ゲスト・無効化したユーザー、リソースはアプリに表示させないこととします。

*[ビューの管理>列の編集]にて今回使用する項目を表示しています

図表2-2 Entra管理センターのユーザー一覧

図表2-2 Entra管理センターのユーザー一覧

 

アプリに表示させるユーザーの[プロパティ]タブにて、改めて今回使用する項目を確認します。

  • 表示名(DisplayName)
  • 携帯電話番号(mobilePhone)
  • メール(Mail)
*カッコ内の英字表記はアプリ内で扱う項目名です

図表2-3 Entra管理センターのユーザー情報

図表2-3 Entra管理センターのユーザー情報

 

同じ画面の下半分です。

  • 役職(JobTitle)
  • 部署(Department)
  • 勤務先所在地(OfficeLocation)
  • 有効なアカウント(AccountEnabled)
*カッコ内の英字表記はアプリ内で扱う項目名です
*[有効なアカウント]はアプリに表示しませんが、対象ユーザーの絞り込みに使用します

図表2-4 Entra管理センターのユーザー情報の続き

図表2-4 Entra管理センターのユーザー情報の続き

 

[概要]タブのユーザー画像もアプリに表示します。
なお、ユーザー画像はユーザー本人がマイアカウント画面等から設定できます。

図表2-5 Entra管理センターのユーザー情報のユーザー画像

図表2-5 Entra管理センターのユーザー情報のユーザー画像

 

アプリの完成イメージ

先にアプリの完成イメージを紹介します。

 

まずは一覧検索機能です。

  • 左:アプリにアクセスすると、一覧画面に全メンバーが表示されます。
  • 右上:コンボボックスで部署を選択すると(複数可)、該当メンバーに絞り込みします。未選択時は全メンバーが表示されます。
  • 右下:入力欄にキーワードを入力すると、氏名に部分一致するメンバーに絞り込みします。未入力時は全メンバーが表示されます。
*コンボボックスと入力欄の両方を指定すると、両条件に合致するメンバーに絞り込みします

また、[User Ccc]メンバーのようにユーザー画像が未登録の場合、画像表示部分はブランクを設定しています。

図表3-1 完成イメージ(一覧画面)

図表3-1 完成イメージ(一覧画面)

 

次にファイル出力機能です。
アプリ右上のダウンロードアイコンを選択すると、Excelが起動し、アプリの画面に表示しているメンバーの情報がファイル出力されます。

図表3-2 完成イメージ(ファイル出力)

図表3-2 完成イメージ(ファイル出力)

 

出力したファイルのダウンロードは、上メニューの[ファイル>コピーを作成する>コピーのダウンロード]から実施できます。

図表3-3 完成イメージ(出力ファイルの保存)

図表3-3 完成イメージ(出力ファイルの保存)

 

以下は細かい処理の補足説明です。

  • 出力データはExcelでも文字化けしないよう文字コードをUTF-8からShift_JISに変換しています。
  • 役職名等の項目にカンマが含まれていても列がずれることなく出力されます(SharePoint上のファイルがcsv形式ファイルのため補足)。
  • ファイル出力よりファイル起動の方が速い場合がありますが、ファイルの一次保存先がSharePointドキュメント(排他制御なし)のため、ファイル起動中でもデータがオンラインで反映されます。

 

アプリ実装:基本部分

Power Appsの画面にアクセスし、左メニューの[作成]を選択し、[空のアプリ]を選択します。
[空のキャンパスアプリ]の[作成]を選択します。

図表4-1 PowerAppsアプリの作成へ

図表4-1 PowerAppsアプリの作成へ


アプリ名を適宜入力し、[形式]は[電話]を選択し、[作成]を選択します。
アプリの編集画面が表示されたら、上メニューの[・・・>設定]を選択します。

図表4-2 PowerAppsアプリの作成,設定メニュー選択

図表4-2 PowerAppsアプリの作成,設定メニュー選択

 

左メニューの[全般]設定において、アプリのアイコンや自動保存のオフ/オン等を適宜調整します。
[データ行の制限]は、今回は委任の問題が発生しないため変更不要です。データソースにSharePointリスト等を使用する場合は、上限値の2000に変更することをお奨めします。

図表4-3 PowerAppsアプリの設定メニュー変更

図表4-3 PowerAppsアプリの設定メニュー変更

 

アプリの編集画面に戻り、リスト用の画面を追加し、元々用意されていた空の画面を削除します。
左側[ツリービュー]の[新しい画面]を選択し、[リスト]を選択します。これにより[Screen2]という名前のリスト画面が追加されます。
左側[ツリービュー]の[Screen1]を選択して右クリックし、[削除]を選択します。これにより[Screen1]という名前の空の画面が削除されます。

図表4-4 PowerAppsアプリの画面設定

図表4-4 PowerAppsアプリの画面設定

 

追加したリスト画面の名前を分かりやすい名前に変更します(任意)。
左側[ツリービュー]で[Screen2]を選択して右クリックし、[Rename]を選択し、名前を[BrowseScreen]に変更します。

図表4-5 PowerAppsアプリの画面名変更

図表4-5 PowerAppsアプリの画面名変更

 

画面の表示タイトルを設定します。
中央の画面レイアウト上で表示タイトルを選択し、右側[プロパティ]の[ディスプレイ>テキスト]の値を"メンバー一覧"とします。

*左側[ツリービュー]で[LblAppName1]を選択し、[Text]プロパティの値を"メンバー一覧"とする方法でも同じです

図表4-6 PowerAppsアプリのタイトル変更

図表4-6 PowerAppsアプリのタイトル変更

 

右上の[+]アイコンはデータ追加用のものですが、今回データ追加機能は不要ですので、ファイル出力用に変更します。
中央の画面レイアウト上で[+]アイコンを選択し、右側[プロパティ]の[ディスプレイ>アイコン]のリストから[ダウンロード]を選択します。

図表4-7 PowerAppsアプリのアイコン変更

図表4-7 PowerAppsアプリのアイコン変更

 

アイコンのイメージが変わりました。
図表4-5のリスト画面の名前と同じように、アイコンの名前を分かりやすい名前に変更します(任意)。
左側[ツリービュー]で[IconNewItem1]を選択して右クリックし、[Rename]を選択し、名前を[IconDownloadItem1]に変更します。

図表4-8 PowerAppsアプリのアイコン変更の続

図表4-8 PowerAppsアプリのアイコン変更の続き

 

データソースを追加します。
中央の画面レイアウト上の一覧データ表示部分(左側[ツリービュー]の[BrowserGallery1])を選択し、[データ]を選択します。[Office 365]で検索し、 [Office 365 ユーザー]が表示されたらこれを選択します。
さらに、接続ユーザーを選択します。

*左端の[データ]アイコンから追加する方法でも同じです

図表4-9 PowerAppsアプリのデータソース変更

図表4-9 PowerAppsアプリのデータソース変更

 

 

 

アプリ実装:一覧検索

検索条件に部署を追加します。
上メニューの[挿入]から、テキストラベルとコンボボックスを各1個追加します。
マウス操作で一覧データ表示部分(左側[ツリービュー]の[BrowserGallery1])を下にずらし、検索条件に関する部品の位置やサイズを整えます。

図表5-1 一覧画面の検索項目追加

図表5-1 一覧画面の検索項目追加

 

部署ラベルについて、以下の通り設定します。

  • 名前:lblDepartment
  • Textプロパティ:"部署:"

図表5-2 一覧画面の検索項目設定(ラベル)

図表5-2 一覧画面の検索項目設定(ラベル)

 

部署コンボボックスについて、以下の通り設定します。

  • 名前:cmbDepartment
  • DisplayFields:["Department"](コンボボックスの値が表示されない場合、["Value"]を["Department"]に変更すると解決します。その後、表記が勝手に["Value"]に戻りますが、コンボボックスの値は問題なく表示されます)
  • InputTextPlaceholderプロパティ:"複数選択可, 未選択時は全件抽出"
  • Itemsプロパティ:(以下参照)
Distinct(
  Sort(
    Filter(
      Office365ユーザー.SearchUserV2(
        {searchTerm:"", isSearchTermRequired:false}
      ).value,
      JobTitle <> "リソース", "@xxxxxx.com" in Mail, 
      AccountEnabled = true
    )
    , SortOrder.Ascending
  )
  ,Department
)
*[Items]プロパティの式の意味:Office365ユーザーから役職がリソースでない、かつアカウントが有効、かつメールの@より右が組織のドメイン(組織内メンバー)のユーザ情報を取得し、昇順で並び替え、重複を除きます

図表5-3 一覧画面の検索項目設定(コンボボックス)

図表5-3 一覧画面の検索項目設定(コンボボックス)

 

一覧データ表示部分左側([ツリービュー]の[BrowserGallery1])の設定を行います。

左側[ツリービュー]の[BrowserGallery1]を選択し、[Items]プロパティを以下の通り設定します。

Sort(
  Filter(
    Office365ユーザー.SearchUserV2(
      {searchTerm:"", isSearchTermRequired:false}
    ).value,
    JobTitle <> "リソース", "@xxxxxx.com" in Mail, 
    AccountEnabled = true,
    IsBlank(cmbDepartment.SelectedItems) 
      || IsEmpty(cmbDepartment.SelectedItems)
      || Department in cmbDepartment.SelectedItems, 
    TextSearchBox1.Text in DisplayName
  ),
  DisplayName,
  If(SortDescending1, SortOrder.Descending, SortOrder.Ascending)
)
*[Items]プロパティの式の意味:Office365ユーザーから以下条件(AND条件)でユーザー情報を取得し、表示名(ユーザーの氏名)の昇順または降順(画面右から二番目のアイコンで切替え)に並べ替えます
  • 役職がリソースでない
  • アカウントが有効
  • メールの@より右が組織のドメイン(組織内メンバー)
  • 部署コンボボックスで選択した部署(未選択:BlankやEmptyの場合は全件抽出)
  • テキストボックスに入力したキーワードを含む表示名(未入力の場合は全件抽出)
*[Items]プロパティの部署コンボボックス部分について、IsBlank()は画面初期表示時、IsEmptyはコンボボックスで選択した後で全て解除した時、部署の絞り込みを行わずに抽出するための記述です

図表5-4 一覧画面の検索ロジック変更

図表5-4 一覧画面の検索ロジック変更

 

左側[ツリービュー]の[BrowserGallery1]を選択し、左側[TemplateFill]プロパティを以下の通り設定します。

If(ThisItem.Mail=User().Email,RGBA(153,217,234,1),RGBA(0, 0, 0, 0))
*[TemplateFill]プロパティの式の意味:アプリ使用者本人(一覧データのメールアドレスとアプリ使用者のメールアドレスが一致)のデータは背景色を青色にします

さらに、右側[プロパティ]の[ディスプレイ>レイアウト]のリストから、[画像、タイトル、サブタイトル、本文]を選択します。

図表5-5 一覧画面の検索結果のレイアウト変更

図表5-5 一覧画面の検索結果のレイアウト変更

 

一覧データ表示部分の項目を設定します。

 

各部品の[Text]プロパティを以下の通り設定します。

  • Title1: "氏名 : " & ThisItem.DisplayName
  • SubTitle1: "部署 : " & ThisItem.Department & " / 役職 : " & ThisItem.JobTitle & " / 勤務先 : " & ThisItem.OfficeLocation
  • Body: "TEL : " & ThisItem.mobilePhone & " / Mail : " & ThisItem.Mail

また、上記項目の値が途中で見切れる場合は、幅を広げる、複数行表示できるようにするなど、適宜調整します。

図表5-6 一覧画面の検索結果の項目変更

図表5-6 一覧画面の検索結果の項目変更

 

画像([Image1])の[Image]プロパティを設定します。

IfError(Office365ユーザー.UserPhotoV2(ThisItem.Mail), Blank())
*[Image]プロパティの式の意味:ユーザーの画像データがあればそれを表示し、ない場合はブランクとします

図表5-7 一覧画面の検索結果のユーザー画像設定

図表5-7 一覧画面の検索結果のユーザー画像設定

 

アプリ実装:ファイル出力

まずSharePointドキュメント上に出力用の空のCSVファイルを用意します。アプリ上でCSVファイルをExcelで起動する際、SharePoint上のドキュメントのURLが必要となります。SharePoint上に配置した後、ファイルを開いてURLを確認します。
アプリユーザーがアクセスできるSharePointサイトのドキュメントフォルダーに、[member_list.csv]ファイルをアップロードし、これを開きます。
表示されたURLをコピーしてメモ帳等に控えておきます。

*URL内のsourcedocの値は、SharePoint上からファイルを一度削除してアップロードし直すと変わります。この例では、このファイルは使い回す運用とし、sourcedocが変わらないものとして使用します

図表6-1 SharePointへの出力用雛形ファイルのアップロード

図表6-1 SharePointへの出力用雛形ファイルのアップロード

 

アプリの編集画面に戻り、[ダウンロード]アイコンの[OnSelect]プロパティを以下の通り設定します。

ClearCollect(col_dl, ShowColumns(BrowseGallery1.AllItems,
  DisplayName, Department, JobTitle, OfficeLocation, mobilePhone, Mail
));
Set(json_dl, JSON(col_dl,JSONFormat.IndentFour));
UpdateContext({localResponse:PowerAppV2メンバー一覧.Run(json_dl)});
Launch("https://xxxxxx.sharepoint.com/:x:/r/sites/xxxxxx/_layouts/15/Doc.aspx?sourcedoc=%xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx7F%7D&file=member_list.csv&action=default&mobileredirect=true");
*[OnSelect]プロパティの式の意味:一覧画面に表示されているデータをcol_dlというコレクション変数に格納し、json_dlというJSON型グローバル変数に変換し、呼び出したフローに引数に渡します。その後、図表6-1で控えた[member_list.csv]ファイルのURLを指定してこれを起動します

なお、この段階ではエラーの赤波線が表示されますが、この後フローを作成すれば解消します。
また、右側[プロパティ]の[詳細>Tooltip]を"表示データのダウンロード"に変更します。

図表6-2 ダウンロードアイコンの設定

図表6-2 ダウンロードアイコンの設定

 

左端の[・・・]アイコンを選択し、[Power Automate]を選択し、[フローを新規作成する]を選択します。
[+ 一から作成]を選択します。

図表6-3 PowerAutomateフローの追加

図表6-3 PowerAutomateフローの追加

 

先にフロー全体を示します。
PowerAppsアプリからjson型の出力データを受け取り、JSONの解析を経てCSVテーブルを作成し、SharePointドキュメント上のCSVファイルに出力する処理になります。
また、フロー名は[PowerAppV2メンバー一覧]としました。

図表6-4 PowerAutomateフローの概観

図表6-4 PowerAutomateフローの概観

 

この後、各ステップの設定内容を紹介します。

 

[PowerApps (V2)]ステップでは、[入力の追加]からテキストを追加し、変数名を[json_dl]とします。

[JSONの解析]ステップは以下の通りです。

  • ステップの種類:[組み込み>データ操作>JSONの解析]
  • コンテンツ:json_dl(前のステップで定義した変数)
  • スキーマ:{
      "DisplayName": "DisplanName",
      "Department": "Department",
      "JobTitle": "JobTitle",
      "OfficeLocation": "OfficeLocation",
      "TelephoneNumber": "TelephoneNumber",
      "Mail": "Mail“
    }

図表6-5 PowerAutomateフローの設定(PowerAppsからの引数)

図表6-5 PowerAutomateフローの設定(PowerAppsからの引数)

 

[CSVテーブルの作成]ステップは以下の通りです。

  • ステップの種類:[組み込み>データ操作>CSVテーブルの作成]
  • 開始:本文(前のステップの[本文])
  • ヘッダー:出力ファイル時の項目名
  • 値(式):item()?['xxxxxx']
*xxxxxxは前のステップのスキーマの各項目名です

また、ステップ名の”CSV”と”テーブル”の間のスペースは除去します。除去しないと次のステップの設定で正しく動作しません。

図表6-6 PowerAutomateフローの設定(CSVテーブルの作成)

図表6-6 PowerAutomateフローの設定(CSVテーブルの作成)

 

[CSVテーブルの作成]ステップについて、一点補足します。

一度フローを保存して閉じ、再度開いた時、値の見た目が変わります。JSON内の項目が認識され、当初設定した式が表示されなくなります。別の項目に変更したい場合等は、一つ前の画面のように、item()?['xxxxxx']のように式を記述しなおす必要があります

図表6-7 PowerAutomateフローの設定(CSVテーブルの作成の補足)

図表6-7 PowerAutomateフローの設定(CSVテーブルの作成の補足)

 

[ファイルの作成]ステップは以下の通りです。

  • ステップの種類:[標準>SharePoint>ファイルの作成]
  • サイトのアドレス:CSVファイルを置いたサイト
  • フォルダーのパス:CSVファイルを置いたフォルダーのパス(この例では/Shared Documents/General)
  • ファイル名:CSVのファイル名(この例ではmember_list.csv)
  • ファイルコンテンツ(式):concat(decodeUriComponent('%EF%BB%BF'),body('CSVテーブルの作成'))
*ファイルコンテンツの式では、ExcelでCSVファイルをExcelで起動した時、文字化けしないよう、文字コードをUTF-8からShift_JISに変換しています

図表6-8 PowerAutomateフローの設定(SharePointファイルの作成)

図表6-8 PowerAutomateフローの設定(SharePointファイルの作成)

 

右上のアイコンからフローを保存して閉じ、アプリの編集画面に戻ります。

図表6-9 PowerAutomateフローの設定(保存して閉じる)

図表6-9 PowerAutomateフローの設定(保存して閉じる)

 

アプリ編集画面右上の[保存]アイコンを選択し、[公開]アイコンを選択します。
[このバージョンの公開]を選択します。
左上の[戻る]を選択し、アプリの編集を終了します。

図表6-10 アプリ公開

図表6-10 アプリ公開

 

おわりに

以前紹介したPowerPlatform関連のアプリよりもシンプルなアプリでしたが、コンボボックスによるギャラリー検索やファイル出力といった、実務でニーズがありそうな要素を含めて紹介しました。

 

メンバー照会機能としては、Microsoft Entra IDの項目だけでは不十分な組織もあるかと思います。不足項目を含めてSharePointリストやDataVerse等でデータを保持し、編集機能を設けて入力補助としてMicrosoft Entra IDの項目を取得できるようにするなど、今回のアプリをベースに発展させても良いでしょう。

 

 

当ブログ内の連載記事

elmgrn.hatenablog.com

elmgrn.hatenablog.com