Skip to content

SiteSettings(サイト設定のデータ構造) ​

第4版作成 最終更新 (日本時間)
確認バージョン1.5.2.01.5.7.01.5.8.1

テーブルの管理画面で設定する一覧のカラム構成、フィルタ、編集画面のレイアウト、通知、スクリプトなどは、すべて 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# のクラスです。

csharp
[Serializable()]
public class SiteSettings
{
    // ...
}

このクラスが JSON にシリアライズされ、データベースの Sites テーブルの SiteSettings カラムに格納されます。カラムにはそのテーブル専用の設定が JSON として丸ごと入っており、管理画面で「更新」ボタンを押すとこの JSON が上書き保存されます。

sql
-- SQL Server の場合
SELECT SiteId, Title, SiteSettings
FROM "Sites"
WHERE SiteId = 123;
sql
SELECT "SiteId", "Title", "SiteSettings"
FROM "Sites"
WHERE "SiteId" = 123;
sql
SELECT `SiteId`, `Title`, `SiteSettings`
FROM `Sites`
WHERE `SiteId` = 123;

図を読み込み中…

保存されるプロパティと保存されないプロパティ ​

SiteSettings のプロパティには、JSON に保存されるもの(Serialized)と保存されないもの(NonSerialized)の 2 種類があります。

  • Serialized: [NonSerialized] が付いていないプロパティ。管理画面の設定がそのまま JSON に保存されます。
  • NonSerialized: [NonSerialized] 属性が付いたプロパティ。JSON には含まれず、起動時やリクエスト処理時にプログラム内で動的に設定される実行時専用の情報です。

主な NonSerialized プロパティは次のとおりです。

