PowerApps|委任|ギャラリー×SPリストとの関係の中で関数を使って解説

ギャラリー×リスト×関数を使って委任について解説します
Aさんはギャラリーに対して関数を書いているようです。しかしうまくいってないようですね。
どうやら「委任」が関係しているようです。

ギャラリーに対して関数を使う際まれに波線が表示されます。
一緒に警告(エクスクラメーション)マークも表示されます。
これは何か問題が起きているのでしょうか?





これは「委任」ができないことを知らせる警告です。
問題になる可能性がある事を知らせてくれています。
まずは委任を理解するところからはじめましょう。



委任を理解すると警告表示は消えるのでしょうか・・・。
理解しただけでは表示は消えませんよね?



はい。表示自体は消えません。しかし良いことがありますよ。
委任を理解すると警告マークとうまく付き合える様になります。
最初に「委任」の意味を勉強しましょう。次にアプリ内で委任がどのように作用するのかを確認・整理します。
その後具体的に関数を使って委任ができる時/できない時の状態を確認していきます。
最後に委任とうまく付き合う方法を少しだけ説明するという流れで進めていきます。
関連書籍
関連書籍を掲載しておきます。電子書籍です。
現物の書籍はこちらです。


関連記事
ギャラリーについて紹介している記事はこちらです。
ギャラリー内を検索したいときはこちらの記事の内容がおすすめです。
委任とは?
まずは「委任」という言葉自体を理解する事にしましょう。
委任とはどんな意味なのか?
今回はWikipediaを引用します。一般的には「相手に仕事を任せる」ことを「委任」と言います。
委任(いにん)とは
当事者の一方(委任者)が一定の行為をすることを相手方(受任者)に委託する契約。
Wikipedia:委任より抜粋
委任を本記事のケースに当てはめてみる
上記をふまえて今回のケースにおける委任者と受任者を確認します。Aさんのコメントをおさらいします。
ギャラリーに対して関数を使う際まれに波線が表示されます
ギャラリーに対して関数を使用するという事はApps ×データソース(SP)との関係になります。
よってAppsのギャラリーとSPのリストとの関係で委任者、受任者の関係が発生しているという事になります。
- 委任者(指示を出す側):PowerApps のアプリ
- 受任者(指示を受ける側):SharePointのリスト
Apps側から「関数はこっちで用意するからSPリスト側で関数を実行後値だけ返して」と指示を出します。
SP側ではAppsからの指示を受けて処理を行い値をAppsのギャラリーに返すという流れになります。
このようにデータソース側に処理をお願いする行為をPowerApps の中では「委任」と呼んでいます。
委任は関数によってできる時とできない時があります
実は全ての関数が委任の対象になっているわけではありません。
委任できる関数と委任できない関数が存在します。詳細はMicrosoft公式ドキュメントをご覧ください。



つまり委任できない関数の時だけ波線が表示されます。
ランダムに発生しているのではなくて規則性があるんですよ。



だから波線が出る時と出ない時があったんですね。
やっと理解できました。
なぜ特定の関数だけ処理を委任できるのか?
答えは簡単「決まりだから」です。つまりここはどれだけ勉強しても変えられないラインです。
私たちにできる事は「委任できる/できない」関数を理解して使い分けることになります。
そのうえで委任できない関数を使うとどんな問題が起きるのかを次のブロックで確認することにします。
委任できる関数と委任できない関数を使ってみる
まずは結論を提示しておきます。委任できる関数は何の問題もないです。問題は委任できない関数です。
- 委任できる関数:SharePointリストのレコード数に関係なく演算結果がギャラリーに返ってくる
- 委任できない関数:詳細は以下参照願います
事前準備:取得出来るレコード数の上限を開放しておく
まずはPowerApps側で取得できるレコード数の上限を開放しましょう。
デフォルト値は500となっていますが設定を変えるだけで2,000件までデータを取得することができます。


PowerAppsStudio(エディタ)の画面中央上部に歯車マークの設定をクリック。
そのあとは画像のように処理を進めていただくとレコード数の上限を開放できます。(最大2,000です)
委任できる関数_Filter関数
Filter関数を使用したケースを説明する為に画像と作業フローを用意しました。


PowerAppsでギャラリーのItemsプロパティに式を設定します。
- Filter関数が分からない方はこちらをご覧ください
- 式内のAはSharePointリストのA列という意味です
Filter(‘リスト名’,A >1000)
Filter関数は委任できる関数です。
SharePointリストのレコード数に関係なく関数を用いた演算結果をPowerApps 側に返します。
Filter関数でA列の値が1,000より大きいレコードを返してくださいという指示です。
委任できる関数による指示なのでSharePointリストですべての処理を担当してもらえます。
SharePoint側で関数を使って演算を行い結果をPowerAppsのギャラリーに返してくれるという仕様です。
委任できない関数_IsBlank関数
IsBlank関数を使用したケースを説明する為に画像と作業フローを用意しました。
Filter関数は委任できる関数ですがIsBlank関数と一緒に使うことで「委任できない関数」群になります
加えて今回はSharePointリストの値が数値ではなく列の中で文字列と空欄が混在するという仕様です。


画像内には3つの矢印が用意されており①~③の番号がふってあります。
以下作業フローの番号と合わせて画像をご覧ください。
PowerAppsでギャラリーのItemsプロパティに式を設定します。
- IsBlank関数が分からない方はこちらをご覧ください
- 式内のAはSharePointリストのA列という意味です
Filter(‘リスト名’,IsBlank(A))
IsBlank関数は委任できない関数です。SharePointリスト側で演算は行われません。
よってリストの上位2,000件の情報だけPowerApps側に返してきます。
ギャラリーはリストから返された情報のみをもとに演算しギャラリーに表示させます。
この状態ではおよそ1,000件分のデータしか表示されないことになります。
委任できない関数のポイントを整理する
あらためて「委任できない関数を使用した時」の状況を整理します。大きくわけて3つです。
- SharePointリスト側では演算が行われない
- SharePointリストのレコードのID上位2,000件が強制的にギャラリーに返ってくる
- ギャラリーは返ってきた値のみを使って演算を自ら行い結果をギャラリーに表示させる
結論:委任できない関数を使う事でリストの2,001件目以降のデータが取得できません。
SharePointリストが2,000件を超えている環境において委任できない関数を使うのはやめましょう



これは難しいですね。



いくつか対策があります。
次のブロックで紹介しますね。
対策
今回は3つの対策を紹介します。
- 委任できる関数だけを使ってアプリを作ることにする
- 対象のデータソースを必ず2,000件以下に保持する仕様にする
- コレクションを使用する(コレクションとの関係では委任が発生しない為)
この中で簡単にできるのは①と②です。裏を返すと初心者様向けにはこの2つしか対策はないです。
- ①:委任できる関数であれば警告メッセージは表示されず取得データが足りない等のエラーは起きない
- ②:委任できない関数であったとしてもデータソースの最大数が2,000件以下なら問題にならない
③のコレクションについてはプログラミング未経験の方には理解が難しいのでおすすめしません
需要があれば別途記事にする予定です。
まとめ
PowerAppsの中で「わかりにくい」とされている委任について説明しました。
非常に難しいテーマですので何度か読み返していただくことをおすすめします。
「難しいな」と感じた方はそもそもPowerAppsとSharePointリストとの関係が理解できてないかもしれません。
PowerAppsのギャラリーとSharePointのリストとの関係を理解することができる記事を用意しておきます。

