PowerAppsでアプリを作っていると
Formコントロールを使わずSharePointユーザー列にユーザー情報を登録したくなりますよね。
そんな時はこうします。
とりあえず下記の様にComboBoxコントロール
とButtonコントロール
を3つを配置する
ここでユーザーを検索する為にOffice365ユーザーのコネクタ
を追加する
組織のユーザーデータがインプットできたので
ComboBoxコントロールのItemプロパティ
に下記の様に記述する。
ShowColumns(
Office365ユーザー.SearchUserV2({searchTerm: Self.SearchText}).value,
Department,
DisplayName,
JobTitle,
Mail,
UserPrincipalName
)
O365のユーザー情報を検索できるようにして
ShowColumnsを使い見やすくしている。
Display Fieldプロパティ
は
["Display Name"]
とすると良い。
また、複数登録しないと仮定して複数選択の許可に関してはオフ
とする。
次に、登録ボタンコントロールのOnSelectプロパティ
に
Patch(ソース,Defaults(ソース),
{
ユーザー列:ComboBox.SelectedItems
}
)
と記述したくなるのですがエラーとなる。
理由としては登録に必要な列(情報)が
ComboBox.SelectedItemsにはないからである。
なので必要な列を作る必要があります。
Patch(ソース,Defaults(ソース),
{
ユーザー列:
AddColumns(ComboBox.SelectedItems,
Claims,UserPrincipalName,
Email,Mail,
Picture,Office365ユーザー.UserPhoto(Mail)
)
}
)
はい、これでもエラーとなります。
上記形式がテーブル
であり、登録は複数選択無効としているので
レコード
が必要となるからです。
正解はこちら
Patch(ソース,Defaults(ソース),
{
ユーザー列:
First(AddColumns(ComboBox.SelectedItems,
Claims,UserPrincipalName,
Email,Mail,
Picture,Office365ユーザー.UserPhoto(Mail)
)
)
}
)…①
次に、SharePointに登録された情報を変更する場合を考えてみる。
Galleryコントロールで選択しているItem
のユーザーを変更しようとする場合
先ほどとは別の操作が必要となる。
先ほどのComboBoxコントロールのDefaultSelectedItemsプロパティ
を下記の様に記述する。
AddColumns(Gallery.Selected.ユーザー列,
UserPrincipalName,Claims,
Mail,Email
)
…②
そうする事でユーザー列の変更が無い場合そのまま登録ボタンを押しても現在と同じ情報が
登録される。(ユーザー列だけの登録ではない事を想定している)
変更に関してのコードは下記の様になる。
Patch(ソース,Gallery.Selected,
{
ユーザー列:
First(AddColumns(ComboBox.SelectedItems,
Claims,UserPrincipalName,
Email,Mail,
Picture,Office365ユーザー.UserPhoto(Mail)
)
)
}
)
…③
あとは新規と変更を区別する為に例えば
新規ボタン、変更ボタンコントロールそれぞれのOnSelectプロパティ
を下記の様に記述して
UpdateContext({locRegisterUser:1})
UpdateContext({locRegisterUser:2})
ComboBoxコントロール DefaultSelectedItemsプロパティ
に
Switch(locRegisterUser,
1,Blank(),
2,②のコード
)
登録ボタンのコントロール
も同様に
Switch(locRegisterUser,
1,①のコード,
2,③のコード
)
とすることで良い感じに登録変更ができる様になる。