こんにちは、アーティサン株式会社の池内佑哉と申します。
私は、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)。
次に、ソート順を[発行日]順にします。
BrowseGallery1のItemsにある、SortByColumn関数の値を変更することで達成します。
初期値ではソートする列を指定する引数に“Title”が入っており、ソート順は昇順になっています。
このソート対象を”Title”から”発行日”に書き換えます(図2)。
想定であればこの操作で[発行日]順になるはずですが、エラーが発生してしまいます。
(図3)のエラー文より、列が存在しない扱いとなっていることがわかります。正しく列名を指定しているはずなのに、なぜこのようなエラーが発生するのでしょうか?
原因
SharePointのリストで列を追加する際、列名を日本語など2Byte文字で登録すると、見かけはそのまま登録されますが、実は内部では文字コードに変換された後に登録されます(図4)。
※スペースなどの半角記号も同様に変換されます。
SortByColumns関数の2つ目の引数は、「見えている列名」(以降「外部列名」とします)ではなく、内部の列名(以降「内部列名」とします)を参照する必要があります。
ところが、内部列名は文字コードに変換されているため、外部列名を入力しても「該当なし」と処理されてエラーになります。
一般的にSharePointに関する開発で列を指定する場合、Power Apps以外のプログラム(JavasScript, C#, Power Automate等)では、原則、内部列名を指定します。
一方で、Power Appsの多くの関数は、外部列名でも動作するように機能が提供されていますが、SortByColumnsなど、列操作に関する一部の関数に関しては、プログラムと同様に内部列名を指定する必要があります(ダブルクォーテーションで文字列として指定する必要がある関数は、すべて内部列名を指定します)。
自動でアプリを作成時した際にのSortByColumnsの引数には作られる項目のTextは、【Title】が設定されており、SharePoint上では【タイトル】として表示されています。
読めてしまう分、直感的にエラーの原因に気づきにくい=内部列名を意識しない。
これが混乱を招きやすいポイントです。
このエラーは、日本語だけではなくハングルなどの2byte文字を使用したときにも発生します。
これを回避するためには、次のような方法があります。
対策
単純に、一度列名を1Byte文字(英数字)で作成し、内部列名を英語で登録した後で外部列名を日本語の列名に直す、という方法で回避できます。
※内部列名は後から変更できないので、最初から1Byte文字で作成することが重要です。
先ほど作成したリストの[発行日]を削除し、[IssueDate]で登録した後、外部列名を[発行日]に直したのが(図5)です。
エラーは発生していません。
データを入力し、日付順にソートされていることを確認します。
これにて、エラーの修正が完了しました。一件落着です。
まとめ
今回紹介したエラーの他にも、SharePointは日本語入力がネックになるケースがあります。
例えば、リスト等を新規作成する時、そのURLは、タイトルを英数字で記述すればその文字列をそのまま反映させることができます。
一方で、日本語のみで記述すると[List1][List2]…のような表記になります。(これも後から変更できません!)
なお、SharePointを裏側で使用するMicrosoft Teamsも、チーム名を日本語で入力してしまうと、メールアドレスやサイトURLが目視で識別できないもので作成されます。
こうした様々なケースを踏まえると、
プログラムでSharePointのリストを使うことが明らかである場合には、英数字で命名するのが望ましいです。
とはいえ、運用中のリストの内部列名は変更できませんし、一般利用者がこの仕様を意識するケースはほとんどありませんので、日本企業の多くの組織では、アプリ作成がしづらいリスト設計になっていると想定します。
ですので、アプリ作成の障壁を下げるよう、管理側から利用者に対して「Power AppsやPower AutomateでSharePointリストを使用する際の注意点」として、この点についても案内することをお勧めします。
おまけ
ラベルに表示させる場合、列名、内部名どちらでもOKであるようです(図7,8参照)。
※2021年7月16日にアーティサンオフィシャルブログに投稿された記事です。
投稿者:池内佑哉