Skip to content

1.0.9.1 の変更点(.NET Core) ​

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

ソース基準日: 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)。

sh
dotnet Implem.CodeDefiner.NetCore.dll migrate

Migration.json の設定例です。接続先・ユーザ・パスワードはダミー値にしています。

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キーはダミー値です。

json
{
  "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)。

調査元 ​

変更履歴

第3版1.0系の変更記事に移行・API・検索処理の詳細を追加
第2版旧版のソース基準日をリリース日と区別
第1版1.0.9.1 の変更点と比較データを追加