Power Platform 学習アプリ作成会 #10

おはようございます、こんにちは、こんばんは。先日は学習アプリ作成会にご参加いただきありがとうございました。今回もレポートとして記事を投稿いたします。分かりにくかった点は以下の動画#8をご覧ください。

また、記事に誤りがあった場合は、優しくご指摘いただけますと幸いです。なお、この記事は筆者が一方的に書いているものなので、文責はkuro.が負うものです。ご理解いただけますと幸いです。

動画#10

復習動画は準備中です。
気長にお待ちください。

初めて聞いた時には何のことかサッパリ理解できなかった「委任」についてご教示いただきました。書籍やインターネットの記事を読んでもピンと来ない場合など、ご視聴ください。

例:Patch関数

学習アプリ作成会で使用した関数を中心に、ようさんのチャンネルで『関数解説シリーズ』としてリリースされています。チャンネル登録、高評価よろしくお願いします!

前回の復習(#9)

復習に関しては動画を視聴していただくか、当ブログの『Power Platform 学習アプリ作成会#9』をお読みいただければと思います。Akiraさんのチャンネルは高評価と登録をよろしくお願いします。

今回(#10)の目指すところ

トップ画面
委任の警告を解消

今回のポイントは、画面の細かい修正であったり、初学者の躓きポイントの一つとされている委任であったりを教えていただきました。着実にレベルアップできているような実感を得ました。

委任

ここからまとめる委任の話は『Microsoft Power Apps入門 ― 手を動かしてわかるローコード開発の考え方』(pp.364-380)も詳しいです。復習動画の他にも、テキストベースで理解を深めたい場合は、そちらをご参照ください。

委任って何?

Power Appsでデータを処理する状況になった時、⚠️←このマークを見たことのある人は少なくないはずです。これが「委任に関する警告表示」というものです。

設定画面

委任とは、読んで字のごとく「データソースに処理を委ねて任せる」ことです。

Power Appsは、一度に処理できるデータ件数に500件~2000件の制約がかかっています。例えば、10,000件のレコードが保存されたデータソースを使用してアプリケーションを作成しているとすると、残りの8,000件のレコードは置き去りになってしまいます。

委任を言い換えると「本当に必要なデータをPower Apps上で処理できるように、データソースから持ってくるレコード数をFilter関数などで少なくするよう勧告してくれる表示」だと考えておくと良いでしょう。

解決方法

成績表示画面を例に

解決方法は単純です。つまり、必要なデータだけを配列に保管し、その配列を操作するようにすればよいということです。

より具体的に言うと、これまでデータソースからレコード全件を検索して登録日時と合致するものを抽出していましたが、ClearCollect関数で登録日時分だけをPower Apps上に収集し、その集めたものを操作して成績画面に表示すると解決です。

galCalendarのOnSelectプロパティに以下のコードを書きます。操作的にはテンプレートセルのラベルを押していますが、実際に選択しているのはgalCalendarなので、こちらに書くようにします。

ClearCollect(
    colResult,
    Filter(
        Sort(
            English_Result,
            ID,
            Ascending
        ),
        DateValue(galCalendar.Selected.lblCalendarDay.Text) < 登録日時,
        DateValue(galCalendar.Selected.lblCalendarDay.Text) + 1 > 登録日時
    )
)

galTranscriptのItemsプロパティの Fiter ( ) 部分を取得したcolResultに置換します↓

FirstN(
    LastN(
        colResult,
        CountRows(colResult) - locCount
    ),
    10
)

この作業を、委任警告が出ている他のコントロール(btnPlusやlblWhereなど)にも行えば作業終了です。それぞれ以下のように書き換えると良いですね。

lblWhereのTextプロパティ

Concatenate(
    locCount + 1,
    "~",
    locCount + 10,
    "件",
    " / ",
    CountRows(colResult),
    "件"
)

btnPlusのDisplayModeプロパティ

If(
    locCount>=CountRows(
        colResult
    ) -10,
    DisplayMode.Disabled,
    DisplayMode.Edit
)

ギャラリーを使って画面遷移

ギャラリーを使ってボタンを配置する便利な方法を教えていただきました。テンプレートセルを編集すれば全て同じデザインになってくれますし、ボタンを増やしたくなったらコードを追加したりプロパティ・ペインで列を設定したりして簡単に増設できます。

ふつうに3つボタンを配置するよりも保守・運用しやすく、かつ、コントロールをたくさん置く必要がなくなるため、工程を減らせる上にアプリも軽くなります。積極的に使いたい方法です。

ギャラリーを選択

galButtonを新規作成し、そのItemsプロパティに [ ] と { } で以下のテーブルを作成します。

[
    {
        Title: "学習を始める",
        Navi: QuestionScreen
    },
    {
        Title: "成績を見る",
        Navi: ViewScreen
    },
    {
        Title: "単語を登録する",
        Navi: InputScreen
    }
]
テンプレートセルのbtnNavigateを選択

Navigate関数を入れる時に注意しなければならないのが、いつもギャラリーで書いているThisItem.Valueではなく、ThisItem.Value.Naviと書く必要がある点です。Valueテーブルを取得するのではなく、ValueテーブルのNaviを取得するからですね。

短絡的ではありますが、この ” . ” は所有を表す「~の」という理解で良さそうです。作成したボタンは各スクリーンにコピペしておきました。

細かいところを修正

表示するデータがない場合の処理

ここからは、細かいところを修正したり、colResultを使って必要な機能を追加したり、余分なコントロールを削除したり非表示にしたりしました。

学習履歴がない場合はlblWhereを非表示

次回(#11)に向けて

画像リンク

他、必要だと思った機能などを追加する作業は「発表会」という形で行います。12月3日(土)で学習アプリ作成会は最終回となります。Akiraさん、ようさん、そして筆者によるお披露目会です。お楽しみに。

…何を追加すれば良いのでしょう。

隅田智尋

PAGE TOP