やりたいこと
ドロップダウンが2つあり、2つめの選択肢が、1つめの選択肢に依存するような処理を実装する。
具体的には、下記「カレンダー」マスタデータを使用して
- 選択された日付を基準にして3営業日前以前の日付の一覧を取得する。
- 選択された日付を基準にして3営業日後以降の日付の一覧を取得する。
- 選択された日付を基準にして3営業日前後の日付の一覧を取得する。
マスタデータ
レイアウト
完了日付、申請日付というのは適当に付けた名前なので無視してよい。
実装
プルダウン1(完了日付)
Filter(営業日マスタ,営業日="T")
UpdateContext({IsResetFlag:true});
UpdateContext({IsResetFlag:false});
Set (Before3DaysID
, First(
LastN(
Filter(
営業日マスタ
, 営業日="T"
, Int(ID) < Int(EndDate.SelectedText.ID)
) , 3 )
).ID
);
Set (After3DaysID
, Last(
FirstN(
Filter(営業日マスタ
, 営業日="T"
, Int(ID) > Int(EndDate.SelectedText.ID))
, 3
)
).ID
);
プルダウン2(申請日付)
Filter(
営業日マスタ
, 営業日="T"
, Int(ID) <= Int(Before3DaysID)
)
Filter(
営業日マスタ
, 営業日="T"
, Int(ID) >= Int(After3DaysID)
)
Filter(
営業日マスタ
, 営業日="T"
, Int(ID) >= Int(Before3DaysID)
, Int(ID) <= Int(After3DaysID)
)
解説
プルダウン1(完了日付)
Items
:営業日の全量を設定している。OnChange
:UpdateContext
により、プルダウン1が選択されたとき、プルダウン2(申請日付)を未選択状態に戻している。
Before3DaysID
では選択された日付の「3営業日前」の1レコードを取得している。
(1) Filterでプルダウンの選択肢よりIDの小さい全てのレコードを取得
(2)LastNで(1)の末尾(3営業日前 ~ 1営業日前)を取得
(3)Firstで (2)の最も若いレコード(3営業日前)を取得
After3DaysID
もBefore3DaysID
と考え方自体は同じで、3営業日後を取得
プルダウン2(申請日付)
Before3DaysID
、After3DaysID
が求まっているので、あとはIDがそれより前、それより後という条件で再度Filter
によるマスタ検索を行えば、やりたいことは無事完了