所要時間: 約 30 分
はじめてのモジュール作成 で基本的な検索は作れました。 このチュートリアルでは、実務でよく必要になる検索のカスタマイズを扱います。
- 複数条件の And / Or 組み合わせ
- 検索条件の初期値
- 検索実行時の独自処理
- 複数の検索レイアウト(簡易・詳細)を切り替え
- はじめてのモジュール作成 を完了
- 検索タブに複数の Field を配置済み
Grid 単位で検索条件の結合方法を切り替えられます。プロパティパネルで設定します。
| 設定 | 挙動 |
|---|---|
| And 検索 | Grid 内のすべての条件を満たす(既定) |
| Or 検索 | いずれかの条件を満たす |
| ユーザー指定 | 画面上でユーザーが And / Or を選ぶ |
Grid を入れ子にすると、AND / OR を組み合わせられます。
例: (Name AND ProductName) AND (PurchaseDate OR ShippingDate)
- 外側 Grid を And にして
NameとProductNameを配置 - 外側 Grid の中に内側 Grid を追加
- 内側 Grid を Or にして
PurchaseDateとShippingDateを配置
→ 詳しく: モジュール検索設定
画面を開いた時点で、検索条件に既定値を入れておくことができます。 よく使うのは「過去 1 ヶ月のデータだけ表示」といった初期フィルタです。
- Document Outline で Search レイアウト(またはその中の Grid)を選択
- プロパティパネルの OnSearchInitialization を新規作成
void SearchLayoutDesign_OnSearchInitialization()
{
// Date フィールドの範囲を「過去 1 ヶ月」に
QuotationDate.SearchMin = DateOnly.FromDateTime(DateTime.Today.AddMonths(-1));
QuotationDate.SearchMax = DateOnly.FromDateTime(DateTime.Today);
// Text フィールドに初期値
QuotationName.SearchValue = "sample1";
// Boolean フィールドの初期値
IsActive.SearchValue = true;
}- Field の検索値は
SearchValue/SearchMin/SearchMax/SearchIsEmptyに代入 - 型は各 Field の値型に準じる(Date →
DateOnly?、Number →decimal?など) - 画面表示時に一度だけ呼ばれる
SearchField の OnSearched を使うと、検索が実行された後に処理を挟めます。
- 検索件数をバーに表示
- 検索結果をさらに別の処理に渡す
- ログ記録
SearchField のプロパティパネルから OnSearched を新規作成。
void Search_OnSearched()
{
// 検索結果の件数をラベルに表示
ResultCountLabel.Text = $"{List.TotalCount} 件ヒット";
// 件数が 0 なら警告
if (List.TotalCount == 0)
{
Toaster.Warn("該当するデータがありません");
}
}- 一覧画面の上は 簡易検索(名前だけ)
- 「詳細検索」ボタンでダイアログに 詳細検索 レイアウトを表示
「+」ボタンで simple と advanced の 2 つのレイアウトを作ります。
- 一覧画面上の SearchField →
LayoutName: simple - 詳細検索ダイアログ用の SearchField →
LayoutName: advanced
void AdvancedSearchButton_OnClick()
{
// Search モジュールの「advanced」レイアウトをダイアログで開く
var searcher = new Order();
searcher.LayoutName = "advanced";
await searcher.ShowDialog();
}検索条件を URL に反映すると、ブックマーク・共有 URL から検索結果を再現できます。
SearchField のプロパティで:
- UserUrlParameter:
true - SearchUrlParameterKey:
q(URL での検索キー名) - PageIndexUrlParameterKey:
p
例: https://app/orders?q=user:yamada&p=2
ユーザーがこの URL をブックマークすれば、同じ検索結果をすぐ開き直せます。
| API | 用途 |
|---|---|
Search.SearchModule.XxxField.Value = ... |
検索条件を直接設定 |
await Search.ExecuteSearch() |
プログラム的に検索を実行 |
await Search.ExecuteClear() |
検索条件をクリア |
Search.Condition |
現在の検索条件(ModuleSearcher として) |


