こんにちは、アーティサン株式会社の池内佑哉と申します。
私は、Microsoft社が提供するPower AppsやSharePointを用いて業務の自動化・効率化を目指されているお客様のご支援をしています。
今回は、SharePointの仕様がPower Appsとかみ合わずエラーになる、という内容のお話です。
Power Appsには、SharePointのリストを基にキャンバスアプリを自動作成する機能があります。
この機能を利用することで、レコードの追加、編集、削除機能が設定されたアプリが自動的に作成されます。
そのため、初めてPower Appsに触る方でも、標準的な機能が設定されたアプリを作成・利用することができます。
もちろん、そのまま使ってもよいですが、ほとんどの場合、ちょっと機能を追加したい、使い勝手を良くしたいなどの要望が出てきます。
しかし、SharePointのリストとPower Appsには、普段触らない方はほとんどがハマるといってもよいほど、混乱を招く仕様があります。
この仕様は製品がリリースされた当初から存在する、いわば“SharePoint/Power Appsあるある”なのですが・・・、
私自身も初めての案件対応の際、うっかりこの仕様に引っ掛かり悩んだことがあります。
弊社には、エンドユーザー様ご自身で運用していきたいという要望を多くいただいています。
そういったエンドユーザー様を始め、これからPower AppsやSharePointでの学習を始めようとされている方に、ぜひとも覚えていただきたい内容だと考え、今回取り上げてみました。
Power Apps キャンバスアプリによる現象の再現(SortByColumns関数)
それでは、本題に移ります。
今回は、Power Appsのキャンバスアプリにて、SortByColumns関数を使い、ソート順を[タイトル]順から[発行日]順に変更するケースについて考えます。
まず、SharePointリストに[発行日]という列を追加し、Power AppsにてSharePointリストをデータソースとして指定したキャンバスアプリを作成します(図1)。
SharePointリストに[発行日]列を追加
次に、Power Apps キャンバスアプリ内にて、SharePointリストのデータを[発行日]順にソートするように変更します。
具体的には、Power Apps キャンバスアプリ内のBrowseGallery1のItemsにある、SortByColumn関数の値を変更します。
初期値では、ソートする列を指定する引数(第2引数)に“Title”が入っており、ソート順は昇順になっています。
このソート対象を”Title”から”発行日”に書き換えます(図2)。
想定であれば、データの表示が[発行日]順になるはずですが、エラーが発生してしまいます。
Power Apps キャンバスアプリのSortByColumns関数で引数の値を変更すると、エラーが発生
SortByColumn関数のエラー内容
エラー内容より、[発行日]列が存在しないことがわかります。正しく列名を指定しているはずなのに、なぜこのようなエラーが発生するのでしょうか?
エラー原因(SharePointリストの内部列名と外部列名)
SharePointのリストで列を追加する際、列名を日本語などのマルチバイト文字で登録すると、見かけはそのまま登録されますが、実は内部ではエンコードされた値で登録されます。
※スペースなどの半角記号も同様にエンコードされます。
Power Apps キャンバスアプリのSortByColumns関数の2つ目の引数は、「見えている列名」(以降「外部列名」)ではなく、システム内部の列名(以降「内部列名」)を参照する必要があります。(図4)
Power Apps キャンバスアプリでは、SharePointの内部列名を参照する
一般的にPower Apps以外のプログラム(JavasScript, C#, Power Automate等)でSharePointの列を指定する場合は、原則内部列名を指定します。
一方で、Power Appsで提供されている多くの関数は、外部列名でも動作するように機能が提供されていますが、SortByColumnsなど、列操作に関する一部の関数に関しては、内部列名を指定する必要があります(ダブルクォーテーションで文字列として指定する必要がある関数は、すべて内部列名を指定します)。
自動でPower Apps キャンバスアプリを作成時した際、SortByColumnsの引数には、“Title”が設定されており、SharePoint上では“タイトル”として表示されています。
読めてしまう分、直感的にエラーの原因に気づきにくい=内部列名を意識しない。
これが混乱を招きやすいポイントです。
このエラーは、日本語だけではなくハングルなどのマルチバイト文字を使用したときにも発生します。
これを回避するためには、次のような方法があります。
対策(SharePointはシングルバイトで作成する)
SharePointリストで項目を作成する際は、一度列名をシングルバイト(英数字)で作成し、内部列名を英語で登録した後、外部列名を日本語に変更するという方法で回避できます。
シングルバイトで作成(内部列名を英語で登録)
外部列名を日本語に変更
※内部列名は後から変更できないので、最初からシングルバイトで作成することが重要です。
ではSharePointリストの項目を実際に修正しましょう。
先ほど作成したSharePointリストの[発行日]列を一度削除し、[IssueDate]で登録した後、外部列名を[発行日]に変更しました。
また、Power Apps キャンバスアプリのSortByColumns関数では、第2引数に“発行日”(外部列名)ではなく、“IssueDate”(内部列名)を指定しました。
以下を見ていただくと、エラーは発生しませんでした。
SharePointリストの項目をシングルバイトで作成し、その値をPower Apps キャンバスアプリで指定。
Power Appsアプリ上でデータを入力し、日付順にソートされていることを確認します。
Power Apps キャンバスアプリ上で日付順にソートされている
まとめ
今回紹介したエラーの他にも、SharePointは日本語などのマルチバイト入力がネックになるケースがあります。
例えば、SharePointリスト等を新規作成する時、タイトルをシングルバイト(英数字)で記載すれば、その文字列をそのままURLとして反映させることができます。
一方で、日本語のみで記述すると[List1][List2]…のような表記になります。(これも後から変更できません!)
なお、SharePointを裏側で使用するMicrosoft Teamsも、チーム名を日本語で入力してしまうと、メールアドレスやサイトURLがエンコードされてしまいます。
こうした様々なケースを踏まえると、
プログラムでSharePointのリストを使うことが明らかである場合には、シングルバイト(英数字)で命名するのが望ましいです。
とはいえ、現在運用されているのSharePointリストの内部列名は変更できませんし、一般利用者がこの仕様を意識するケースはほとんどありませんので、日本企業の多くの組織では、Power Appsなどのアプリ作成がしづらい設計になっていることが多いです。
ですので、Power Appsアプリ作成の障壁を下げるよう、管理側から利用者に対して「Power AppsやPower AutomateでSharePointリストを使用する際の注意点」として、この点について案内することをお勧めします。
おまけ(Power Appsのラベルでは内部列名・外部列名はどちらとも指定可能)
Power Apps キャンバスアプリのラベルを使用する際、TextプロパティにSharePointリストの項目名を表示させる場合は、外部列名、内部列名どちらでも指定可能でした。(図7,8参照)。
Textプロパティに内部列名を指定
Textプロパティにに外部列名を指定
【こちらも合わせて読みたい】
地方自治体ローコード導入・運用支援サービス(Power Apps・Power Automate)
Microsoft社が提供するローコード技術であるPower Platformを用いて、自治体様のDX化を支援します。
X-SP | SharePoint デザイン・機能拡張サービス
デザイン×機能を兼ね備えたSharePointを提供いたします。
SharePointの利便性を向上し、操作性と視認性を兼ね備えたデザインでユーザーの業務効率化・ストレス低減を提供します。
内製化支援サービス | Power Platform(Power Apps・Power Automate)
Power Platform(Power Apps・Power Automate)開発や運用をスムーズに内製できるよう支援いたします。
DX人材育成プログラム | Power Apps・Power Automte 教育
Microsoft社が提供するローコード技術であるPower Platformを用いて、社内のDX化を推進するための人材を育成いたします。
Power Apps/Power Automateアプリ開発・導入支援サービス
Microsoft社が提供するPower Apps / Power Automateの導入支援として、高度なアプリも最速で作れる業務アプリ作成支援サービスを提供いたします。
SharePointモダン化コンサルティングサービス
従来のSharePoint から移行・モダン化したい方に向けて、事前調査からサイト作成・活用支援までトータルなコンサルティング・技術支援を提供いたします。
池内佑哉
IT2年生です。趣味は紅茶です。