IT Hands-on Lab

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

【Power Apps】MS Entra IDユーザー情報反映機能付き メンバー情報管理アプリ2

PowerApps MS Entra IDユーザー情報反映機能付き メンバー情報管理アプリ2

 

前の記事の続きになります。
Microsoft社が提供するローコード開発ツール「Power Platform」のアプリ機能(Power Apps)を使用した、Microsoft Entra IDのユーザー情報反映機能付きメンバー情報管理アプリの作成例を紹介します。
  • 操作環境:
    • OS:Windows 11
    • Webブラウザー:Edge
  • 使用プラン:Microsoft 365 Business Premium

 

 

アプリ実装:一覧画面

検索条件項目の設定

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

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

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

 

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

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

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

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

 

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

  • 名前:cmbDeptBrowse
  • InputTextPlaceholderプロパティ:"複数選択可, 未選択時は全件抽出"
  • Itemsプロパティ:Distinct(Filter([@メンバー一覧],account_enabled = true),department)
    *[Items]プロパティの式の意味:前の記事の工程3で作成したSharePointリストの有効なアカウントのデータを取得し、重複を除きます

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

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

 

検索結果一覧の設定

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

Sort(
    Filter(
        [@メンバー一覧],
        account_enabled = true,
        IsBlank(cmbDeptBrowse.SelectedItems) 
        || IsEmpty(cmbDeptBrowse.SelectedItems)
        || department in cmbDeptBrowse.SelectedItems, 
        TextSearchBox1.Text in display_name
    ),
    display_name,
    If(SortDescending1, SortOrder.Descending, SortOrder.Ascending)
)
*[Items]プロパティの式の意味:前の記事の工程3で作成したSharePointリストの以下条件(AND条件)に合致するデータを取得し、表示名(氏名)の昇順または降順(画面右から二番目のアイコンで切替え)に並べ替えます
  • アカウントが有効
  • 部署コンボボックスで選択した部署(未選択:BlankやEmptyの場合は全件抽出)
  • テキストボックスに入力したキーワードを含む表示名(未入力の場合は全件抽出)
*[Items]プロパティの部署コンボボックス部分について、IsBlank()は画面初期表示時、IsEmptyはコンボボックスで選択した後で全て解除した時、部署の絞り込みを行わずに抽出するための記述です

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

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

 

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

  • TemplateFillプロパティ:If(ThisItem.upn=User().Email,RGBA(153,217,234,1),RGBA(0, 0, 0, 0))
    *[TemplateFill]プロパティの式の意味:アプリユーザーの本人データの場合(一覧データとアプリユーザーのUPNが一致)は背景色を青色にします

図表6-5 一覧画面の検索結果の背景色変更

図表6-5 一覧画面の検索結果の背景色変更

 

検索結果一覧の表示項目設定

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

  • Title1: "氏名 : " & ThisItem.display_name
  • SubTitle1: "部署 : " & ThisItem.department & " / 役職 : " & ThisItem.job_title & " / 勤務先 : " & ThisItem.office_location
  • Body: "TEL : " & ThisItem.mobile_phone & " / Mail : " & ThisItem.mail

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

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

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

 

アプリ実装:詳細画面

必要項目の追加

取扱い項目が多いと画面に必要が項目の一部が表示されていないことがありますので、追加します。
左側[ツリービュー]の [DetailScreen1>DetailForm1]を選択し、右側[プロパティ]の[ディスプレイ>フィールド]の[8件選択済み]を選択し、[フィールドの追加]を選択します。
詳細画面に表示されていない必要項目すべてにチェックをつけ、[追加]を選択します(この例ではaccount_enabledとmemo) 。

図表7-1 詳細画面の必要項目の追加

図表7-1 詳細画面の必要項目の追加

 

項目のレイアウト調整

少々扱いに癖がありますが、各項目の全体領域を選択し、右側[プロパティ]の[詳細設定]の下の方にある、[Height]、[Width]、[X]、[Y]に値設定すると意図したレイアウトになります。

  • 0行目:upn(幅640)
  • 1行目:display_name(幅640)
  • 2行目:department(幅640)
  • 3行目:job_title(幅640)
  • 4行目:office_location(幅640)
  • 5行目:mobile_phone(幅640)
  • 6行目:mail(幅640)
  • 7行目:image(幅320),account_enabled(幅320)
  • 8行目:memo(幅640)

