😺

Power Apps で必要な情報がデータソースから取得できない時の対処法

に公開

事象

新しいデータテーブルで、列数が多い SharePoint Lists を変数やコレクションに入れて表示しようとすると、

編集画面のアプリのプレビューではデータが表示されるのに、

本番の再生モードでは本当はデータが入っているのに表示されないという大変厄介な事象が発生することがあります。


上記スクリーンショットの赤枠部分のデータは以下のような式で作成しています。

ForAll(
    Filter(データソース,Index<=cnt+100,Index>cnt),
    Collect(_coldata,ThisRecord)
);

※cntは変数です。

原因

原因は設定にあります。
「SharePoint オンラインの明示的な列選択」はデフォルトでは オン になっています。

この設定は列数が多い SharePoint Lists の列を自動的に絞り込んで読み込むという設定です。勝手に絞り込まれた列以外の情報は Power Apps アプリにないので想定通りにデータが出てこないという状態になります。

回避方法

これを回避するには以下の2つの方法があります。

  • SharePoint オンラインの明示的な列選択 を オフ にする
  • ShowColumns 関数を利用して、式の中で利用する列を指定する

おすすめは ShowColumns 関数を利用する方法です。

SharePoint オンラインの明示的な列選択をオフにする方法

設定 > 更新 > SharePoint オンラインの明示的な列選択 のトグルをクリックするとオフになります。


ただ SharePoint オンラインの明示的な列選択は取得する列を少なくすることで、データソースの読み込み量が多くて、アプリが重たくなるのを防ぐ設定です。
その為、この設定をオフにしてしまうと、アプリ全体が重たくなってしまう可能性があります。多くの SharePoint Lists を利用する場合は オン のままにしておくことをお勧めします。

ShowColumns 関数を利用する方法

ShowColumns 関数でデータテーブルで表示する列を指定すると、Power Apps が必ずその列の値を取得してくれるようになります。今回の場合は ForAll 関数の第一引数で SharePoint Lists を指定しているので、そこで ShowColumns 関数を使って列を指定しました。

ForAll(
    ShowColumns(
        Filter(データソース,Index<=cnt+100,Index>cnt),
        Title,field_1,field_2,field_3,field_4,field_5,field_6,
        field_7,field_8,field_9,field_10,field_11
    ),
    Collect(_coldata,ThisRecord)
);

ただこれをやってしまうと、データテーブルで表示する列を増やすたびに式の更新が必要です。更新忘れがないように設計書などに更新するべき式をまとめておくとよいと思います。

まとめ

いかがでしたか?
私は普段ここまで列数の多い SharePoint Lists を作らないので、この事象をみてびっくりしましたΣ(゚Д゚)
今回はデータテーブルに表示されるコレクションだったのですぐに対処できましたが、これが アプリ上には表示されない けれど、検索で利用する変数やコレクションだった場合は原因究明に時間がかかる可能性があります。
こういう事象が発生することがあるという知識があれば、原因究明の時間を短縮したり、慌てずに対処できると思うので、頭の片隅に置いておいてくださいね。それではごきげんよう(^^♪

Discussion