PowerApps|姓名が逆転しているユーザー名は変数&関数で並べ替える
姓名が逆転しているユーザー名を変数と関数で並べ替える
PowerAppsではMicrosoft365に登録された情報から(ログインされた)ユーザー名を取得することができます。
しかし取得したユーザー名をそのまま使うことは難しい場合があります。例えば以下のような状態です。
会社や各コミュニティの設定次第ですがおおむねユーザー名は以下のような設定になっている事が多いです。
- 名 姓の並びで表示される ・・・ (例)太郎 山田
- 英語 / 日本語の並びで表示される ・・・ (例)Taro yamada / 太郎 山田
姓名が逆転していたり英語が先に表示される様です。困りましたね・・・。
2番は1番の状態も含んでいますね。
基本は「日本語」かつ「姓名」の順で表示させたいです。
英語が表示されることもあるんですね。
日本語と使い分けができると便利な気がします。
では2人が指摘している課題(問題点)を解決させていきましょう。今回は3つのアウトプットを用意します。
- 1の文字列を日本語で姓名の順で表示させる
- 2の文字列を日本語で姓名の順で表示させる
- 2の文字列を英語でLastName FirstNameの順で表示させる
課題を解決させるうえで変数といくつかの関数を使うことになります。以降順番に説明していきます。
関連記事
変数について解説している記事です。変数にはいろいろな種類があります。
記事の中ではグローバル変数やコンテキスト変数について説明しています。
本記事ではグローバル変数を使います。グローバル変数が分からない人はまずリンク先の記事をご覧ください。
関連書籍
PowerAppsを理解するうえで関数の理解はかかせない要素です。
問題点を整理する
まずは問題点を整理します。冒頭で紹介した2つの事例はどんな時に起きるのか確認します。
加えてアプリ内でユーザー名を表示させるために使用する式も提示しておきます。
- 名 姓の並びで表示される ・・・ (例)太郎 山田
- PowerApps内でユーザー関数を使って値を取得する時
- 式:User().FullName
- 英語 / 日本語の並びで表示される ・・・ (例)Taro yamada / 太郎 山田
- PowerAppsからSharePointのリストの中にあるユーザー列の値を取得する時
- 式:列.DisplayName
傾向としてはどちらもフルネームで名前(FirstName)が先で名字(LastName)が後という事でしょうか。
あとは英語表記の有無ですね。表示としてはそんなに複雑なものではないという事がわかりました。
問題点に対して対策を用意する
解決策を再度見直します。3つの方法で表現するにはどんな作業が必要なのでしょうか?
- 名 姓の並びで表示される ・・・ (例)太郎 山田
- 英語 / 日本語の並びで表示される ・・・ (例)Taro yamada / 太郎 山田
- 1の文字列を日本語で姓名の順で表示させる ・・・ 名字(苗字)、名前の順で表示
- 2の文字列を日本語で姓名の順で表示させる ・・・ 日本語かつ名字(苗字)、名前の順で表示
- 2の文字列を英語でLastName FirstNameの順で表示させる ・・・英語かつLastFirstの順で表示
まずは文字列のブロックを切り分けたいです!
そうですね。
その後は切り分けた文字列を収集し適宜出力したいですね。
出力する際は自分が好きなように文字列を並べ替えたいです。
色々意見が出ました。やりたい事を実現する為の手順に落とし込みます。
- 文字列のブロックを切り分ける ・・・ Split関数を使用
- 切り分けた文字列を収集し適宜出力 ・・・ 変数(今回はグローバル変数)、Index関数を使用
- 出力時に文字列を並べ替える ・・・ First関数、Last関数を使用
ではこれらの変数、関数を使用して課題を解決させていきます。
各種関数の説明
Split関数
特定の文字をキーとして文字列を分解することができる関数です。
Microsoftのドキュメントから内容、構文、パラメータを引用します。
内容
テキスト文字列をサブストリングのテーブルに分割します。
構文
Split( Text, Separator )
パラメータ
Microsoftドキュメント:Split 関数より抜粋、加工
番号 パラメータ 必須/オプション 内容 1 Text 必須 分割するテキスト。 2 Separator 必須 文字列の分割で使用する区切り記号。
0、1、またはそれ以上の文字を指定できます。
Set関数
グローバル変数の値を設定する為に使用する関数です。
内容
グローバル変数の値を設定します。
構文
Set( VariableName, Value )
パラメータ
Microsoftドキュメント:Set関数より抜粋、加工
番号 パラメータ 必須/オプション 内容 1 VariableName 必須 作成または更新するグローバル変数の名前。 2 Value 必須 変数に割り当てる値。
Index関数
内容
Index関数はテーブル内の順序付けられた位置に基づいてテーブルのレコードを返します。
レコード番号は 1 で始まるため、
First( table )
はIndex( table, 1 )
と同じです。Index関数は以下要件の時にエラーを返します。
- 要求されたレコードのインデックスが 1 未満
- テーブルのレコード数より大きい
- テーブルが空である場合
構文
Index( Table、RecordIndex )
パラメータ
Microsoftドキュメント:First、FirstN、Index、Last、LastN 関数より抜粋、加工
番号 パラメータ 必須/オプション 内容 1 Table 必須 操作の対象となるテーブル。 2 RecordIndex 必須 返すレコードのインデックスです。
レコード番号は 1 (数値)から始まります。
First関数
テーブルの中で最初のレコードを返してくれる関数です。
内容
テーブル の最初のレコードを返します。
構文
First( Table )
パラメータ
Microsoftドキュメント:First、FirstN、Index、Last、LastN 関数より抜粋、加工
番号 パラメータ 必須/オプション 内容 1 Table 必須 操作の対象となるテーブル。
Last関数
テーブルの中で最後のレコードを返してくれる関数です。
内容
テーブルの最後のレコードを返します。
構文
Last( Table )
パラメータ
Microsoftドキュメント:First、FirstN、Index、Last、LastN 関数より抜粋、加工
番号 パラメータ 必須/オプション 内容 1 Table 必須 操作の対象となるテーブル。
変数は組み合わせて使うことができる
各変数は順番に紹介しましたが一緒に使うこともできます。
例えばSet変数の中にSplit関数を書く事も可能です。詳細はこの後紹介する動画の中でご確認ください。
作業、動作を動画で確認
記事冒頭で提示した課題を解決させるために動画を用意しました。(約4分)
実際のユーザー名は使えない為テキストラベルに入力した名前を並べ替えるという作業を見ていただきます。
前のブロックで説明した関数を組み合わせて必要に応じてフォームに値を出力させています。ご覧ください。
各コントロールのプロパティにどんな関数を書いているのか
確認しやすい様に拡大視を取り入れて動画を作っています。
変数を配列の様に使うんですね。
値の取り出し方も分かりやすく説明されています。
動画を作ってから1点気になることがありましたので加筆させていただきます。
仕様上問題無いので変数stringに対してBlank関数の値を代入していません。ご注意ください。
Blank関数
動画内の「変数の初期化」ボタンの中で使用している関数です。
Blank関数は値が無い状態を作り出すことができます。
内容
Blank 関数は、空白値を返します。
これを使用してこれらの値をサポートするデータ ソースに NULL 値を格納します。
フィールドから値を効果的に削除します。
構文
Blank()
パラメータ
無し
Microsoftドキュメント:Blank、Coalesce、IsBlank、および IsEmpty 関数から抜粋、加工
まとめ
変数と各種関数を使ってユーザー名を並べ替えるという作業について解説しました。
冒頭で挙げた課題も全て解決です。加えて動画で変数の動作環境についても勉強を進めることができました。
これでPowerApps内で各種名前を表示させる際に困ることは無いですね。
応用:今回の仕事はメールアドレスなどの情報でも転用できます
例えば@で区切るというような式を用意できればメールアドレスの前半だけ取得する事も可能です。
今回の作業は日常業務の中で活かせる場所がたくさんあります。ご自身で関数を使って試してみてください。
参考情報:公用文等における日本人の姓名のローマ字表記に関する関係府省庁連絡会議
私は英語で名前を表記する際の書き方(大文字、小文字、順番など)は何が正なのか未だに分かりません。
これが正というわけではないのですが日本政府の見解を見つけましたのでリンクを用意しておきます。
- 「姓ー名」の順
- 姓は全て大文字
- 名の先頭は大文字で残りは小文字
- 姓と名の間にスペース
項目としては4点です。3番と4番は資料の中にしっかり明記されていませんが状況から判断しています。
指定された様に書いてみましょう。山田太郎さんの場合は「YAMADA Taro」となります。
ただしこの要件は「必須」ではなくあくまで政府からの要請というかたちです。
よってこれからはこの様式がスタンダードになっていくのかもしれません。