図表7-2 詳細画面の項目レイアウト変更

図表7-2 詳細画面の項目レイアウト変更

 

アプリ実装:編集画面

必要項目の追加(詳細画面と同じ)、コントロールの種類変更

左側[ツリービュー]の [EditScreen1>EditForm1]を選択し、右側[プロパティ]の[ディスプレイ>フィールド]の[8件選択済み]を選択し、[フィールドの追加]を選択します。
編集画面に表示されていない必要項目すべてにチェックをつけ、[追加]を選択します(この例ではaccount_enabledとmemo)。

図表8-1 編集画面の必要項目の追加

図表8-1 編集画面の必要項目の追加

 

memoについて、コントロールの種類を[複数行テキストの編集]に変更します。
なお、upnについて、許可値を選択すると、コンボボックスではなくドロップダウンリストになってしまうため、ここでは変更しません

図表8-2 編集画面のコントロールの種類変更

図表8-2 編集画面のコントロールの種類変更

 

項目のレイアウト調整(詳細画面と同じ)

少々扱いに癖がありますが、各項目の全体領域を選択し、右側[プロパティ]の[詳細設定]の下の方にある、[Height]、[Width]、[X]、[Y]に値設定すると意図したレイアウトになります。

  • 0行目:upn(幅640)
  • 1行目:display_name(幅640)
  • 2行目:department(幅640)
  • 3行目:job_title(幅640)
  • 4行目:office_location(幅640)
  • 5行目:mobile_phone(幅640)
  • 6行目:mail(幅640)
  • 7行目:image(幅320),account_enabled(幅320)
  • 8行目:memo(幅640)

図表8-3 編集画面の項目レイアウト変更

図表8-3 編集画面の項目レイアウト変更

 

編集画面表示時のデータ取得(コレクション変数等の操作)

編集画面表示時に以下データを取得し、変数に格納します。

  • UPNのコンボボックスの選択肢データ取得(Microsoft Entra IDユーザー情報+SharePointリスト)
  • 選択されたUPNに関するMS Entra IDのユーザー情報の取得
    左側[ツリービュー]の[EditScreen1]を選択し、左上[OnVisible]プロパティを選択し、以下の通り設定します。
/* upnの選択肢を取得 */
Collect(col_cmb_entra, 
    Filter(
        Office365ユーザー.SearchUserV2( {searchTerm:"", isSearchTermRequired:false} ).value,
        JobTitle <> "リソース", "@xxxxxx.com" in Mail, AccountEnabled = true
    )
);//MS Entra IDのユーザー情報をコレクション変数に格納⇒【A】
Collect(col_cmb_spl, [@メンバー一覧]);//SharePointリストの情報をコレクション変数に格納⇒【B】
ClearCollect(col_cmb_all,
    ForAll(col_cmb_entra, {upn_cmb:UserPrincipalName} ),
    ForAll(col_cmb_spl, {upn_cmb:upn} )
);//【A】+【B】のupnを新たなコレクション変数に格納
/* 選択されたupnのEntraユーザー情報を取得 */
UpdateContext({
    loc_select_entra:If(EditForm1.Mode=FormMode.New,Blank(),
        LookUp(col_cmb_entra, UserPrincipalName=cmbUpn.Selected.Value))
});//新規登録時はブランク、変更時は【A】から選択されたupnの情報をコンテキスト変数に格納⇒【C】
UpdateContext({
    loc_init_upn:loc_select_entra.UserPrincipalName,
    loc_init_name:loc_select_entra.DisplayName,
    loc_init_dept:loc_select_entra.Department,
    loc_init_title:loc_select_entra.JobTitle,
    loc_init_office:loc_select_entra.OfficeLocation,
    loc_init_mobile:loc_select_entra.mobilePhone,
    loc_init_mail:loc_select_entra.Mail,
    loc_init_image:IfError(Office365ユーザー.UserPhotoV2(loc_select_entra.Mail), Blank())
});//【C】の各要素について個々のコンテキスト変数に格納
*[OnVisible]プロパティの意味はスクリプト内のコメントをご確認ください。【A】の抽出条件は以前の記事の工程5で紹介したメンバー一覧アプリの部署コンボボックスとほぼ同じですので、詳細はそちらをご確認ください
*この段階では赤波線のエラーが出ますが、この後でUPN用のコンボボックスを追加・設定すればエラーは消えます

