Module は画面 1 つ分とそのデータをまとめた単位です。C# の class に近い概念で、1 つの Module に以下が詰まっています:
- Field の集まり — データと UI の部品
- DB との対応(テーブル・View にマッピング可能)
- 画面レイアウト(詳細・一覧・検索)
- スクリプト(イベントハンドラ・メソッド)
- 権限設定
Module を DB テーブルにマッピングすると、追加・編集・削除・一覧・検索が自動で動くようになります。
デザイナで Module を開くと 4 つのタブがあり、それぞれ異なる役割を担います。
| タブ | 役割 | リファレンス |
|---|---|---|
| 全体設定 | DB との入出力・アクセス権・スクリプトなど、データとしての振る舞い | 全体設定 |
| 詳細 | 1 件のデータを表示・編集する画面レイアウト | 詳細設定 |
| 一覧 | 複数件を並べる画面レイアウト | 一覧設定 |
| 検索 | 一覧の上に出る検索条件のレイアウト | 検索設定 |
DB と連携している場合、各レイアウトで表示するために取得するデータは以下です:
- レイアウトに表示されている Field
- レイアウトの
DataOnlyFieldsに設定されている Field IdField/OptimisticLockingField(Module に設定されている場合)
一覧画面などですべての Field を取得すると非効率なので、表示だけしない Field は DataOnlyFields で指定するのが基本です。
各タブ(詳細・一覧・検索)は、複数のレイアウトを定義できます。
| レイアウト種類 | 使用される場所 |
|---|---|
| 一覧レイアウト | 一覧ページ(default)、LinkField の検索結果 |
| 詳細レイアウト | 詳細ページ(default)、ダイアログ、ListField、DetailList、TileList、ModuleField |
| 検索レイアウト | 一覧ページ(default)、SearchField |
default は削除・改名できない固定レイアウトです。追加レイアウトは自由に命名でき、
LinkField / ListField など参照側で切り替えて使います。
| プロパティ | 型 | 説明 |
|---|---|---|
PageTitle |
string | ページタイトル(スクリプトから動的に変更可) |
LayoutName |
string | 現在のレイアウト名 |
ModuleLayoutType |
ModuleLayoutType | 現在のレイアウトタイプ(None / Detail / List / Search。通常は Detail / List / Search のいずれか) |
IsEnabled / IsVisible / IsViewOnly |
bool | 全体の有効・表示・読み取り専用 |
IsModified |
bool | 変更されたか |
IsValid |
bool | 配下の全 Field が IsValid == true のとき true |
IsNewData |
bool | 新規データか |
IsDeleted |
bool | 削除済みか |
Color |
string? | 文字色 |
BackgroundColor |
string? | 背景色 |
FontFamily |
string? | フォント名 |
FontSize |
int? | フォントサイズ |
ClassName |
string | 任意の CSS クラスを付与 |
DialogTitle |
string | ShowDialog / ShowPopup / ShowPanel で開いた時のタイトル |
| メソッド | 戻り値 | 説明 |
|---|---|---|
Submit() |
Task<bool?> | 登録・更新(標準の Submit 動作) |
Delete() |
Task | 削除 |
ValidateInput() |
Task | バリデーション実行(配下の全 Field を検証)。スクリプトは auto-await されるので if (Module.ValidateInput()) のように使える |
NewModule() |
Task | 新規作成状態に遷移 |
CopyModule() |
Task | 現在のデータをコピーして新規作成状態に遷移 |
ShowDialog(params string[] buttons) |
Task | Module をダイアログで開く。押されたボタン名を返す |
ShowPopup(int x, int y, params string[] buttons) |
Task | Module を指定座標のポップアップで開く |
ShowPanel(params string[] buttons) |
Task | Module をパネルで開く(PanelAlignment を渡す版もあり) |
CloseDialog(string button) |
Task | ShowDialog を閉じる |
ClosePopup(string button) |
Task | ShowPopup を閉じる |
ClosePanel(string button) |
Task | ShowPanel を閉じる |
Reload() |
Task | データを再読み込み |
ToJsonObject() |
JsonObject | JSON 化 |
SetJsonObject() |
Task | JSON を流し込む |
NotifyStateChanged() |
void | 再描画を促す |
SuspendNotifyStateChanged() |
IDisposable | 再描画を一時停止(バッチ更新用) |
// 詳細画面の Submit ボタンで処理を追加
void SaveButton_OnClick()
{
// 独自バリデーション
if (string.IsNullOrEmpty(Name.Value))
{
Name.SetError("名前を入力してください");
return;
}
if (!await ValidateInput()) return;
if (await Submit())
{
Toaster.Success("保存しました");
}
}
// ダイアログとして開く
var result = await new EditDialog().ShowDialog();Module には 4 種類の権限設定があります。詳しくは 認証・認可 を参照。
| 条件 | 意味 |
|---|---|
| UserRead | このユーザーが Module を読めるか |
| UserWrite | このユーザーが Module を書き換えられるか |
| DataRead | このデータを(このユーザーが)読めるか |
| DataWrite | このデータを(このユーザーが)書き換えられるか |
