業務の隙間を埋める技術メモ。

「それ、作れるか?」より 「それ、作って大丈夫か?」を考えたい。 業務で“ちゃんと使える”かどうかを、 実際に手を動かして確かめたログを残しています。

Power Platformで社内試験アプリを作る方法|第4回:Power Appsで出題ロジックを実装する 〜ランダム出題・セッション固定・1問ずつ表示まで一気に作る〜

 

次にやること:Power Appsで「出題ロジック」を作る

ここからようやく 画面を触ります
でもやることはシンプルで、

  • セッションを作る

  • 問題をランダムに引く

  • 1問ずつ表示する

まずは 「出題される」状態 を作ります。
採点も保存もまだ後です。


今回やること(ゴール)

Power Appsで以下を実現します。

  • 試験開始時に SessionId を発行

  • 問題マスタから

    • IsActive = true

    • 条件付きで

    • ランダム抽出

  • 抽出した問題を コレクションに保持

  • 画面に1問ずつ表示

👉
「ちゃんと試験っぽく問題が出る」
ここまでやります。


① 試験開始ボタンを作る

まずは 開始ボタン

  • 画面名:scrStart

  • ボタン名:btnStartExam

  • Text:試験を開始する

OnSelect(超重要)

// セッションIDを作る
Set(
    varSessionId,
    Text(Now(), "yyyymmddhhmmss") & "_" & User().Email
);

// 出題開始フラグ
Set(varQuestionIndex, 1);

👉
SessionId は ここで一度だけ作る
後続処理すべてで使います。


② 問題を「まとめて」取得する

次に、問題マスタから
今回使う問題だけ を引きます。

抽出条件(例)

  • IsActive = true

  • Categoryごとに均等

  • Difficultyは偏らせない

まずはシンプル版。

問題取得(OnSelectに追加)

ClearCollect(
    colAllQuestions,
    Filter(
        ExamQuestions,
        IsActive = true
    )
);

ここではまだ 全部取るだけ


③ ランダムに並び替える

Power Appsでは
Shuffle() が神 です。

ClearCollect(
    colShuffledQuestions,
    Shuffle(colAllQuestions)
);

👉
この時点で順番は毎回変わります。


④ 出題数だけ切り出す

例えば 20問出したい 場合。

ClearCollect(
    colExamQuestions,
    FirstN(colShuffledQuestions, 20)
);

これで、

  • 今回の試験で使う問題

  • 順番固定

  • 再描画しても変わらない

試験用コレクション が完成。


⑤ 1問ずつ表示する仕組み

次は表示側。

表示用画面

  • 画面名:scrExam

表示する問題

ラベル(問題文)

LookUp(
    colExamQuestions,
    ID = Last(
        FirstN(colExamQuestions, varQuestionIndex)
    ).ID
).QuestionText

ちょっとややこしいですが、

  • varQuestionIndex 番目の問題

  • を引いているだけです。

👉
「今何問目か」= varQuestionIndex


⑥ 選択肢を表示する

選択肢ボタン(例:Choice1)

Last(
    FirstN(colExamQuestions, varQuestionIndex)
).Choice1

Choice2〜4も同様。


⑦ 「次へ」ボタン

まだ保存しません。
まずは進めるだけ。

If(
    varQuestionIndex < CountRows(colExamQuestions),
    Set(varQuestionIndex, varQuestionIndex + 1),
    Navigate(scrFinish)
)

👉
これで 最後まで解ける 状態になります。


この時点でできていること

ここまでで、実はもう結構すごい。

  • 毎回違う問題が出る

  • 試験ごとに問題セットが固定される

  • 途中で画面を戻しても問題は変わらない

  • 「暗記ゲー」にならない

しかも コードは最小限


よくある詰まりポイント(先に潰す)

❌ 画面遷移のたびに問題が変わる

→ 問題取得を OnVisible に書いている

👉
必ず開始ボタンで一回だけ取得


❌ Shuffle を毎回呼んでいる

→ 出題中に順番が変わる

👉
Shuffle → コレクション固定


❌ QuestionIdを使っていない

→ 後で回答ログが地獄

👉
ID基準で扱う


次回予告(ここからが試験)

次はついに、

  • 回答を保存する

  • その場で正誤判定する

  • ExamAnswers に書き込む

  • SessionId と紐づける

試験として成立する瞬間 です。

ここまで来たら、
もう「アンケート」には戻れません。