図表8-4 編集画面のコレクション変数等の操作設定

図表8-4 編集画面のコレクション変数等の操作設定

 

UPNの各種設定(コンボボックス追加、手入力値の登録等)

左側[ツリービュー]でUPNの全体領域を選択し、上メニューの[挿入]からコンボボックスを選択します。
この例のように、設定中にロック解除が必要な旨のメッセージが表示された場合は、ロック解除を行います。

図表8-5 編集画面のUPN各種設定(コンボボックスの追加)

図表8-5 編集画面のUPN各種設定(コンボボックスの追加)

 

追加したUPN用コンボボックスについて、元々用意されていたテキストボックスと同じ位置に重ねるように移動し、以下の通り設定します。

  • 名前:cmbUpn
  • DefaultSelectedItemsプロパティ:[DataCardValuexx.Text]
    *DataCardValueXXのXX部分は左側[ツリービュー]のUPNの値を確認します
  • Itemsプロパティ:Distinct(Sort(col_cmb_all,upn_cmb,SortOrder.Ascending),upn_cmb)
  • SelectMultipleプロパティ:false
  • Visibleプロパティ: If(EditForm1.Mode=FormMode.New,true,false)

また、OnChangeプロパティを以下の通り設定します。これにより、[EditScreen1.OnVisible]の後半部分のコンテキスト変数の値を、UPNコンボボックスの選択値を元に更新しています。

/* 選択されたupnのEntraユーザー情報を取得 */
UpdateContext({
    loc_select_entra:LookUp(col_cmb_entra, UserPrincipalName=cmbUpn.Selected.Value)
});//【A】から選択されたupnの情報をコンテキスト変数に格納⇒【C】
UpdateContext({
    loc_init_upn:loc_select_entra.UserPrincipalName,
    loc_init_name:loc_select_entra.DisplayName,
    loc_init_dept:loc_select_entra.Department,
    loc_init_title:loc_select_entra.JobTitle,
    loc_init_office:loc_select_entra.OfficeLocation,
    loc_init_mobile:loc_select_entra.mobilePhone,
    loc_init_mail:loc_select_entra.Mail,
    loc_init_image:IfError(Office365ユーザー.UserPhotoV2(loc_select_entra.Mail), Blank())
});//【C】の各要素について個々のコンテキスト変数に格納

図表8-6 編集画面のUPN各種設定(追加したコンボボックスの設定)

図表8-6 編集画面のUPN各種設定(追加したコンボボックスの設定)

 

UPN用コンボボックスで手入力した値を登録できるようにするため、UPNの全体領域にて以下の通り設定します。

  • Updateプロパティ:If(IsBlank(cmbUpn.Selected.Value), cmbUpn.SearchText, cmbUpn.Selected.Value)

図表8-7 編集画面のUPN各種設定(データカードの設定変更)

図表8-7 編集画面のUPN各種設定(データカードの設定変更)

 

元々用意されていたUPNテキストボックスも以下の通り設定します。

  • Defaultプロパティ:If(EditForm1.Mode=FormMode.New, loc_init_upn, Parent.Default)
  • DisplayModeプロパティ:DisplayMode.View
  • Fillプロパティ:RGBA(202, 202, 202, 1)
  • Visibleプロパティ:If(EditForm1.Mode=FormMode.New,false,true)

図表8-8 編集画面のUPN各種設定(テキストボックスの設定変更)

図表8-8 編集画面のUPN各種設定(テキストボックスの設定変更)

 

表示名(氏名)(display_name)からメール(mail)の設定

