やること
- SPOリストへの登録周りに実装を行う。
手順
1.「次へ」ボタンの表示を編集
Text: If (glbCurrentStepId = glb代表者入力_STEP_ID, "登録する", "次へ")
「次へ」ボタンをクリックして、そのままデータが登録されるのは不親切である。
終端のフォームにたどり着いたら、「登録する」の表示に切り替える。
2.SPOリストの登録
Patch(
テニス会場レンタル申請データ
, Defaults(テニス会場レンタル申請データ)
, 会場選択Form.Updates
, 日程選択Form.Updates
, 備品選択Form.Updates
, 代表者入力Form.Updates
);
登録ボタンをクリックしたとき、かつ終端のフォームを表示しているときに実行する。
登録フォームにはSubmitForm
という標準関数があるが、複数のフォームから入力情報を集めて一括登録を行うにはPatch
関数を利用する。
SPOリストの名前でForm名.Updates
を重ねるだけでよい(簡単)
3.スケジュールマスタの空き数更新
UpdateIf(
スケジュールマスタ
, Int(連番) = Int(glbSelectedスケジュール候補日1.連番)
Or Int(連番) = Int(glbSelectedスケジュール候補日2.連番)
Or Int(連番) = Int(glbSelectedスケジュール候補日3.連番)
, {空き数: 空き数 - 1}
);
Updatelf
はデータソースを更新することのできる関数である。
Or
演算子を用いることで最大3つのレコード取得し、「空き数:空き数-1」で更新をしている。
この処理は「2.SPOリストの登録」の処理より後に記述しなければならない。
なぜなら、Updatelf
を先に更新した場合、以下の順序で処理が走る可能性がある。
- スケジュールマスタが更新され、空き数が「1」⇒「0」になる
RefleshScheduleTable
がReflesh
(スケジュールマスタ)を呼び、最新のマスタ情報を参照するvalスケジュール候補日1~3
のItems
の『空き数が1以上のレコードのみ取得する』の条件を外れるため選択が空欄にリセットされるPatch
関数が呼ばれ、valスケジュール候補日1~3
が空欄であるため、SPOリストにも日付が入らない
4.事後処理
登録が完了したら、完了画面に遷移するなど、いろいろなアイデアはあるが簡略化のため、一番最初のフォーム画面に遷移させる。
そのままでは登録した時の情報が画面上に残ったままであるため、それらを初期化する。
/** フォームの入力値の初期化 */
ResetForm(日程選択Form);
ResetForm(備品選択Form);
ResetForm(代表者入力Form);
ResetForm(会場選択Form);
/** フォームの入力値として使用している変数の初期化 */
Set(cond会場ID, "");
Set(temp会場検索結果レコード, Blank());
Set(glbSelectedスケジュール候補日1, Blank());
Set(glbSelectedスケジュール候補日2, Blank());
Set(glbSelectedスケジュール候補日3, Blank());
/** 表示するフォーム画面を1番目に戻す */
Set(glbCurrentStepId, glb会場選択_STEP_ID);
/** 画面上に完了のメッセージを簡易的に表示 */
Notify("完了");
ResetForm
を呼び出すとユーザー入力情報がリセットすることができる。
ただし、Default
プロパティで変数を参照するようなオブジェクトの場合、その変数を初期化しないとリセットされないため、合わせて変数も初期化している。
最終的なNextButton.OnSelect
のコードを念のため記載する。
If (glbCurrentStepId <> glb代表者入力_STEP_ID
,
/** 画面が代表者入力でないとき */
Set (glbCurrentStepId, glbCurrentStepId + 1)
,
/** 画面が代表者入力であるとき */
Patch(
テニス会場レンタル申請データ
, Defaults(テニス会場レンタル申請データ)
, 会場選択Form.Updates
, 日程選択Form.Updates
, 備品選択Form.Updates
, 代表者入力Form.Updates
);
UpdateIf(
スケジュールマスタ
, Int(連番) = Int(glbSelectedスケジュール候補日1.連番)
Or Int(連番) = Int(glbSelectedスケジュール候補日2.連番)
Or Int(連番) = Int(glbSelectedスケジュール候補日3.連番)
, {空き数: 空き数 - 1}
);
/** フォームの入力値の初期化 */
ResetForm(日程選択Form);
ResetForm(備品選択Form);
ResetForm(代表者入力Form);
ResetForm(会場選択Form);
/** フォームの入力値として使用している変数の初期化 */
Set(cond会場ID, "");
Set(temp会場検索結果レコード, Blank());
Set(glbSelectedスケジュール候補日1, Blank());
Set(glbSelectedスケジュール候補日2, Blank());
Set(glbSelectedスケジュール候補日3, Blank());
Set(converted代表者電話番号, Blank());
Set(converted代表者メールアドレス, Blank());
/** 表示するフォーム画面を1番目に戻す */
Set(glbCurrentStepId, glb会場選択_STEP_ID);
/** 画面上に完了のメッセージを簡易的に表示 */
Notify("完了");
);
5.動作確認
プレビュー画面を表示し、4つのフォームの全てに情報を入力する。
登録するのボタンをクリックし
- 入力情報がSPOリスト(テニスコート申請データ)に反映されること
- スケジュールマスタの空き数の数が「1」減っていること
- 先頭のフォーム画面に戻ること
- 全ての入力情報がリセットされていること
を確認できればOK