csharp
[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;                         // 権限の継承元サイトID

SiteId や Title が NonSerialized なのは、Sites テーブルに SiteId・Title のカラムが独立して存在し、JSON に重複して持つ必要がないためです。読み込み時にそれぞれのカラムから取得して SiteSettings オブジェクトに詰め込まれます。

csharp
// 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 で参照します。

スキーマバージョン ​

プロパティ型説明
VersiondecimalSiteSettings のスキーマバージョン(1.5.7.0 時点で 1.017)

バージョンごとの変遷は サイト設定の変遷 を参照してください。

読み込みの流れ ​

SiteSettings が読み込まれるときは、デシリアライズ → (必要なら)マイグレーション → Init() の順に処理されます。

図を読み込み中…

Init() メソッドでは次のことが行われます。

  1. 各プロパティのデフォルト値の補完(null の場合に Parameters や固定値を設定)
  2. GridColumns、FilterColumns、EditorColumnHash などのカラムリストの初期化
  3. ColumnHash 辞書の構築
  4. 各種リスト(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
HTMLHtmls、HtmlsAllDisabled
サーバスクリプトServerScripts、ServerScriptsAllDisabled

以降、主なタブのプロパティを詳しく見ます。

一般タブ ​

プロパティ型説明
ReferenceTypestringテーブル種別("Issues" / "Results" / "Wikis" / "Dashboards")
TitleSeparatorstringタイトル結合区切り文字(デフォルト ")")

TitleSeparator は、タイトルを複数の項目で構成するときに各項目の値をつなぐ文字です。既定値は ")" で、画面では編集タブの「タイトル」項目の詳細設定で変更します(1.5.8.1 のソースでは SiteSettings.cs#L421、Title.cs#L70、SiteUtilities.cs#L9258)。

一覧タブ(GridSettingsEditor) ​

画面の設定項目プロパティ型デフォルト説明
現在の設定(カラムリスト)GridColumnsList<string>表示するカラム名の順序つきリスト
一括更新カラムBulkUpdateColumnsSettingList<BulkUpdateColumn>一括更新ダイアログで変更できるカラムのリスト
1ページの表示数GridPageSizeint?パラメータ依存1ページあたりの表示件数
既定のビューGridViewint?なしビューの ID(Views リストに対応)
ビューのリセット許可AllowViewResetbool?パラメータ依存ビューをリセットするボタンの表示
グリッドエディタの種類GridEditorTypeGridEditorTypes?なし(通常の編集画面)None=なし、Grid=グリッド内編集、Dialog=ダイアログ編集
履歴を一覧に表示HistoryOnGridbool?falseバージョン履歴を一覧に表示するか
毎回検索条件を要求するAlwaysRequestSearchConditionbool?false一覧を開くたびに検索条件入力を要求
編集リンクを無効にするDisableLinkToEditbool?falseタイトルからの編集画面遷移リンクを無効化
編集を新しいタブで開くOpenEditInNewTabbool?false編集画面を別タブで開く
リンクパスの展開EnableExpandLinkPathbool?falseリンクパスを展開表示(Parameters の設定が前提)

一覧に表示する各カラムの詳細設定(一覧ラベルテキスト・フォーマット・セル幅など)は、GridColumns ではなく Columns リストの各 Column オブジェクトに保持されます(後述の「Column クラス」を参照)。

GridEditorTypes は enum で、JSON には整数で保存されます。

csharp
public enum GridEditorTypes : int
{
    None = 0,
    Grid = 10,
    Dialog = 20
}
json
{
  "GridColumns": ["Title", "Body", "Status", "Manager", "Owner", "CompletionTime"],
  "GridPageSize": 50,
  "GridEditorType": 20,
  "HistoryOnGrid": true
}

フィルタタブ(FiltersSettingsEditor) ​

画面の設定項目プロパティ型デフォルト説明
現在の設定(カラムリスト)FilterColumnsList<string>フィルタに使用するカラム名の順序つきリスト
期限前日数(後)NearCompletionTimeAfterDaysdecimal?パラメータ依存期限前アラート(後)日数
期限前日数(前)NearCompletionTimeBeforeDaysdecimal?パラメータ依存期限前アラート(前)日数
フィルタボタンを使用するUseFilterButtonbool?falseフィルタボタンを表示
フィルタエリアを使用するUseFiltersAreabool?trueフィルタエリアを常時表示
否定フィルタを使用するUseNegativeFiltersbool?パラメータ依存「~以外」のフィルタ条件を使用
ヘッダフィルタを使用するUseGridHeaderFiltersbool?false一覧ヘッダ行にフィルタ入力欄を表示
関連カラムフィルタを使用するUseRelatingColumnsOnFilterbool?false関連カラムをフィルタに使用(ヘッダフィルタと排他)

NearCompletionTimeAfterDays / NearCompletionTimeBeforeDays はフィルタタブで設定します。未設定のときは Parameters.General の同名の値が使われます(1.5.8.1 のソースでは SiteUtilities.cs#L7026-L7040、SiteSettings.cs#L343-L346)。

クイックフィルタのボタン表示は次のプロパティです。

画面の設定項目プロパティ型デフォルト説明
未完了フィルタを使用するUseIncompleteFilterbool?true「未完了」ボタンを表示
自分のレコードフィルタを使用するUseOwnFilterbool?true「自分のレコード」ボタンを表示
期限前フィルタを使用するUseNearCompletionTimeFilterbool?true「期限前」ボタンを表示
遅延フィルタを使用するUseDelayFilterbool?true「遅延」ボタンを表示
期限超過フィルタを使用するUseOverdueFilterbool?true「期限超過」ボタンを表示
検索フィルタを使用するUseSearchFilterbool?true検索ボックスを表示
json
{
  "FilterColumns": ["Status", "Owner", "CompletionTime"],
  "UseFilterButton": true,
  "UseNegativeFilters": true,
  "UseGridHeaderFilters": false,
  "UseIncompleteFilter": true
}

集計タブ(AggregationsSettingsEditor) ​

プロパティ型説明
AggregationsList<Aggregation>集計設定リスト

各 Aggregation は、グループ化するカラム(GroupBy)、集計種別(Type)、集計対象カラム(Target)を持ちます。Type は enum で、Count = 0、Total = 1、Average = 2 です(1.5.8.1 のソースでは Aggregation.cs#L7-L17)。

json
{
  "Aggregations": [
    { "Id": 1, "GroupBy": "Status", "Type": 0 },
    { "Id": 2, "GroupBy": "Owner", "Type": 1, "Target": "WorkValue" }
  ]
}

担当者の項目名は Owner、管理者は Manager です(AssigneeId という項目はないため、例では Owner にしています)。

編集タブ(EditorSettingsEditor) ​

編集タブは最も設定項目が多いタブです。

編集カラム構成・タブ・セクション ​

画面の設定項目プロパティ型説明
現在の設定(カラムリスト)EditorColumnHashDictionary<string, List<string>>タブ別の編集カラム名リスト
「全般」タブのラベルGeneralTabLabelTextstring全般タブの表示名(既定は「全般」)
タブリストTabsSettingList<Tab>ユーザー定義タブのリスト
タブ最終IDTabLatestIdint?新規タブ作成時に使う連番管理用
セクションリストSectionsList<Section>編集画面のセクション区切り定義
セクション最終IDSectionLatestIdint?新規セクション作成時の連番管理用
関連カラムRelatingColumnsSettingList<RelatingColumn>選択時に自動入力される関連カラムの設定

EditorColumnHash は、キーがタブ・値が表示カラム名のリストの辞書です。キーは "General"(全般タブ)または "_Tab-{Id}"("_Tab-1"、"_Tab-2" など)で、タブを使っていない場合はキー "General" だけが存在します。セクションはカラムリストの中に "_Section-{Id}" という形式で挿入されます(1.5.8.1 のソースでは SiteSettings.cs#L2856-L2859、SiteSettings.cs#L2909-L2912)。

json
{
  "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"]
  }
}

編集画面のその他の設定 ​

画面の設定項目プロパティ型デフォルト説明
バージョンアップ種別AutoVerUpTypeVersions.AutoVerUpTypes?Default更新時の自動バージョンアップ制御
新規作成後のアクションAfterCreateActionTypeVersions.AfterCreateActionTypes?Default一覧に戻る/新規作成画面を開く
更新後のアクションAfterUpdateActionTypeVersions.AfterUpdateActionTypes?Default一覧に戻る/次のレコードに移動
コメントの編集を許可するAllowEditingCommentsbool?false投稿済みコメントの編集を許可
コピー機能を使用するAllowCopybool?パラメータ依存レコードのコピーボタンを表示
参照コピー機能を使用するAllowReferenceCopybool?パラメータ依存参照コピーボタンを表示
コピー時に追加する文字CharToAddWhenCopyingstringパラメータ依存コピー時にタイトルに追加する文字
分割機能を使用するAllowSeparatebool?falseレコード分割ボタンを表示(課題管理のみ)
テーブルロック機能を使用するAllowLockTablebool?falseテーブルロックボタンを表示
リンクを非表示にするHideLinkbool?false編集画面のリンクボタンを非表示
Ajaxでレコードを切り替えるSwitchRecordWithAjaxbool?false前後レコードを Ajax で切り替え
コマンドボタンを自動ポストバックするSwitchCommandButtonsAutoPostBackbool?falseコマンドボタン変更時の自動送信
削除時に画像を削除するDeleteImageWhenDeletingbool?trueレコード削除時に添付画像も削除

リンク・履歴・移動タブ ​

タブ画面の設定項目プロパティ型説明
リンクリンク設定LinksList<Link>リンク先テーブルとカラムの定義
リンクリンク一覧のカラムLinkColumnsList<string>リンク一覧に表示するカラム名
リンクリンク一覧のページサイズLinkPageSizeint?リンク一覧の1ページあたり表示件数
リンク既定ビューLinkTableViewint?リンク一覧の既定ビュー ID
履歴履歴一覧のカラムHistoryColumnsList<string>履歴一覧に表示するカラム名
履歴履歴からの復元を許可するAllowRestoreHistoriesbool?履歴レコードからの復元ボタンを表示
履歴履歴の物理削除を許可するAllowPhysicalDeleteHistoriesbool?履歴レコードの完全削除ボタンを表示
移動MoveTargetsList<long>移動先として選択できるサイト ID のリスト

集計式・計算式・プロセス・ステータス制御タブ ​

タブプロパティ型説明
集計式SummariesSettingList<Summary>他のテーブルから集計した値を特定カラムに反映する設定のリスト
計算式FormulasSettingList<FormulaSet>計算式の設定リスト
計算式FormulasGetErrorDetailsbool?計算式エラーの詳細を取得
プロセスProcessesSettingList<Process>プロセスボタンの設定リスト
ステータス制御StatusControlsSettingList<StatusControl>ステータス遷移の制御設定リスト

ビュータブ(ViewsSettingsEditor) ​

プロパティ型説明
ViewsList<View>ビューの設定リスト
ViewLatestIdint?新規ビュー作成時の連番管理用
SaveViewTypeSaveViewTypes?ビューの保存場所(Session / User)

各 View はフィルタ・ソート・一覧設定などを持ちます。ビューについては ビュー(フィルタ・ソータ) も参照してください。

json
{
  "ViewLatestId": 3,
  "Views": [
    {
      "Id": 1,
      "Name": "自分の未完了",
      "Own": true,
      "Incomplete": true
    },
    {
      "Id": 2,
      "Name": "今週締切",
      "Incomplete": true
    }
  ]
}

通知・リマインダー・インポート・エクスポート ​

タブプロパティ型説明
通知NotificationsSettingList<Notification>通知設定リスト
リマインダーRemindersSettingList<Reminder>リマインダー設定リスト
インポートImportEncodingstringインポート文字コード
インポートUpdatableImportbool?インポート時の更新許可
インポートRejectNullImportbool?null インポートの拒否
インポートDefaultImportKeystringインポートの既定キー
エクスポートExportsSettingList<Export>エクスポート設定リスト
エクスポートAllowStandardExportbool?標準エクスポートの許可
エクスポートStandardExportTypeStandardExportTypes?標準エクスポート種別

スタイル・スクリプト・HTML・サーバスクリプトタブ ​

これらのタブはそれぞれ拡張機能の設定リストと、全体を無効化するプロパティを持ちます。

タブ名プロパティ型全無効化プロパティ
スタイルStylesSettingList<Style>StylesAllDisabled
スクリプトScriptsSettingList<Script>ScriptsAllDisabled
HTMLHtmlsSettingList<Html>HtmlsAllDisabled
サーバスクリプトServerScriptsSettingList<ServerScript>ServerScriptsAllDisabled

サーバスクリプトにはこのほか ServerScriptsGetErrorDetails(bool?、エラー詳細を取得)があります。

各設定は Disabled(無効化フラグ)プロパティと、適用するページ(All / New / Edit / Index / Calendar など)を持ちます。Disabled は管理画面の「無効」チェックボックスに対応し、有効な設定では JSON に出力されません。

json
{
  "Scripts": [
    {
      "Id": 1,
      "Title": "一覧に色付け",
      "Body": "/* JavaScript コード */",
      "Index": true
    }
  ]
}

スタイル・スクリプト・HTML の 3 つには、下書き出力の制御プロパティもあります(サーバスクリプトにはありません)。

プロパティ型説明
DraftOutputModeint?0: 常に出力 / 1: 下書きのみ出力 / 2: 下書き時は出力しない
DraftKeystring下書き判定に使うキー

それぞれの仕組みは 拡張スタイル、拡張スクリプト、拡張 HTML を参照してください。

権限 ​

プロパティ型説明
PermissionForCreatingDictionary<string, Permissions.Types>新規作成時の権限設定
PermissionForUpdatingDictionary<string, Permissions.Types>更新時の権限設定
CreateColumnAccessControlsList<ColumnAccessControl>作成時カラムアクセス制御リスト
ReadColumnAccessControlsList<ColumnAccessControl>参照時カラムアクセス制御リスト
UpdateColumnAccessControlsList<ColumnAccessControl>更新時カラムアクセス制御リスト

権限の判定については アクセス権限の深掘り を参照してください。

Column クラス(項目ごとの設定) ​

Columns と ColumnHash ​

項目(カラム)ごとの設定は、SiteSettings の 2 つのプロパティで扱われます。

プロパティ型保存役割
ColumnsList<Column>JSON に保存管理画面の「項目詳細」ダイアログで設定した内容
ColumnHashDictionary<string, Column>保存しない(NonSerialized)カラム名で直接引くためのキャッシュ辞書

Columns には デフォルト値から変更された設定だけ が保存されます。たとえば LabelText が定義の既定値(「分類A」など)と同じなら省略されるため、Columns リストには実際にカスタマイズしたカラムの情報だけが含まれます。

ColumnHash は Init() が呼ばれるとき(読み込み時)に UpdateColumnHash() で構築されます。

csharp
// UpdateColumnHash()で構築される
ColumnHash = new Dictionary<string, Column>();
foreach (var column in AllColumns(context))
{
    ColumnHash[column.ColumnName] = column;
}
csharp
// 使用例
var column = ss.ColumnHash.Get("ClassA");

Column クラスの定義 ​

Column クラスは Implem.Pleasanter/Libraries/Settings/Column.cs で定義されています。SiteSettings と同様に、[NonSerialized] 属性が付いたプロパティは JSON に保存されず、実行時に設定されます。

csharp
// Implem.Pleasanter/Libraries/Settings/Column.cs
public class Column
{
    // ...
}

項目詳細ダイアログとプロパティの対応 ​

「項目詳細」ダイアログはタブ構成になっており、各タブの設定が対応するプロパティに保存されます。

基本(全カラム共通) ​

画面の設定項目プロパティ型説明
表示名LabelTextstring編集画面でのラベル文字列
テキストの位置TextAlignSiteSettings.TextAlignTypes?Left=左揃え、Center=中央、Right=右揃え
スタイルFieldCssstring入力欄のスタイル(下表)
ビューアの切替ViewerSwitchingTypeViewerSwitchingTypes?マークダウンのビューア切替制御
必須入力ValidateRequiredbool?必須入力チェック
一括更新を許可するAllowBulkUpdatebool?一括更新ダイアログでの変更許可
重複禁止NoDuplicationbool?同じ値の入力を禁止
重複時のメッセージMessageWhenDuplicatedstring重複入力時のエラーメッセージ
コピー時に引き継ぐCopyByDefaultbool?コピー作成時に値を引き継ぐか
読取専用EditorReadOnlybool?編集画面での入力を不可にする
自動ポストバックAutoPostBackbool?値変更時に自動で画面更新
自動ポストバック時に返す項目ColumnsReturnedWhenAutomaticPostbackstring自動ポストバック時に更新するカラム名リスト
折り返しなしNoWrapbool?テキストの折り返しを禁止
非表示Hidebool?編集画面からカラムを非表示
拡張フィールドCSSExtendedFieldCssstringカラム全体のフィールド要素に追加する CSS クラス
拡張コントロールCSSExtendedControlCssstring入力コントロールに追加する CSS クラス
説明Descriptionstringカラムの説明文(ツールチップに表示)
入力ガイドInputGuidestring入力欄下部のガイドテキスト

FieldCss の選択肢は次のとおりです。

値画面の表示名説明
null(未設定)通常標準の幅の入力欄
"field-wide"ワイド幅広の入力欄(テキストエリアなど)
"control-markdown"マークダウンMarkdown エディタ
"control-markup"リッチテキストリッチテキストエディタ(HTML 形式)

文字列カラム ​

画面の設定項目プロパティ型説明
最大文字数MaxLengthdecimal?入力できる最大文字数
既定値DefaultInputstring新規作成時の初期値
インポートキーImportKeybool?インポート時の一意キーとして使用
添付画像を許可するAllowImagebool?Markdown エディタへの画像添付を許可

選択肢カラム ​

画面の設定項目プロパティ型説明
選択肢リストChoicesTextstring選択肢の定義テキスト(JSON 形式または URL スキーム)
コントロール種別ChoicesControlTypestring"DropDown"=ドロップダウン、"Radio"=ラジオボタン
検索機能を使用するUseSearchbool?選択肢のインクリメンタルサーチを有効化
複数選択MultipleSelectionsbool?複数選択を許可(nvarchar 型のみ)
空欄選択肢を表示しないNotInsertBlankChoicebool?先頭の空欄選択肢を非表示
アンカーリンクAnchorbool?選択した値をリンクとして表示
アンカーを新規タブで開くOpenAnchorNewTabbool?アンカーリンクを新規タブで開く
アンカーフォーマットAnchorFormatstringアンカーリンクの URL フォーマット

ChoicesText の基本的な書き方は次のとおりです。

text
"value1","ラベル1"
"value2","ラベル2"
"value3","ラベル3"

テーブルから選択肢を動的に取得する場合は URL スキームを使います。

text
[[items,{SiteId}]]

選択肢の詳しい使い方は 選択肢一覧 を参照してください。

数値カラム ​

画面の設定項目プロパティ型説明
既定値DefaultInputstring新規作成時の初期値
インポートキーImportKeybool?インポート時の一意キーとして使用
コントロール種別ControlTypestring"Normal"=通常テキスト、"Spinner"=スピナー
最小値Mindecimal?スピナー使用時の最小値
最大値Maxdecimal?スピナー使用時の最大値
ステップStepdecimal?スピナー使用時の増減幅
単位Unitstring数値の単位(「円」「個」など)
小数点以下桁数DecimalPlacesint?表示する小数点以下の桁数
丸め方RoundingTypeSiteSettings.RoundingTypes?四捨五入・切り上げ・切り捨てなど
NULL を許可するNullablebool?NULL 値を入力可能にする

RoundingTypes の値は次のとおりです。

enum値説明
AwayFromZero10四捨五入(0 から遠い方向に丸める)
Ceiling20切り上げ
Truncate30切り捨て
Floor40床関数(負の値は切り捨て)
ToEven50銀行丸め(偶数丸め)

日付・日時カラム ​

画面の設定項目プロパティ型説明
既定値DefaultInputstring新規作成時のオフセット日数(「0」で今日)
表示形式(編集画面)EditorFormatstring日付のフォーマット("Ymd" / "Ymdhm" など)
分単位のステップDateTimeStepint?時刻入力時の分の増減単位

添付ファイルカラム ​

画面の設定項目プロパティ型説明
添付ファイルの削除を許可するAllowDeleteAttachmentsbool?添付ファイルの削除ボタンを表示
既存履歴を削除しないNotDeleteExistHistorybool?更新時に以前のファイルを保持
ストレージプロバイダーBinaryStorageProviderstring"DataBase" / "LocalFolder" / "AutoDataBaseOrLocalFolder"
同名ファイルを上書きするOverwriteSameFileNamebool?同名ファイル追加時に上書き
最大ファイル数LimitQuantitydecimal?添付できるファイルの最大数
最大ファイルサイズLimitSizedecimal?1 ファイルあたりの最大サイズ(MB)
合計最大サイズTotalLimitSizedecimal?全添付ファイルの合計最大サイズ(MB)
サムネイル最大サイズThumbnailLimitSizedecimal?サムネイルの最大サイズ(KB)

自動採番(AutoNumberingSettingTab) ​

画面の設定項目プロパティ型説明
フォーマットAutoNumberingFormatstring採番フォーマット({NUM:0} などのプレースホルダーを含む)
リセット単位AutoNumberingResetTypeAutoNumberingResetTypes?Year / Month / Day / String
開始番号AutoNumberingDefaultint?採番の初期値
ステップAutoNumberingStepint?採番の増分

拡張 HTML(ExtendedHtmlSettingTab) ​

画面の設定項目プロパティ型挿入位置
フィールドの前ExtendedHtmlBeforeFieldstringフィールド全体(ラベル+コントロール)の直前
ラベルの前ExtendedHtmlBeforeLabelstringラベルの直前
ラベルとコントロールの間ExtendedHtmlBetweenLabelAndControlstringラベルとコントロールの間
コントロールの後ExtendedHtmlAfterControlstringコントロールの直後
フィールドの後ExtendedHtmlAfterFieldstringフィールド全体の直後

入力検証(EditorDetailsettingTab) ​

画面の設定項目プロパティ型説明
クライアント正規表現ClientRegexValidationstringブラウザ側の正規表現バリデーション
サーバー正規表現ServerRegexValidationstringサーバー側の正規表現バリデーション
検証エラーメッセージRegexValidationMessagestring正規表現不一致時のエラーメッセージ

多言語(MultilingualSettingTab) ​

画面の設定項目プロパティ型説明
言語別表示名MultilingualLabelTextstring言語コードと表示名の JSON マッピング
json
{"en": "Due Date", "ja": "完了予定日"}

多言語対応の実装は 多言語対応の実装 を参照してください。

一覧・フィルタの詳細設定ダイアログ ​

一覧タブ・フィルタタブの「詳細設定」ダイアログで設定する内容も、SiteSettings 側ではなく Column 側に保存されます。

一覧の詳細設定(GridColumnDialog) ​

画面の設定項目プロパティ型説明
表示名(一覧)GridLabelTextstring一覧ヘッダーに表示するラベル(未設定なら LabelText を使用)
表示形式GridFormatstring日付型カラムの一覧での表示フォーマット
セルCSSExtendedCellCssstring一覧の各セルに追加する CSS クラス
左端に固定CellStickybool?セルを左端に固定表示
セル幅を設定するCellWidthint?セルの幅(px)を指定
セル内でテキストを折り返すCellWordWrapbool?セル内のテキスト折り返しを有効化
グリッドデザインGridDesignstring一覧表示のカスタム HTML テンプレート

フィルタの詳細設定(FilterColumnDialog) ​

画面の設定項目プロパティ型対象型説明
フィルタ設定モードDateFilterSetModeColumnUtilities.DateFilterSetMode?数値・日付デフォルト/範囲選択
最小値NumFilterMindecimal?数値フィルタスライダーの最小値
最大値NumFilterMaxdecimal?数値フィルタスライダーの最大値
ステップNumFilterStepdecimal?数値フィルタスライダーの刻み幅
最小スパン(日数)DateFilterMinSpanint?日付日付フィルタの範囲最小値(過去日数)
最大スパン(日数)DateFilterMaxSpanint?日付日付フィルタの範囲最大値(未来日数)
年度単位DateFilterFybool?日付年度単位のフィルタを有効化
半期単位DateFilterHalfbool?日付半期単位のフィルタを有効化
四半期単位DateFilterQuarterbool?日付四半期単位のフィルタを有効化
月単位DateFilterMonthbool?日付月単位のフィルタを有効化
検索種別SearchTypeSearchTypes?文字列部分一致/完全一致/前方一致

SearchTypes の値は次のとおりです。

csharp
[JsonConverter(typeof(StringEnumConverter))]
public enum SearchTypes : int
{
    PartialMatch = 1,          // 部分一致
    ExactMatch = 2,            // 完全一致
    ForwardMatch = 3,          // 前方一致
    PartialMatchMultiple = 11, // 部分一致(複数語)
    ExactMatchMultiple = 12,   // 完全一致(複数語)
    ForwardMatchMultiple = 13  // 前方一致(複数語)
}

旧互換プロパティ(非推奨) ​

バージョンアップの過程で残された古いプロパティです。現在は使われず、SiteSettingsMigrator が読み込み時に新しいプロパティへ変換します。

プロパティ型現在対応するプロパティ
GridVisiblebool?GridColumns に含まれるかどうか
FilterVisiblebool?FilterColumns に含まれるかどうか
EditorVisiblebool?EditorColumnHash に含まれるかどうか
TitleVisiblebool?TitleColumns に含まれるかどうか
LinkVisiblebool?LinkColumns に含まれるかどうか
HistoryVisiblebool?HistoryColumns に含まれるかどうか
GridDateTimestringGridFormat
ControlDateTimestringEditorFormat
ControlFormatstringEditorFormat

実行時にだけ設定されるプロパティ ​

[NonSerialized] のプロパティは JSON に保存されず、カラム定義(ColumnDefinition)や実行時のコンテキストから設定されます。

プロパティ型内容
Noint?カラム定義の並び順
SizestringDB の型サイズ(例:"200")
DefaultNotNullboolDB の NOT NULL 制約
Requiredbool必須カラムかどうか(システムが強制)
NotSelectboolSELECT されないカラム
NotUpdateboolUPDATE されないカラム(更新不可)
GridColumnbool一覧表示可能なカラムか
FilterColumnboolフィルタ使用可能なカラムか
EditorColumnbool編集画面に表示可能なカラムか
TitleColumnboolタイトル構成可能なカラムか
LinkColumnboolリンク一覧に表示可能なカラムか
HistoryColumnbool履歴一覧に表示可能なカラムか
TypeNamestring型名("nvarchar"、"int"、"datetime" など)
TypeCsstringC# の型("string"、"decimal"、"DateTime" など)
LabelTextDefaultstringシステム定義のデフォルトラベル(変更前の名前)
Namestringテーブルエイリアスつきのカラム名(JOIN 時)
ChoiceHashDictionary<string, Choice>選択肢の表示名辞書(実行時に構築)
SiteSettingsSiteSettingsこのカラムが属する SiteSettings への参照
SiteIdlongこのカラムが属するサイト ID
WidthintDB 定義での列幅
GridStylestring一覧の CSS スタイル(定義ベース)
Aggregatablebool集計可能なカラムか
Computablebool計算式で使用可能なカラムか
ServerScriptModelColumnServerScriptModelColumnサーバスクリプト用カラムモデル

物理カラム名の ColumnName には [NonSerialized] が付いておらず、JSON に保存されます。下の JSON の例のとおり、Columns の各要素は ColumnName でどのカラムの設定かを識別します(1.5.8.1 のソースでは Column.cs#L73-L74、[NonSerialized] のプロパティは Column.cs#L168-L261)。

カラム定義そのもの(Definition_Column)については CodeDefiner を参照してください。

保存される JSON の例 ​

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 関数で中身を取り出せます。

サイト単位のプロパティを取り出す ​

sql
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;
sql
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;
sql
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 を展開してカラム設定を一覧する ​

sql
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];
sql
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";
sql
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 が設定されているカラムを抽出する例です。

sql
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;
sql
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;
sql
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 での情報取得 も参照してください。

関連ページ ​

変更履歴

第4版サイト設定 JSON の取得 SQL を3種類のDBMSに対応
第3版「内部実装を読む」を 1.5.8.1 のソースで検証して修正
第2版記事のファイル名に並び順の番号を付け、元記事リンクを frontmatter の sources に移行
第1版「内部実装を読む」に SiteSettings・Upsert・Pleasanter Setup を追加