1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Formを使わずSharePointユーザー列に登録・変更

Posted at

PowerAppsでアプリを作っていると
Formコントロールを使わずSharePointユーザー列にユーザー情報を登録したくなりますよね。
そんな時はこうします。

とりあえず下記の様にComboBoxコントロールButtonコントロールを3つを配置する
image.png

ここでユーザーを検索する為にOffice365ユーザーのコネクタを追加する
image.png

組織のユーザーデータがインプットできたので
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,③のコード
	)

とすることで良い感じに登録変更ができる様になる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?