技術情報ブログ
Power Platform
2021.07.16

Power AppsとSharePoint連携:SortByColumns関数で日本語列をソートする際の注意点

こんにちは、アーティサン株式会社の池内佑哉と申します。

私は、Microsoft社が提供するPower AppsやSharePointを用いて業務の自動化・効率化を目指されているお客様のご支援をしています。

 

今回は、SharePoint仕様がPower Appsとかみ合わずエラーになる、という内容のお話です。

 

Power Appsには、SharePointのリストを基にアプリを自動作成する機能があります。

この機能を利用することで、レコードの追加、編集、削除機能が設定されたアプリが作成されます。

そのため、初めてPower Appsに触る方でも、標準的な機能が設定されたアプリを作成・利用することができます。

もちろん、そのまま使ってもよいですが、ほとんどの場合、ちょっと機能を追加したい、使い勝手を良くしたいなどの要望が出てきます。

しかし、SharePointのリストとPower Appsには、普段触らない方はほとんどがハマるといってもよいほど、混乱を招く仕様があります。

この仕様は製品がリリースされた当初から存在する、いわば“SharePoint/Power Appsあるある”なのですが・・・、

私自身も初めての案件の対応で、うっかりこの仕様に引っ掛かり悩んだことがあります。

 

弊社には、エンドユーザー様ご自身で運用していきたいという要望を多くいただいています。

そういったエンドユーザー様を始め、これからPower PlatformやSharePointでの学習を始めようとされている方に、ぜひとも覚えていただきたい内容だと考え、今回取り上げてみました。

 

現象の再現

それでは、本題に移ります。

今回は、SortByColumns関数を使い、ソート順を[タイトル]順から[発行日]順に変更するケースについて考えます。

まず、SharePoint標準のリストに[発行日]という列を追加し、Power Apps にてリストをデータソースとして指定したアプリを作成します(図1)。

SharePoint標準のリストに[発行日]という列を追加

リストに[発行日]を追加する

 

次に、ソート順を[発行日]順にします。

BrowseGallery1のItemsにある、SortByColumn関数の値を変更することで達成します。

初期値ではソートする列を指定する引数に“Title”が入っており、ソート順は昇順になっています。

このソート対象を”Title”から”発行日”に書き換えます(図2)。

想定であればこの操作で[発行日]順になるはずですが、エラーが発生してしまいます。

Power AppsでSortByColumn関数を使ったアプリ作成時のエラー

フィルタを変更するも、エラーが発生

Power AppsでSortByColumn関数を使ったアプリ作成時のエラー切り抜き

エラー文切り抜き

(図3)のエラー文より、列が存在しない扱いとなっていることがわかります。正しく列名を指定しているはずなのに、なぜこのようなエラーが発生するのでしょうか?

 

原因

SharePointのリストで列を追加する際、列名を日本語など2Byte文字で登録すると、見かけはそのまま登録されますが、実は内部では文字コードに変換された後に登録されます(図4)。

Power Appsのフィールド名は編集フォームから確認可能

フィールド名は編集フォームから確認できる

※スペースなどの半角記号も同様に変換されます。

SortByColumns関数の2つ目の引数は、「見えている列名」(以降「外部列名」とします)ではなく、内部の列名(以降「内部列名」とします)を参照する必要があります。

ところが、内部列名は文字コードに変換されているため、外部列名を入力しても「該当なし」と処理されてエラーになります。

一般的にSharePointに関する開発で列を指定する場合、Power Apps以外のプログラム(JavasScript, C#, Power Automate等)では、原則、内部列名を指定します。

一方で、Power Appsの多くの関数は、外部列名でも動作するように機能が提供されていますが、SortByColumnsなど、列操作に関する一部の関数に関しては、プログラムと同様に内部列名を指定する必要があります(ダブルクォーテーションで文字列として指定する必要がある関数は、すべて内部列名を指定します)。

自動でアプリを作成時した際にのSortByColumnsの引数には作られる項目のTextは、【Title】が設定されており、SharePoint上では【タイトル】として表示されています。

読めてしまう分、直感的にエラーの原因に気づきにくい=内部列名を意識しない

これが混乱を招きやすいポイントです。

 

このエラーは、日本語だけではなくハングルなどの2byte文字を使用したときにも発生します。

これを回避するためには、次のような方法があります。

 

対策

単純に、一度列名を1Byte文字(英数字)で作成し、内部列名を英語で登録した後で外部列名を日本語の列名に直す、という方法で回避できます。

 1Byte文字(英数字)で作成

 内部列名を英語で登録

 外部列名を日本語の列名に直す

 

※内部列名は後から変更できないので、最初から1Byte文字で作成することが重要です。

先ほど作成したリストの[発行日]を削除し、[IssueDate]で登録した後、外部列名を[発行日]に直したのが(図5)です。

エラーは発生していません。

列名修正後Power Appsエラーは解消

リストの項目を英数字で追加し、その値を指定。エラーは発生しない

 

データを入力し、日付順にソートされていることを確認します。

Power Appsデータを日付順で並べ替え

日付順で並べ替え

 

これにて、エラーの修正が完了しました。一件落着です。

 

まとめ

今回紹介したエラーの他にも、SharePointは日本語入力がネックになるケースがあります。

例えば、リスト等を新規作成する時、そのURLは、タイトルを英数字で記述すればその文字列をそのまま反映させることができます。

一方で、日本語のみで記述すると[List1][List2]…のような表記になります。(これも後から変更できません!)

 

なお、SharePointを裏側で使用するMicrosoft Teamsも、チーム名を日本語で入力してしまうと、メールアドレスやサイトURLが目視で識別できないもので作成されます。

 

こうした様々なケースを踏まえると、

プログラムでSharePointのリストを使うことが明らかである場合には、英数字で命名するのが望ましいです。

 

とはいえ、運用中のリストの内部列名は変更できませんし、一般利用者がこの仕様を意識するケースはほとんどありませんので、日本企業の多くの組織では、アプリ作成がしづらいリスト設計になっていると想定します。

ですので、アプリ作成の障壁を下げるよう、管理側から利用者に対して「Power AppsやPower AutomateでSharePointリストを使用する際の注意点」として、この点についても案内することをお勧めします。

 

おまけ

ラベルに表示させる場合、列名、内部名どちらでもOKであるようです(図7,8参照)。

Power Apps内部列名によるラベル表示

最初に登録した内部列名

Power Apps外部列名によるラベル表示

後で変更した外部列名

池内佑哉

池内佑哉

IT2年生です。趣味は紅茶です。

Twitter
facebook
シェアする
記事カテゴリ
最新記事
Power PlatformPower AutomateSharePoint
2021.07.23

Power AutomateでExcelデータをSharePointにインポートするために考えること(第3回)

c#
2021.07.21

C# アトリビュートを用いたバリデーションでコーディングの保守性・可読性の向上を実現する

Power PlatformPower AppsSharePoint
2021.07.16

Power AppsとSharePoint連携:SortByColumns関数で日本語列をソートする際の注意点

Power PlatformPower AutomateSharePointExcel
2021.07.14

Power AutomateでExcelデータをSharePointにインポートするために考えること(第2回)

Angular
2021.07.07

Angular MaterialのMatTable でデータ構造の動的な変更

PageTop
ページトップに戻る