表示名(氏名)(display_name)からメール(mail)の各テキストボックス(テータ領域)について、以下の通り設定します。

  • Colorプロパティ:If(loc_init_xxxx<>DataCardValueXXText, RGBA(255, 0, 0, 1), RGBA(0, 0, 0, 1))
  • Defaultプロパティ: If(EditForm1.Mode=FormMode.New,loc_init_xxxx,Parent.Default)
  • Tooltipプロパティ: loc_init_xxxx
*loc_init_xxxxのxxxx部分は[EditScreen1.Visible]プロパティや[cmbUpn.OnChange]プロパティで扱ったコンテキスト変数名の末尾部分です
*DataCardValueXXのXX部分は左側[ツリービュー]で各項目の値を確認します
*設定時にロック解除を求められたらロック解除します

図表8-9 編集画面の表示名等の設定

図表8-9 編集画面の表示名等の設定

[Color]プロパティはMicrosoft Entra IDのユーザー情報と相違がある場合赤文字にする、[Default]プロパティは新規登録時にMicrosoft Entra IDのユーザー情報を引用する、[Tooltip]プロパティはMicrosoft Entra IDのユーザー情報をポップアップ表示するといった内容になります。

ユーザー画像(image)の設定

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

If(EditForm1.Mode=FormMode.New, loc_init_image,
    If(IsBlank(AddPicture1.Media), Parent.Default, AddPicture1.Media)
)
*[Image]プロパティの式の意味:新規登録時はMicrosoft Entra IDのユーザー情報からユーザー画像を表示、変更時は既存データ(ブランクも考慮)を表示します

図表8-10 編集画面のユーザー画像の設定

図表8-10 編集画面のユーザー画像の設定

 

有効なアカウント(account_enabled)の変更制御の設定

有効なアカウント(account_enabled)のトグルボタン(データ領域)を選択し、以下の通り設定します。

  • DisplayModeプロパティ:If(glb_is_admin=true, DisplayMode.Edit, DisplayMode.View)
    *[DisplayMode]プロパティの式の意味:システム管理者の場合は編集モード、それ以外は閲覧モードとします

図表8-11 編集画面の有効なアカウントの設定

図表8-11 編集画面の有効なアカウントの設定

 

編集画面の変数の取扱いがやや煩雑だったため、改めて纏めておきます。すべて前の記事の冒頭の要件の編集画面に関する内容(以下4点再掲)に関するものです。

  • UPNは手入力と、Microsoft Entra IDおよびSharePointリストからの選択の両方を可能とする(コンボボックス使用)。
  • 新規登録時は入力補助のため、UPNの値を元にMicrosoft Entra IDのユーザー情報から項目値を引用する。
  • 上記項目値はツールチップで値を確認できるようにする。
  • Microsoft Entra IDのユーザー情報と入力内容に相違がある場合、入力内容を赤文字で表記する。
イベント 機能 UPN選択肢 EntraID取得 イベントでの処理内容
画面表示時 新規登録/変更 データ取得 データ取得 ・Entraユーザー情報を取得しcol_cmb_entraに格納【A】
・SharePointリストのデータを取得しcol_cmb_splに格納【B】
・【A】+【B】のupnをcol_cmb_allに格納(⇒UPN選択肢で使用)
・選択したUPNに合致するEntraユーザー情報を【A】から取得し、loc_select_entraに格納【C】
・【C】の各要素をloc_init_xxxxに格納
UPN選択変更時 新規登録 上記を使用 データ取得 ・選択したUPNに合致するEntraユーザー情報を【A】から取得し、loc_select_entraに格納【C】
・【C】の各要素をloc_init_xxxxに格納
表示名(氏名)~メールの表示 新規登録/変更 - 上記を使用 ・loc_init_xxxxとテキストボックスの値に相違があれば赤文字で表記する
表示名(氏名)~メールにカーソルを当てた時 新規登録/変更 - 上記を使用 ・loc_init_xxxxの値をツールチップでポップアップ表示する
図表8-12 編集画面の変数の取扱い

 

おわりに(設定要素まとめ)

このアプリの作成において、特にポイントになりそうな設定要素を挙げておきます(以前の記事で紹介したPowerAppsアプリと重複あり)。何かアプリを作成する時の参考になれば幸いです。

 

 

当ブログ内の連載記事

elmgrn.hatenablog.com

elmgrn.hatenablog.com