技術情報ブログ
Power Platform
2021.07.16

Power AppsとSharePoint連携:SortByColumns関数で日本語列を使用する際の注意点(内部列名と外部列名)

Power AppsとSharePoint連携:SortByColumns関数で日本語列を使用する際の注意点(内部列名と外部列名)

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

私は、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リストに[発行日]列を追加

SharePointリストに[発行日]列を追加

 

次に、Power Apps キャンバスアプリ内にて、SharePointリストのデータを[発行日]順にソートするように変更します。

具体的には、Power Apps キャンバスアプリ内のBrowseGallery1のItemsにある、SortByColumn関数の値を変更します。

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

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

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

Power Apps キャンバスアプリのSortByColumns関数で引数の値を変更すると、エラーが発生

Power Apps キャンバスアプリのSortByColumns関数で引数の値を変更すると、エラーが発生

SortByColumn関数のエラー内容

SortByColumn関数のエラー内容

エラー内容より、[発行日]列が存在しないことがわかります。正しく列名を指定しているはずなのに、なぜこのようなエラーが発生するのでしょうか?

 

エラー原因(SharePointリストの内部列名と外部列名)

SharePointのリストで列を追加する際、列名を日本語などのマルチバイト文字で登録すると、見かけはそのまま登録されますが、実は内部ではエンコードされた値で登録されます。

※スペースなどの半角記号も同様にエンコードされます。

Power Apps キャンバスアプリのSortByColumns関数の2つ目の引数は、「見えている列名」(以降「外部列名」)ではなく、システム内部の列名(以降「内部列名」)を参照する必要があります。(図4)

Power Apps キャンバスアプリでは、SharePointの内部列名を参照する

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 キャンバスアプリ画面

SharePointリストの項目をシングルバイトで作成し、その値をPower Apps キャンバスアプリで指定。

 

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参照)。

Power Apps キャンバスアプリにて内部列名を指定

Textプロパティに内部列名を指定

Power Apps キャンバスアプリにて外部列名を指定

Textプロパティにに外部列名を指定

Azure SQL DatabaseやPower AppsとSharePointなどの開発担当:池内佑哉

池内佑哉

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

シェアする
記事カテゴリ
最新記事
2024.03.27

Power Automateのベストプラクティス・アンチパターン(5)【Apply to each×コンカレンシー×変数の設定はNG】

2024.03.20

Power Apps×Teams:Teams上からPower Appsを実行する方法

2024.03.13

Power Apps:SharePointリストと連携したカレンダーアプリを自作してみよう

2024.03.06

SharePointのあったらいいなを集めました(X-SPのご紹介)

2024.02.28

【2024年2月更新】Power Apps の実践的なノウハウ まとめ

モデル駆動型アプリPower AppsPower PlatformSharePointExcelPower AutomateC#attributevalidationローコードAngularAccessInfoPathMatTableAngular Materialデータ構造SortByColumns関数TypeScriptHTMLEF CoreマイグレーションFramework CoreAttribute directivesO/Rマッパーazure sql databaseCase式HTTP RequestCSSxUnit.Net Core 3.1VSCode.Net Core Test ExplorerDataverse for Teamsitem関数Google MapsMarker ClustererRANK()関数Dynamics 365 SalesMicrosoft TranslatorマーカークラスタリングライブラリtailwindcssマルチテナントドロップダウンメニューBreakpointObserverメディアクエリスマホPCレスポンシブ入門初心者中級者キャンバスアプリDatePickerDropdownviewビューアクセス制限承認リマインドSetForAllUpdateContextロードマップ技術It情報技術メッセージIDメールfirst()関数nest入れ子動的リストcollectionコレクション複数の添付ファイル承認フローformエクスポートインポートカスタマイズcomponentダイアログコンポーネントdialogTips新機能変数検索Microsoft 365グループセキュリティグループ送信元メールの送信差出人インスタントクラウドフロー自動化したクラウドフロー委任VBAエラーエクセルerror復元restorePower BI個人列ユーザー列SharePoint Onlineリスト非表示アプリ[市民開発者構築自動化したクラウド フローフローの種類インスタント クラウド フロースケジュール済みクラウド フローレスポンシブ レイアウトresponsive layoutデータ行の制限引き継ぎ退職所有者を変更異動LoopMicrosoftdesignJSONデザインtemplateテンプレート運用選択肢列参照列ChatGPTOpenAIオープンAIチャットGPTgalleryギャラリースクロールコンテナショートカットキーshortcut keyconcat関数文字制限フロー実行開発環境環境本番環境ライセンス環境構築手順pipelineCI/CDパイプラインDevOpsMicrosoft 365簡易在庫管理時間外通知ファイルフィルター クエリドキュメント ライブラリfilter querysortソートmultiple item複数項目シェアポイント便利機能カレンダーCalendarTeams
PageTop
ページトップに戻る