1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プリザンターのサイト設定の変遷を見てみよう

Posted at

はじめに

プリザンターではそれぞれのサイトの設定をJSON型式でデータベースに格納しています。機能の追加などの過程で設定を保持しているプロパティが追加されていますが、原則は互換性を破壊しないように追加のみでリネームや削除はできるだけおこなわないようになっています。
ただし、どうしても変更しないといけないシーンが出てくるため、内部的に新しいバージョンに対応出来るように設定を書き換えるマイグレーションの機能があります。今回は、その機能を紹介します。

実装をみてみよう

まずは、設定を保持しているモデルを見てみます。SiteSettingsになります。

これがJSONにシリアライズされ、データベースのSitesテーブルのSiteSettingsフィールドに格納されています。重要なのはVersionプロパティになります。

前方互換性のないSiteSettingsのプロパティの変更がおこなわれた場合は、このVersionがインクリメントされます。プログラム的には古いバージョンのSiteSettingsが読み込まれた場合は、SiteSettingsMigratorによって、SiteSettingsのマイグレーションがおこなわれます。

このマイグレーション操作がバージョンアップ方向にしか定義されていないため、SiteSettingsのバージョンの後方方向へのダウングレードができないという制約がついています。
通常のプロパティの追加パターンだとJSONからモデルにデシリアライズするときには追加されたプロパティは読み飛ばされるので、バージョンダウンに与える影響はありません。(もちろんデータベース構造が変更になるときには、ここ以外で引っかかる部分は出てきますが)

過去のバージョンを見てみよう

現行のバージョンは1.017となっています。これは本体バージョンの1.2.20.0で変更されたものになります。
1.017に至るまでのバージョンの変遷を追ってみましょう。GitHubの公式レポジトリではEnterprise Edition導入のタイミングで過去のコミットが一括削除されているので、完全には追えないので注意が必要です。

リネームされたプロパティ

バージョン 変更前 変更後
1.002 Column.GridDateTime Column.GridFormat
1.002 Column.ControlDateTime Column.EditorFormat
1.004 GridColumnsOrder GridColumns
1.004 FilterColumnsOrder FilterColumns
1.004 EditorColumnsOrder EditorColumns
1.004 TitleColumnsOrder TitleColumns
1.004 LinkColumnsOrder LinkColumns
1.004 HistoryColumnsOrder HistoryColumns
1.006 Column.ControlFormat Column.EditorFormat
1.007 ColumnCollection Columns
1.007 AggregationCollection Aggregations
1.007 LinkCollection Links
1.007 SummaryCollection Summaries
1.009 View.KambanGroupBy View.KambanGroupByX
1.013 View.CalendarColumn View.CalendarFromTo
1.014 ColumnAccessControl.AllowedUsers ColumnAccessControl.RecordUsers

データ構造が変更されたプロパティ

バージョン 変更前 変更後
1.003 LinkColumnSiteIdHash (Dictionary) LinkCollection (List<Link>)
1.005 FormulaHash (Dictionary) Formulas (SettingList<FormulaSet>)
1.012 NewStyle, EditStyle, GridStyle Styles (SettingList<Style>)
1.012 NewScript, EditScript, GridScript Scripts (SettingList<Script>)
1.016 EditInDialog (bool?) GridEditorType (GridEditorTypes)
1.017 EditorColumns (List<string>) EditorColumnHash (Dictionary)

追加されたプロパティ

バージョン プロパティ
1.008 Notification.Id
1.011 ViewLatestId
1.017 Sections, SectionLatestId

バージョン別マイグレーション内容

Version 1.001

追加

  • Version プロパティを追加(decimal型)
  • Migrated プロパティを追加(NonSerialized)
  • OnDeserialized でマイグレーション処理を呼び出し

Version 1.002

リネーム

変更前 変更後
Column.GridDateTime Column.GridFormat
Column.ControlDateTime Column.EditorFormat

Version 1.003

変更

変更前 変更後
LinkColumnSiteIdHash (Dictionary) LinkCollection (List<Link>)
  • LinkColumnSiteIdHashLinkCollection に変換

Version 1.004

リネーム

変更前 変更後
GridColumnsOrder GridColumns
FilterColumnsOrder FilterColumns
EditorColumnsOrder EditorColumns
TitleColumnsOrder TitleColumns
LinkColumnsOrder LinkColumns
HistoryColumnsOrder HistoryColumns

Version 1.005

変更

変更前 変更後
FormulaHash (Dictionary<string, Formula>) Formulas (SettingList<FormulaSet>)
  • Dictionary形式から SettingList形式に変換

Version 1.006

リネーム

変更前 変更後
Column.ControlFormat Column.EditorFormat
  • ControlFormatEditorFormat にリネーム

Version 1.007

リネーム

変更前 変更後
ColumnCollection Columns
AggregationCollection Aggregations
LinkCollection Links
SummaryCollection Summaries
  • コレクション系プロパティの命名規則を統一

Version 1.008

拡張

  • Notifications の各項目に Id プロパティを追加
  • インデックス(1から開始)を Id として設定

Version 1.009

リネーム

変更前 変更後
View.KambanGroupBy View.KambanGroupByX

Version 1.010

変更

  • EditorColumns"Comments" を追加(未設定の場合)

Version 1.011

追加

  • ViewLatestId プロパティを追加
  • 既存の Views から最大の Id を計算して設定

Version 1.012

削除

  • NewStyle
  • EditStyle
  • GridStyle
  • NewScript
  • EditScript
  • GridScript

追加

  • Styles (SettingList<Style>)
  • Scripts (SettingList<Script>)

変更

  • NewStyleStylesNew = true として追加
  • EditStyleStylesEdit = true として追加
  • GridStyleStylesIndex = true として追加

Version 1.013

リネーム

変更前 変更後
View.CalendarColumn View.CalendarFromTo

Version 1.014

リネーム

変更前 変更後
ColumnAccessControl.AllowedUsers ColumnAccessControl.RecordUsers

対象コレクション:

  • CreateColumnAccessControls
  • ReadColumnAccessControls
  • UpdateColumnAccessControls

Version 1.015

変更

  • Export.Join のデータを ExportColumn.ColumnName に統合
  • ExportColumn.SiteIdnull に設定
  • Export.Joinnull に設定

Version 1.016

変更

変更前 変更後
EditInDialog = true GridEditorType = GridEditorTypes.Dialog

Version 1.017

変更

変更前 変更後
EditorColumns (List<string>) EditorColumnHash (Dictionary<string, List<string>>)
  • カラムのセクション情報を Sections リストに追加
  • Column.Section プロパティを null に設定
  • タブ・セクション機能のための新規プロパティ追加

まとめ

今回はサイト設定の変遷を紹介しました。構築時期が古い環境でAPIでSiteSettingsを触るときなど1.017以外のバージョンを触るときなど、プロパティの読み換えが必要な時に参考にしてみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?