SiteSettings(サイト設定のデータ構造)
テーブルの管理画面で設定する一覧のカラム構成、フィルタ、編集画面のレイアウト、通知、スクリプトなどは、すべて SiteSettings というクラスにまとめて保持されています。このページでは、その保存形式と読み込みの流れ、管理画面のタブとプロパティの対応、項目(カラム)ごとの設定を持つ Column クラスを整理します。
結論: SiteSettings は Sites テーブルの SiteSettings カラムに JSON として丸ごと 保存されています。管理画面の各タブは特定のプロパティに対応しており、項目ごとの設定は Columns(Column のリスト)に 既定値から変更したものだけ が入ります。
INFO
SiteSettings とタブの対応は 1.5.7.0、Column クラスは 1.5.2.0 を対象にしています。ソースへのリンクは Implem/Implem.Pleasanter のコミット c76832d 固定のパーマリンクです。
保存場所とデータ構造
Sites テーブルの SiteSettings カラム
SiteSettings は Implem.Pleasanter/Libraries/Settings/SiteSettings.cs で定義された C# のクラスです。
[Serializable()]
public class SiteSettings
{
// ...
}このクラスが JSON にシリアライズされ、データベースの Sites テーブルの SiteSettings カラムに格納されます。カラムにはそのテーブル専用の設定が JSON として丸ごと入っており、管理画面で「更新」ボタンを押すとこの JSON が上書き保存されます。
-- SQL Server の場合
SELECT SiteId, Title, SiteSettings
FROM "Sites"
WHERE SiteId = 123;SELECT "SiteId", "Title", "SiteSettings"
FROM "Sites"
WHERE "SiteId" = 123;SELECT `SiteId`, `Title`, `SiteSettings`
FROM `Sites`
WHERE `SiteId` = 123;図を読み込み中…
保存されるプロパティと保存されないプロパティ
SiteSettings のプロパティには、JSON に保存されるもの(Serialized)と保存されないもの(NonSerialized)の 2 種類があります。
- Serialized:
[NonSerialized]が付いていないプロパティ。管理画面の設定がそのまま JSON に保存されます。 - NonSerialized:
[NonSerialized]属性が付いたプロパティ。JSON には含まれず、起動時やリクエスト処理時にプログラム内で動的に設定される実行時専用の情報です。
主な NonSerialized プロパティは次のとおりです。
[NonSerialized]
public long SiteId; // サイトID
[NonSerialized]
public string Title; // サイトのタイトル
[NonSerialized]
public string Body; // サイトの説明文
[NonSerialized]
public Dictionary<string, Column> ColumnHash; // 列名→Columnの高速参照辞書
[NonSerialized]
public Dictionary<long, SiteSettings> Destinations; // リンク先のSiteSettings
[NonSerialized]
public Dictionary<long, SiteSettings> Sources; // リンク元のSiteSettings
[NonSerialized]
public long InheritPermission; // 権限の継承元サイトIDSiteId や Title が NonSerialized なのは、Sites テーブルに SiteId・Title のカラムが独立して存在し、JSON に重複して持つ必要がないためです。読み込み時にそれぞれのカラムから取得して SiteSettings オブジェクトに詰め込まれます。
// SiteSettings.cs より(リンク先SiteSettings の構築時)
var ss = SiteSettingsUtilities.Get(context: context, dataRow: dataRow);
ss.SiteId = dataRow.Long("SiteId"); // Sitesテーブルから別途取得
ss.Title = dataRow.String("Title"); // Sitesテーブルから別途取得INFO
1.5.5.0 以前は [NonSerialized] public Permissions.Types? PermissionType; も SiteSettings に定義されていましたが、1.5.6.0 で Context.ContextPermissions(Dictionary<string, ContextPermission>)へ移されました。現在は context.GetContextPermission(ss: ss).PermissionType で参照します。
スキーマバージョン
| プロパティ | 型 | 説明 |
|---|---|---|
Version | decimal | SiteSettings のスキーマバージョン(1.5.7.0 時点で 1.017) |
バージョンごとの変遷は サイト設定の変遷 を参照してください。
読み込みの流れ
SiteSettings が読み込まれるときは、デシリアライズ → (必要なら)マイグレーション → Init() の順に処理されます。
図を読み込み中…
Init() メソッドでは次のことが行われます。
- 各プロパティのデフォルト値の補完(
nullの場合に Parameters や固定値を設定) GridColumns、FilterColumns、EditorColumnHashなどのカラムリストの初期化ColumnHash辞書の構築- 各種リスト(
Aggregations、Links、Viewsなど)の null チェックと空リスト初期化
管理画面の表で「デフォルト:パラメータ依存」としているプロパティは、この補完で Parameters の値が入るものです。
管理画面タブとプロパティの対応
SiteSettings には 100 個以上のプロパティがあり、管理画面の各タブが特定のプロパティに対応しています。スクリプトや API から設定を扱うときに、どのプロパティを見ればよいかの手がかりになります。
タブの全体構成
管理画面のタブは SiteUtilities.cs の EditorTabs メソッドで定義されています。テーブルの種別(Issues / Results / Wikis / Dashboards)によって表示されるタブが異なります。Issues・Results 共通のタブ構成は次のとおりです。
| タブ名 | SiteSettings での主な対応 |
|---|---|
| 一般 | ReferenceType、タイトル設定 |
| 一覧 | GridColumns、GridPageSize、GridEditorType など |
| フィルタ | FilterColumns、UseFiltersArea、UseNegativeFilters など |
| 集計 | Aggregations |
| 編集 | EditorColumnHash、Tabs、Sections、RelatingColumns など |
| リンク | Links、LinkColumns、LinkPageSize |
| 履歴 | HistoryColumns、AllowRestoreHistories |
| 移動 | MoveTargets |
| 集計式 | Summaries |
| 計算式 | Formulas |
| プロセス | Processes |
| ステータス制御 | StatusControls |
| ビュー | Views、ViewLatestId |
| 通知 | Notifications |
| リマインダー | Reminders |
| インポート | ImportEncoding、UpdatableImport、RejectNullImport |
| エクスポート | Exports、AllowStandardExport |
| カレンダー | EnableCalendar、CalendarType |
| クロス集計 | EnableCrosstab、NoDisplayCrosstabGraph |
| ガント | EnableGantt、ShowGanttProgressRate |
| バーンダウン | EnableBurnDown |
| タイムシリーズ | EnableTimeSeries |
| アナリ | EnableAnaly |
| カンバン | EnableKamban |
| 画像ライブラリ | EnableImageLib、ImageLibPageSize |
| 検索 | SearchType、FullTextIncludeBreadcrumb、SaveViewType |
| メール | AddressBook、MailToDefault、MailCcDefault、MailBccDefault |
| サイト統合 | IntegratedSites |
| スタイル | Styles、StylesAllDisabled |
| スクリプト | Scripts、ScriptsAllDisabled |
| HTML | Htmls、HtmlsAllDisabled |
| サーバスクリプト | ServerScripts、ServerScriptsAllDisabled |
以降、主なタブのプロパティを詳しく見ます。
一般タブ
| プロパティ | 型 | 説明 |
|---|---|---|
ReferenceType | string | テーブル種別("Issues" / "Results" / "Wikis" / "Dashboards") |
TitleSeparator | string | タイトル結合区切り文字(デフォルト ")") |
TitleSeparator は、タイトルを複数の項目で構成するときに各項目の値をつなぐ文字です。既定値は ")" で、画面では編集タブの「タイトル」項目の詳細設定で変更します(1.5.8.1 のソースでは SiteSettings.cs#L421、Title.cs#L70、SiteUtilities.cs#L9258)。
一覧タブ(GridSettingsEditor)
| 画面の設定項目 | プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|---|
| 現在の設定(カラムリスト) | GridColumns | List<string> | 表示するカラム名の順序つきリスト | |
| 一括更新カラム | BulkUpdateColumns | SettingList<BulkUpdateColumn> | 一括更新ダイアログで変更できるカラムのリスト | |
| 1ページの表示数 | GridPageSize | int? | パラメータ依存 | 1ページあたりの表示件数 |
| 既定のビュー | GridView | int? | なし | ビューの ID(Views リストに対応) |
| ビューのリセット許可 | AllowViewReset | bool? | パラメータ依存 | ビューをリセットするボタンの表示 |
| グリッドエディタの種類 | GridEditorType | GridEditorTypes? | なし(通常の編集画面) | None=なし、Grid=グリッド内編集、Dialog=ダイアログ編集 |
| 履歴を一覧に表示 | HistoryOnGrid | bool? | false | バージョン履歴を一覧に表示するか |
| 毎回検索条件を要求する | AlwaysRequestSearchCondition | bool? | false | 一覧を開くたびに検索条件入力を要求 |
| 編集リンクを無効にする | DisableLinkToEdit | bool? | false | タイトルからの編集画面遷移リンクを無効化 |
| 編集を新しいタブで開く | OpenEditInNewTab | bool? | false | 編集画面を別タブで開く |
| リンクパスの展開 | EnableExpandLinkPath | bool? | false | リンクパスを展開表示(Parameters の設定が前提) |
一覧に表示する各カラムの詳細設定(一覧ラベルテキスト・フォーマット・セル幅など)は、GridColumns ではなく Columns リストの各 Column オブジェクトに保持されます(後述の「Column クラス」を参照)。
GridEditorTypes は enum で、JSON には整数で保存されます。
public enum GridEditorTypes : int
{
None = 0,
Grid = 10,
Dialog = 20
}{
"GridColumns": ["Title", "Body", "Status", "Manager", "Owner", "CompletionTime"],
"GridPageSize": 50,
"GridEditorType": 20,
"HistoryOnGrid": true
}フィルタタブ(FiltersSettingsEditor)
| 画面の設定項目 | プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|---|
| 現在の設定(カラムリスト) | FilterColumns | List<string> | フィルタに使用するカラム名の順序つきリスト | |
| 期限前日数(後) | NearCompletionTimeAfterDays | decimal? | パラメータ依存 | 期限前アラート(後)日数 |
| 期限前日数(前) | NearCompletionTimeBeforeDays | decimal? | パラメータ依存 | 期限前アラート(前)日数 |
| フィルタボタンを使用する | UseFilterButton | bool? | false | フィルタボタンを表示 |
| フィルタエリアを使用する | UseFiltersArea | bool? | true | フィルタエリアを常時表示 |
| 否定フィルタを使用する | UseNegativeFilters | bool? | パラメータ依存 | 「~以外」のフィルタ条件を使用 |
| ヘッダフィルタを使用する | UseGridHeaderFilters | bool? | false | 一覧ヘッダ行にフィルタ入力欄を表示 |
| 関連カラムフィルタを使用する | UseRelatingColumnsOnFilter | bool? | false | 関連カラムをフィルタに使用(ヘッダフィルタと排他) |
NearCompletionTimeAfterDays / NearCompletionTimeBeforeDays はフィルタタブで設定します。未設定のときは Parameters.General の同名の値が使われます(1.5.8.1 のソースでは SiteUtilities.cs#L7026-L7040、SiteSettings.cs#L343-L346)。
クイックフィルタのボタン表示は次のプロパティです。
| 画面の設定項目 | プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|---|
| 未完了フィルタを使用する | UseIncompleteFilter | bool? | true | 「未完了」ボタンを表示 |
| 自分のレコードフィルタを使用する | UseOwnFilter | bool? | true | 「自分のレコード」ボタンを表示 |
| 期限前フィルタを使用する | UseNearCompletionTimeFilter | bool? | true | 「期限前」ボタンを表示 |
| 遅延フィルタを使用する | UseDelayFilter | bool? | true | 「遅延」ボタンを表示 |
| 期限超過フィルタを使用する | UseOverdueFilter | bool? | true | 「期限超過」ボタンを表示 |
| 検索フィルタを使用する | UseSearchFilter | bool? | true | 検索ボックスを表示 |
{
"FilterColumns": ["Status", "Owner", "CompletionTime"],
"UseFilterButton": true,
"UseNegativeFilters": true,
"UseGridHeaderFilters": false,
"UseIncompleteFilter": true
}集計タブ(AggregationsSettingsEditor)
| プロパティ | 型 | 説明 |
|---|---|---|
Aggregations | List<Aggregation> | 集計設定リスト |
各 Aggregation は、グループ化するカラム(GroupBy)、集計種別(Type)、集計対象カラム(Target)を持ちます。Type は enum で、Count = 0、Total = 1、Average = 2 です(1.5.8.1 のソースでは Aggregation.cs#L7-L17)。
{
"Aggregations": [
{ "Id": 1, "GroupBy": "Status", "Type": 0 },
{ "Id": 2, "GroupBy": "Owner", "Type": 1, "Target": "WorkValue" }
]
}担当者の項目名は Owner、管理者は Manager です(AssigneeId という項目はないため、例では Owner にしています)。
編集タブ(EditorSettingsEditor)
編集タブは最も設定項目が多いタブです。
編集カラム構成・タブ・セクション
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| 現在の設定(カラムリスト) | EditorColumnHash | Dictionary<string, List<string>> | タブ別の編集カラム名リスト |
| 「全般」タブのラベル | GeneralTabLabelText | string | 全般タブの表示名(既定は「全般」) |
| タブリスト | Tabs | SettingList<Tab> | ユーザー定義タブのリスト |
| タブ最終ID | TabLatestId | int? | 新規タブ作成時に使う連番管理用 |
| セクションリスト | Sections | List<Section> | 編集画面のセクション区切り定義 |
| セクション最終ID | SectionLatestId | int? | 新規セクション作成時の連番管理用 |
| 関連カラム | RelatingColumns | SettingList<RelatingColumn> | 選択時に自動入力される関連カラムの設定 |
EditorColumnHash は、キーがタブ・値が表示カラム名のリストの辞書です。キーは "General"(全般タブ)または "_Tab-{Id}"("_Tab-1"、"_Tab-2" など)で、タブを使っていない場合はキー "General" だけが存在します。セクションはカラムリストの中に "_Section-{Id}" という形式で挿入されます(1.5.8.1 のソースでは SiteSettings.cs#L2856-L2859、SiteSettings.cs#L2909-L2912)。
{
"GeneralTabLabelText": "基本情報",
"TabLatestId": 2,
"Tabs": [
{ "Id": 1, "LabelText": "詳細設定" },
{ "Id": 2, "LabelText": "数値項目" }
],
"EditorColumnHash": {
"General": ["Title", "Body", "Status", "Manager", "Owner", "CompletionTime", "Comments"],
"_Tab-1": ["ClassA", "ClassB", "ClassC"],
"_Tab-2": ["_Section-1", "NumA", "NumB", "DateA"]
}
}編集画面のその他の設定
| 画面の設定項目 | プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|---|
| バージョンアップ種別 | AutoVerUpType | Versions.AutoVerUpTypes? | Default | 更新時の自動バージョンアップ制御 |
| 新規作成後のアクション | AfterCreateActionType | Versions.AfterCreateActionTypes? | Default | 一覧に戻る/新規作成画面を開く |
| 更新後のアクション | AfterUpdateActionType | Versions.AfterUpdateActionTypes? | Default | 一覧に戻る/次のレコードに移動 |
| コメントの編集を許可する | AllowEditingComments | bool? | false | 投稿済みコメントの編集を許可 |
| コピー機能を使用する | AllowCopy | bool? | パラメータ依存 | レコードのコピーボタンを表示 |
| 参照コピー機能を使用する | AllowReferenceCopy | bool? | パラメータ依存 | 参照コピーボタンを表示 |
| コピー時に追加する文字 | CharToAddWhenCopying | string | パラメータ依存 | コピー時にタイトルに追加する文字 |
| 分割機能を使用する | AllowSeparate | bool? | false | レコード分割ボタンを表示(課題管理のみ) |
| テーブルロック機能を使用する | AllowLockTable | bool? | false | テーブルロックボタンを表示 |
| リンクを非表示にする | HideLink | bool? | false | 編集画面のリンクボタンを非表示 |
| Ajaxでレコードを切り替える | SwitchRecordWithAjax | bool? | false | 前後レコードを Ajax で切り替え |
| コマンドボタンを自動ポストバックする | SwitchCommandButtonsAutoPostBack | bool? | false | コマンドボタン変更時の自動送信 |
| 削除時に画像を削除する | DeleteImageWhenDeleting | bool? | true | レコード削除時に添付画像も削除 |
リンク・履歴・移動タブ
| タブ | 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|---|
| リンク | リンク設定 | Links | List<Link> | リンク先テーブルとカラムの定義 |
| リンク | リンク一覧のカラム | LinkColumns | List<string> | リンク一覧に表示するカラム名 |
| リンク | リンク一覧のページサイズ | LinkPageSize | int? | リンク一覧の1ページあたり表示件数 |
| リンク | 既定ビュー | LinkTableView | int? | リンク一覧の既定ビュー ID |
| 履歴 | 履歴一覧のカラム | HistoryColumns | List<string> | 履歴一覧に表示するカラム名 |
| 履歴 | 履歴からの復元を許可する | AllowRestoreHistories | bool? | 履歴レコードからの復元ボタンを表示 |
| 履歴 | 履歴の物理削除を許可する | AllowPhysicalDeleteHistories | bool? | 履歴レコードの完全削除ボタンを表示 |
| 移動 | MoveTargets | List<long> | 移動先として選択できるサイト ID のリスト |
集計式・計算式・プロセス・ステータス制御タブ
| タブ | プロパティ | 型 | 説明 |
|---|---|---|---|
| 集計式 | Summaries | SettingList<Summary> | 他のテーブルから集計した値を特定カラムに反映する設定のリスト |
| 計算式 | Formulas | SettingList<FormulaSet> | 計算式の設定リスト |
| 計算式 | FormulasGetErrorDetails | bool? | 計算式エラーの詳細を取得 |
| プロセス | Processes | SettingList<Process> | プロセスボタンの設定リスト |
| ステータス制御 | StatusControls | SettingList<StatusControl> | ステータス遷移の制御設定リスト |
ビュータブ(ViewsSettingsEditor)
| プロパティ | 型 | 説明 |
|---|---|---|
Views | List<View> | ビューの設定リスト |
ViewLatestId | int? | 新規ビュー作成時の連番管理用 |
SaveViewType | SaveViewTypes? | ビューの保存場所(Session / User) |
各 View はフィルタ・ソート・一覧設定などを持ちます。ビューについては ビュー(フィルタ・ソータ) も参照してください。
{
"ViewLatestId": 3,
"Views": [
{
"Id": 1,
"Name": "自分の未完了",
"Own": true,
"Incomplete": true
},
{
"Id": 2,
"Name": "今週締切",
"Incomplete": true
}
]
}通知・リマインダー・インポート・エクスポート
| タブ | プロパティ | 型 | 説明 |
|---|---|---|---|
| 通知 | Notifications | SettingList<Notification> | 通知設定リスト |
| リマインダー | Reminders | SettingList<Reminder> | リマインダー設定リスト |
| インポート | ImportEncoding | string | インポート文字コード |
| インポート | UpdatableImport | bool? | インポート時の更新許可 |
| インポート | RejectNullImport | bool? | null インポートの拒否 |
| インポート | DefaultImportKey | string | インポートの既定キー |
| エクスポート | Exports | SettingList<Export> | エクスポート設定リスト |
| エクスポート | AllowStandardExport | bool? | 標準エクスポートの許可 |
| エクスポート | StandardExportType | StandardExportTypes? | 標準エクスポート種別 |
スタイル・スクリプト・HTML・サーバスクリプトタブ
これらのタブはそれぞれ拡張機能の設定リストと、全体を無効化するプロパティを持ちます。
| タブ名 | プロパティ | 型 | 全無効化プロパティ |
|---|---|---|---|
| スタイル | Styles | SettingList<Style> | StylesAllDisabled |
| スクリプト | Scripts | SettingList<Script> | ScriptsAllDisabled |
| HTML | Htmls | SettingList<Html> | HtmlsAllDisabled |
| サーバスクリプト | ServerScripts | SettingList<ServerScript> | ServerScriptsAllDisabled |
サーバスクリプトにはこのほか ServerScriptsGetErrorDetails(bool?、エラー詳細を取得)があります。
各設定は Disabled(無効化フラグ)プロパティと、適用するページ(All / New / Edit / Index / Calendar など)を持ちます。Disabled は管理画面の「無効」チェックボックスに対応し、有効な設定では JSON に出力されません。
{
"Scripts": [
{
"Id": 1,
"Title": "一覧に色付け",
"Body": "/* JavaScript コード */",
"Index": true
}
]
}スタイル・スクリプト・HTML の 3 つには、下書き出力の制御プロパティもあります(サーバスクリプトにはありません)。
| プロパティ | 型 | 説明 |
|---|---|---|
DraftOutputMode | int? | 0: 常に出力 / 1: 下書きのみ出力 / 2: 下書き時は出力しない |
DraftKey | string | 下書き判定に使うキー |
それぞれの仕組みは 拡張スタイル、拡張スクリプト、拡張 HTML を参照してください。
権限
| プロパティ | 型 | 説明 |
|---|---|---|
PermissionForCreating | Dictionary<string, Permissions.Types> | 新規作成時の権限設定 |
PermissionForUpdating | Dictionary<string, Permissions.Types> | 更新時の権限設定 |
CreateColumnAccessControls | List<ColumnAccessControl> | 作成時カラムアクセス制御リスト |
ReadColumnAccessControls | List<ColumnAccessControl> | 参照時カラムアクセス制御リスト |
UpdateColumnAccessControls | List<ColumnAccessControl> | 更新時カラムアクセス制御リスト |
権限の判定については アクセス権限の深掘り を参照してください。
Column クラス(項目ごとの設定)
Columns と ColumnHash
項目(カラム)ごとの設定は、SiteSettings の 2 つのプロパティで扱われます。
| プロパティ | 型 | 保存 | 役割 |
|---|---|---|---|
Columns | List<Column> | JSON に保存 | 管理画面の「項目詳細」ダイアログで設定した内容 |
ColumnHash | Dictionary<string, Column> | 保存しない(NonSerialized) | カラム名で直接引くためのキャッシュ辞書 |
Columns には デフォルト値から変更された設定だけ が保存されます。たとえば LabelText が定義の既定値(「分類A」など)と同じなら省略されるため、Columns リストには実際にカスタマイズしたカラムの情報だけが含まれます。
ColumnHash は Init() が呼ばれるとき(読み込み時)に UpdateColumnHash() で構築されます。
// UpdateColumnHash()で構築される
ColumnHash = new Dictionary<string, Column>();
foreach (var column in AllColumns(context))
{
ColumnHash[column.ColumnName] = column;
}// 使用例
var column = ss.ColumnHash.Get("ClassA");Column クラスの定義
Column クラスは Implem.Pleasanter/Libraries/Settings/Column.cs で定義されています。SiteSettings と同様に、[NonSerialized] 属性が付いたプロパティは JSON に保存されず、実行時に設定されます。
// Implem.Pleasanter/Libraries/Settings/Column.cs
public class Column
{
// ...
}項目詳細ダイアログとプロパティの対応
「項目詳細」ダイアログはタブ構成になっており、各タブの設定が対応するプロパティに保存されます。
基本(全カラム共通)
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| 表示名 | LabelText | string | 編集画面でのラベル文字列 |
| テキストの位置 | TextAlign | SiteSettings.TextAlignTypes? | Left=左揃え、Center=中央、Right=右揃え |
| スタイル | FieldCss | string | 入力欄のスタイル(下表) |
| ビューアの切替 | ViewerSwitchingType | ViewerSwitchingTypes? | マークダウンのビューア切替制御 |
| 必須入力 | ValidateRequired | bool? | 必須入力チェック |
| 一括更新を許可する | AllowBulkUpdate | bool? | 一括更新ダイアログでの変更許可 |
| 重複禁止 | NoDuplication | bool? | 同じ値の入力を禁止 |
| 重複時のメッセージ | MessageWhenDuplicated | string | 重複入力時のエラーメッセージ |
| コピー時に引き継ぐ | CopyByDefault | bool? | コピー作成時に値を引き継ぐか |
| 読取専用 | EditorReadOnly | bool? | 編集画面での入力を不可にする |
| 自動ポストバック | AutoPostBack | bool? | 値変更時に自動で画面更新 |
| 自動ポストバック時に返す項目 | ColumnsReturnedWhenAutomaticPostback | string | 自動ポストバック時に更新するカラム名リスト |
| 折り返しなし | NoWrap | bool? | テキストの折り返しを禁止 |
| 非表示 | Hide | bool? | 編集画面からカラムを非表示 |
| 拡張フィールドCSS | ExtendedFieldCss | string | カラム全体のフィールド要素に追加する CSS クラス |
| 拡張コントロールCSS | ExtendedControlCss | string | 入力コントロールに追加する CSS クラス |
| 説明 | Description | string | カラムの説明文(ツールチップに表示) |
| 入力ガイド | InputGuide | string | 入力欄下部のガイドテキスト |
FieldCss の選択肢は次のとおりです。
| 値 | 画面の表示名 | 説明 |
|---|---|---|
null(未設定) | 通常 | 標準の幅の入力欄 |
"field-wide" | ワイド | 幅広の入力欄(テキストエリアなど) |
"control-markdown" | マークダウン | Markdown エディタ |
"control-markup" | リッチテキスト | リッチテキストエディタ(HTML 形式) |
文字列カラム
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| 最大文字数 | MaxLength | decimal? | 入力できる最大文字数 |
| 既定値 | DefaultInput | string | 新規作成時の初期値 |
| インポートキー | ImportKey | bool? | インポート時の一意キーとして使用 |
| 添付画像を許可する | AllowImage | bool? | Markdown エディタへの画像添付を許可 |
選択肢カラム
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| 選択肢リスト | ChoicesText | string | 選択肢の定義テキスト(JSON 形式または URL スキーム) |
| コントロール種別 | ChoicesControlType | string | "DropDown"=ドロップダウン、"Radio"=ラジオボタン |
| 検索機能を使用する | UseSearch | bool? | 選択肢のインクリメンタルサーチを有効化 |
| 複数選択 | MultipleSelections | bool? | 複数選択を許可(nvarchar 型のみ) |
| 空欄選択肢を表示しない | NotInsertBlankChoice | bool? | 先頭の空欄選択肢を非表示 |
| アンカーリンク | Anchor | bool? | 選択した値をリンクとして表示 |
| アンカーを新規タブで開く | OpenAnchorNewTab | bool? | アンカーリンクを新規タブで開く |
| アンカーフォーマット | AnchorFormat | string | アンカーリンクの URL フォーマット |
ChoicesText の基本的な書き方は次のとおりです。
"value1","ラベル1"
"value2","ラベル2"
"value3","ラベル3"テーブルから選択肢を動的に取得する場合は URL スキームを使います。
[[items,{SiteId}]]選択肢の詳しい使い方は 選択肢一覧 を参照してください。
数値カラム
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| 既定値 | DefaultInput | string | 新規作成時の初期値 |
| インポートキー | ImportKey | bool? | インポート時の一意キーとして使用 |
| コントロール種別 | ControlType | string | "Normal"=通常テキスト、"Spinner"=スピナー |
| 最小値 | Min | decimal? | スピナー使用時の最小値 |
| 最大値 | Max | decimal? | スピナー使用時の最大値 |
| ステップ | Step | decimal? | スピナー使用時の増減幅 |
| 単位 | Unit | string | 数値の単位(「円」「個」など) |
| 小数点以下桁数 | DecimalPlaces | int? | 表示する小数点以下の桁数 |
| 丸め方 | RoundingType | SiteSettings.RoundingTypes? | 四捨五入・切り上げ・切り捨てなど |
| NULL を許可する | Nullable | bool? | NULL 値を入力可能にする |
RoundingTypes の値は次のとおりです。
| enum | 値 | 説明 |
|---|---|---|
AwayFromZero | 10 | 四捨五入(0 から遠い方向に丸める) |
Ceiling | 20 | 切り上げ |
Truncate | 30 | 切り捨て |
Floor | 40 | 床関数(負の値は切り捨て) |
ToEven | 50 | 銀行丸め(偶数丸め) |
日付・日時カラム
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| 既定値 | DefaultInput | string | 新規作成時のオフセット日数(「0」で今日) |
| 表示形式(編集画面) | EditorFormat | string | 日付のフォーマット("Ymd" / "Ymdhm" など) |
| 分単位のステップ | DateTimeStep | int? | 時刻入力時の分の増減単位 |
添付ファイルカラム
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| 添付ファイルの削除を許可する | AllowDeleteAttachments | bool? | 添付ファイルの削除ボタンを表示 |
| 既存履歴を削除しない | NotDeleteExistHistory | bool? | 更新時に以前のファイルを保持 |
| ストレージプロバイダー | BinaryStorageProvider | string | "DataBase" / "LocalFolder" / "AutoDataBaseOrLocalFolder" |
| 同名ファイルを上書きする | OverwriteSameFileName | bool? | 同名ファイル追加時に上書き |
| 最大ファイル数 | LimitQuantity | decimal? | 添付できるファイルの最大数 |
| 最大ファイルサイズ | LimitSize | decimal? | 1 ファイルあたりの最大サイズ(MB) |
| 合計最大サイズ | TotalLimitSize | decimal? | 全添付ファイルの合計最大サイズ(MB) |
| サムネイル最大サイズ | ThumbnailLimitSize | decimal? | サムネイルの最大サイズ(KB) |
自動採番(AutoNumberingSettingTab)
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| フォーマット | AutoNumberingFormat | string | 採番フォーマット({NUM:0} などのプレースホルダーを含む) |
| リセット単位 | AutoNumberingResetType | AutoNumberingResetTypes? | Year / Month / Day / String |
| 開始番号 | AutoNumberingDefault | int? | 採番の初期値 |
| ステップ | AutoNumberingStep | int? | 採番の増分 |
拡張 HTML(ExtendedHtmlSettingTab)
| 画面の設定項目 | プロパティ | 型 | 挿入位置 |
|---|---|---|---|
| フィールドの前 | ExtendedHtmlBeforeField | string | フィールド全体(ラベル+コントロール)の直前 |
| ラベルの前 | ExtendedHtmlBeforeLabel | string | ラベルの直前 |
| ラベルとコントロールの間 | ExtendedHtmlBetweenLabelAndControl | string | ラベルとコントロールの間 |
| コントロールの後 | ExtendedHtmlAfterControl | string | コントロールの直後 |
| フィールドの後 | ExtendedHtmlAfterField | string | フィールド全体の直後 |
入力検証(EditorDetailsettingTab)
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| クライアント正規表現 | ClientRegexValidation | string | ブラウザ側の正規表現バリデーション |
| サーバー正規表現 | ServerRegexValidation | string | サーバー側の正規表現バリデーション |
| 検証エラーメッセージ | RegexValidationMessage | string | 正規表現不一致時のエラーメッセージ |
多言語(MultilingualSettingTab)
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| 言語別表示名 | MultilingualLabelText | string | 言語コードと表示名の JSON マッピング |
{"en": "Due Date", "ja": "完了予定日"}多言語対応の実装は 多言語対応の実装 を参照してください。
一覧・フィルタの詳細設定ダイアログ
一覧タブ・フィルタタブの「詳細設定」ダイアログで設定する内容も、SiteSettings 側ではなく Column 側に保存されます。
一覧の詳細設定(GridColumnDialog)
| 画面の設定項目 | プロパティ | 型 | 説明 |
|---|---|---|---|
| 表示名(一覧) | GridLabelText | string | 一覧ヘッダーに表示するラベル(未設定なら LabelText を使用) |
| 表示形式 | GridFormat | string | 日付型カラムの一覧での表示フォーマット |
| セルCSS | ExtendedCellCss | string | 一覧の各セルに追加する CSS クラス |
| 左端に固定 | CellSticky | bool? | セルを左端に固定表示 |
| セル幅を設定する | CellWidth | int? | セルの幅(px)を指定 |
| セル内でテキストを折り返す | CellWordWrap | bool? | セル内のテキスト折り返しを有効化 |
| グリッドデザイン | GridDesign | string | 一覧表示のカスタム HTML テンプレート |
フィルタの詳細設定(FilterColumnDialog)
| 画面の設定項目 | プロパティ | 型 | 対象型 | 説明 |
|---|---|---|---|---|
| フィルタ設定モード | DateFilterSetMode | ColumnUtilities.DateFilterSetMode? | 数値・日付 | デフォルト/範囲選択 |
| 最小値 | NumFilterMin | decimal? | 数値 | フィルタスライダーの最小値 |
| 最大値 | NumFilterMax | decimal? | 数値 | フィルタスライダーの最大値 |
| ステップ | NumFilterStep | decimal? | 数値 | フィルタスライダーの刻み幅 |
| 最小スパン(日数) | DateFilterMinSpan | int? | 日付 | 日付フィルタの範囲最小値(過去日数) |
| 最大スパン(日数) | DateFilterMaxSpan | int? | 日付 | 日付フィルタの範囲最大値(未来日数) |
| 年度単位 | DateFilterFy | bool? | 日付 | 年度単位のフィルタを有効化 |
| 半期単位 | DateFilterHalf | bool? | 日付 | 半期単位のフィルタを有効化 |
| 四半期単位 | DateFilterQuarter | bool? | 日付 | 四半期単位のフィルタを有効化 |
| 月単位 | DateFilterMonth | bool? | 日付 | 月単位のフィルタを有効化 |
| 検索種別 | SearchType | SearchTypes? | 文字列 | 部分一致/完全一致/前方一致 |
SearchTypes の値は次のとおりです。
[JsonConverter(typeof(StringEnumConverter))]
public enum SearchTypes : int
{
PartialMatch = 1, // 部分一致
ExactMatch = 2, // 完全一致
ForwardMatch = 3, // 前方一致
PartialMatchMultiple = 11, // 部分一致(複数語)
ExactMatchMultiple = 12, // 完全一致(複数語)
ForwardMatchMultiple = 13 // 前方一致(複数語)
}旧互換プロパティ(非推奨)
バージョンアップの過程で残された古いプロパティです。現在は使われず、SiteSettingsMigrator が読み込み時に新しいプロパティへ変換します。
| プロパティ | 型 | 現在対応するプロパティ |
|---|---|---|
GridVisible | bool? | GridColumns に含まれるかどうか |
FilterVisible | bool? | FilterColumns に含まれるかどうか |
EditorVisible | bool? | EditorColumnHash に含まれるかどうか |
TitleVisible | bool? | TitleColumns に含まれるかどうか |
LinkVisible | bool? | LinkColumns に含まれるかどうか |
HistoryVisible | bool? | HistoryColumns に含まれるかどうか |
GridDateTime | string | GridFormat |
ControlDateTime | string | EditorFormat |
ControlFormat | string | EditorFormat |
実行時にだけ設定されるプロパティ
[NonSerialized] のプロパティは JSON に保存されず、カラム定義(ColumnDefinition)や実行時のコンテキストから設定されます。
| プロパティ | 型 | 内容 |
|---|---|---|
No | int? | カラム定義の並び順 |
Size | string | DB の型サイズ(例:"200") |
DefaultNotNull | bool | DB の NOT NULL 制約 |
Required | bool | 必須カラムかどうか(システムが強制) |
NotSelect | bool | SELECT されないカラム |
NotUpdate | bool | UPDATE されないカラム(更新不可) |
GridColumn | bool | 一覧表示可能なカラムか |
FilterColumn | bool | フィルタ使用可能なカラムか |
EditorColumn | bool | 編集画面に表示可能なカラムか |
TitleColumn | bool | タイトル構成可能なカラムか |
LinkColumn | bool | リンク一覧に表示可能なカラムか |
HistoryColumn | bool | 履歴一覧に表示可能なカラムか |
TypeName | string | 型名("nvarchar"、"int"、"datetime" など) |
TypeCs | string | C# の型("string"、"decimal"、"DateTime" など) |
LabelTextDefault | string | システム定義のデフォルトラベル(変更前の名前) |
Name | string | テーブルエイリアスつきのカラム名(JOIN 時) |
ChoiceHash | Dictionary<string, Choice> | 選択肢の表示名辞書(実行時に構築) |
SiteSettings | SiteSettings | このカラムが属する SiteSettings への参照 |
SiteId | long | このカラムが属するサイト ID |
Width | int | DB 定義での列幅 |
GridStyle | string | 一覧の CSS スタイル(定義ベース) |
Aggregatable | bool | 集計可能なカラムか |
Computable | bool | 計算式で使用可能なカラムか |
ServerScriptModelColumn | ServerScriptModelColumn | サーバスクリプト用カラムモデル |
物理カラム名の ColumnName には [NonSerialized] が付いておらず、JSON に保存されます。下の JSON の例のとおり、Columns の各要素は ColumnName でどのカラムの設定かを識別します(1.5.8.1 のソースでは Column.cs#L73-L74、[NonSerialized] のプロパティは Column.cs#L168-L261)。
カラム定義そのもの(Definition_Column)については CodeDefiner を参照してください。
保存される JSON の例
{
"Columns": [
{
"ColumnName": "ClassA",
"LabelText": "顧客名",
"ValidateRequired": true
},
{
"ColumnName": "ClassB",
"LabelText": "商品カテゴリ",
"ChoicesText": "\"A001\",\"製品A\"\n\"A002\",\"製品B\"\n\"A003\",\"製品C\"",
"UseSearch": true,
"NotInsertBlankChoice": true
},
{
"ColumnName": "NumA",
"LabelText": "売上金額",
"Unit": "円",
"DecimalPlaces": 0,
"RoundingType": 10
},
{
"ColumnName": "DescriptionA",
"LabelText": "詳細メモ",
"FieldCss": "control-markdown",
"AllowImage": true
},
{
"ColumnName": "DateA",
"LabelText": "契約日",
"EditorFormat": "Ymd",
"GridFormat": "Ymd"
},
{
"ColumnName": "AttachmentsA",
"LabelText": "契約書",
"LimitQuantity": 5,
"LimitSize": 10
}
]
}SQL で SiteSettings を確認する
SiteSettings カラムは JSON なので、各 RDBMS の JSON 関数で中身を取り出せます。
サイト単位のプロパティを取り出す
SELECT
s.[SiteId],
s.[Title],
JSON_QUERY(s.[SiteSettings]) AS [SiteSettings]
FROM [Sites] s
WHERE s.[SiteId] = 123;
-- 特定のプロパティを取り出す
SELECT
s.[SiteId],
s.[Title],
JSON_VALUE(s.[SiteSettings], '$.GridPageSize') AS [GridPageSize],
JSON_VALUE(s.[SiteSettings], '$.Version') AS [Version]
FROM [Sites] s
WHERE s.[SiteId] = 123;SELECT
s."SiteId",
s."Title",
s."SiteSettings"::jsonb AS "SiteSettings"
FROM "Sites" s
WHERE s."SiteId" = 123;
-- 特定のプロパティを取り出す
SELECT
s."SiteId",
s."Title",
s."SiteSettings"::jsonb ->> 'GridPageSize' AS "GridPageSize",
s."SiteSettings"::jsonb ->> 'Version' AS "Version"
FROM "Sites" s
WHERE s."SiteId" = 123;SELECT
s.`SiteId`,
s.`Title`,
JSON_UNQUOTE(JSON_EXTRACT(s.`SiteSettings`, '$.GridPageSize')) AS `GridPageSize`,
JSON_UNQUOTE(JSON_EXTRACT(s.`SiteSettings`, '$.Version')) AS `Version`
FROM `Sites` s
WHERE s.`SiteId` = 123;Columns を展開してカラム設定を一覧する
SELECT
s.[SiteId],
s.[Title],
col.[ColumnName],
col.[LabelText],
col.[FieldCss]
FROM [Sites] s
CROSS APPLY OPENJSON(s.[SiteSettings], '$.Columns')
WITH (
[ColumnName] NVARCHAR(100) '$.ColumnName',
[LabelText] NVARCHAR(256) '$.LabelText',
[FieldCss] NVARCHAR(100) '$.FieldCss'
) col
WHERE s.[TenantId] = 1
ORDER BY s.[SiteId];SELECT
s."SiteId",
s."Title",
col->>'ColumnName' AS "ColumnName",
col->>'LabelText' AS "LabelText",
col->>'FieldCss' AS "FieldCss"
FROM "Sites" s
CROSS JOIN LATERAL jsonb_array_elements(
(s."SiteSettings"::jsonb)->'Columns'
) col
WHERE s."TenantId" = 1
ORDER BY s."SiteId";SELECT
s.`SiteId`,
s.`Title`,
col.`ColumnName`,
col.`LabelText`,
col.`FieldCss`
FROM `Sites` s
CROSS JOIN JSON_TABLE(s.`SiteSettings`, '$.Columns[*]' COLUMNS (
`ColumnName` VARCHAR(100) PATH '$.ColumnName',
`LabelText` VARCHAR(256) PATH '$.LabelText',
`FieldCss` VARCHAR(100) PATH '$.FieldCss'
)) col
WHERE s.`TenantId` = 1
ORDER BY s.`SiteId`;特定のプロパティが設定されているカラムだけを抽出することもできます。次は ChoicesText が設定されているカラムを抽出する例です。
SELECT
s.[SiteId],
s.[Title],
col.[ColumnName],
col.[ChoicesText]
FROM [Sites] s
CROSS APPLY OPENJSON(s.[SiteSettings], '$.Columns')
WITH (
[ColumnName] NVARCHAR(100) '$.ColumnName',
[ChoicesText] NVARCHAR(MAX) '$.ChoicesText'
) col
WHERE col.[ChoicesText] IS NOT NULL
AND s.[TenantId] = 1;SELECT
s."SiteId", s."Title",
col->>'ColumnName' AS "ColumnName",
col->>'ChoicesText' AS "ChoicesText"
FROM "Sites" s
CROSS JOIN LATERAL jsonb_array_elements(s."SiteSettings"::jsonb->'Columns') col
WHERE col->>'ChoicesText' IS NOT NULL
AND s."TenantId" = 1;SELECT s.`SiteId`, s.`Title`, col.`ColumnName`, col.`ChoicesText`
FROM `Sites` s
CROSS JOIN JSON_TABLE(s.`SiteSettings`, '$.Columns[*]' COLUMNS (
`ColumnName` VARCHAR(100) PATH '$.ColumnName',
`ChoicesText` LONGTEXT PATH '$.ChoicesText'
)) col
WHERE col.`ChoicesText` IS NOT NULL
AND s.`TenantId` = 1;SQL での情報取得は DB メンテナンスと SQL での情報取得 も参照してください。