1.0.9.1 の変更点(.NET Core)
ソース基準日: 2020年5月8日(版を示すソースコミットの日付)。1.0.9.0 からの変更です。
機能追加・仕様変更
- 実行環境・DB — SQL ServerからPostgreSQLへ通常・削除・履歴のデータを移行する機能を追加した。
- 運用・設定 — TimeZoneInfoとTimeZoneDefaultの初期値をAsia/Tokyoに変更した。
不具合修正
- API・拡張 — 添付ファイル取得 API が動作しない不具合を修正した。
- 実行環境・DB — 項目連携時に SQL エラーが起きる不具合を修正した。
- 画面・表示 — 通貨記号が正しく表示されない不具合を修正した。
実装を読む
SQL ServerからPostgreSQLへデータを移行する
CodeDefinerの migrate アクションが追加されています。この入口ではDBの構成処理を行ってから、データ移行処理を呼びます。移行元は Migration.SourceConnectionString を使うSQL Server接続、移行先は Rds.UserConnectionString を使うPostgreSQL接続です。DB製品を任意に組み合わせる処理ではなく、この方向の移行を実装しています(Starter.cs、Migrator.cs、Migrator.cs)。
CodeDefinerの配置先で実行する入口は次の形式です。Core版の Program.Main から共通の Starter.Main へ引数を渡します(Program.cs)。
dotnet Implem.CodeDefiner.NetCore.dll migrateMigration.json の設定例です。接続先・ユーザ・パスワードはダミー値にしています。
{
"SourceConnectionString": "Server=localhost;Database=SourceDatabase;User ID=migration_user;Password=DUMMY_PASSWORD;",
"ExcludeTables": [
"SysLogs"
]
}出荷時の除外対象は SysLogs です。定義からテーブルを列挙する際、先頭が _ の定義、更新対象でない列、結合用の列、計算用の列、除外テーブルを候補から外し、テーブル名の重複を除きます(Migration.json、Migrator.cs)。
通常・削除・履歴のデータを順にコピーする
各テーブルについて、通常の名前、_deleted、_history の順に読み込みます。SQL Serverから取得した行の列名を使い、PostgreSQLの INSERT に値をパラメータとして渡して、1行ずつ実行します。テーブルの処理で例外が起きた場合は、そのテーブル名とメッセージを出力します(Migrator.cs、Migrator.cs、Migrator.cs)。
図を読み込み中…
この版の処理には、コピー後のシーケンスを最大IDへ合わせる処理は含まれていません。その修正は 1.1.1.1 に含まれます。
タイムゾーン名を2か所で変更する
Rds.json の TimeZoneInfo と、Service.json の TimeZoneDefault を、Tokyo Standard Time から Asia/Tokyo に変更しています。DB側の設定とユーザ用の既定値を、どちらも変更する差分です(Rds.json、Service.json)。
添付ファイル取得APIのURLと要求本文を直す
入口は POST /api/binaries/{guid}/Get です。ルートにGUIDと Get を加え、要求本文を StreamReader で読み取ってAPIのコンテキストへ渡すようにしています。従来は本文用の変数を作るだけで、要求本文を読み込んでいませんでした(BinariesController.cs、BinariesController.cs)。
次のJSONを要求本文に指定します。GUIDは添付ファイルの識別子、APIキーはダミー値です。
{
"ApiKey": "DUMMY_API_KEY"
}コンテキストは要求本文の ApiKey に対応するユーザを取得します。共通コントローラでは認証を確認し、添付機能の契約設定を確認してから取得処理へ進みます。応答はファイルをそのまま返す形式ではなく、ファイル名・種類・サイズなどと Base64 の内容を持つJSONです(Context.cs、BinariesController.cs、BinaryUtilities.cs、ResponseFile.cs)。
項目連携の数値変換をDBごとに作る
項目連携のサブクエリで、固定した try_cast の文字列から、context.SqlCommandText.CreateTryCast の呼び出しへ変更しています。PostgreSQLでは数字だけの文字列を正規表現で確認してから変換し、それ以外をNULLにする CASE 式を返します。SQL Serverでは try_cast を返します(SiteSettings.cs、PostgreSqlCommandText.cs、SqlServerCommandText.cs)。
日本語表示の円記号を置換する
数値の表示処理では、言語が ja の場合に全角の ¥ を ¥ へ置換します。この差分では、書式付きの数値変換に渡していた context.CultureInfo() も外しています(Column.cs)。
ソース上の版番号
Web アプリの Version は 1.0.9-beta のままですが、AssemblyVersion と FileVersion は 1.0.9.1 です。この記事はアセンブリ版と対象コミットを基準にしています(Implem.Pleasanter.NetCore.csproj)。