次にやること: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 と紐づける
試験として成立する瞬間 です。
ここまで来たら、
もう「アンケート」には戻れません。