Skip to content

Commit 34f162a

Browse files
committed
## Added new features / Bug fixed
・SMTPクライアントのOAuth認証機能を追加。 ・パスキー認証によるログイン機能を追加。 ・通知、リマインダーの送信先にLINE WORKSを追加。 ・多言語ラベルのインポート/エクスポート機能を追加。 ・検索ダイアログでダブルクリックにより選択肢を有効化/無効化する機能を追加。 ・プロセスを無効にする機能を追加。 ・スマートデザインの一覧設定画面にセルの詳細設定を追加。 ・サーバスクリプト計算式(拡張)の実行時エラーを取得する機能を追加。 ・マークダウン表示の「内容」/「説明」項目が読み取り専用時に、Tab移動で誤って編集可能になる問題を解消。 ・$p.events.on_editor_loadで説明項目への$p.set()が失敗する問題を解消。 ・第1世代インターフェースで項目の多言語設定が編集できない問題を解消。 ・数値項目の書式を通貨に設定した際に入力検証およびデータ登録が正しく行えない問題を解消。 ・CodeDefinerのTimeZoneConvert機能の問題を解消。 ・実行サーバのロケール設定によってクロス集計でエラーとなる問題を解消。 ・一覧画面の項目設定と「ビュー」の一覧項目設定が同じ場合に、一覧画面の項目設定を変更すると「ビュー」側の設定も変更されてしまう問題を解消。 ・「検索機能を使う」を有効化した分類項目の検索ダイアログで検索時にエラーとなる場合がある問題を解消。 ・レコードのインポートで、既定値が設定されている項目に既定値と同じ値がインポートできない問題を解消。 ・添付ファイル項目にアクセス制御が設定されたレコードを参照コピーする際に権限エラーとなる問題を解消。
1 parent 8c261c0 commit 34f162a

211 files changed

Lines changed: 11486 additions & 9822 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CONTRIBUTING.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ This guide explains how to set up your environment for development using Visual
88

99
### 1. Tool Installation
1010

11-
#### Install Visual Studio 2022
11+
#### Install Visual Studio 2026
1212

13-
Download and install Visual Studio 2022 from the following link:
13+
Download and install Visual Studio 2026 from the following link:
1414
https://visualstudio.microsoft.com/downloads/
1515

16-
#### Install .NET 8 SDK
16+
#### Install .NET 10 SDK
1717

18-
Download and install the latest .NET SDK 8.0 from the following link:
19-
https://dotnet.microsoft.com/download/dotnet/8.0
18+
Download and install the latest .NET SDK 10.0 from the following link:
19+
https://dotnet.microsoft.com/download/dotnet/10.0
2020

2121
#### Install Node.js
2222

@@ -43,7 +43,7 @@ https://code.visualstudio.com/
4343
Pleasanter works with one of the following databases: SQLServer, PostgreSQL, or MySQL.
4444
Choose the database you want to use in your development environment and follow the instructions below to install it.
4545

46-
- SQLServer: https://pleasanter.org/manual/install-sql-server2022-express
46+
- SQLServer: https://pleasanter.org/manual/install-sql-server2025-express
4747
- PostgreSQL: https://pleasanter.org/manual/install-postgresql-on-windows
4848
- MySQL: https://pleasanter.org/manual/install-mysql-on-windows
4949

‎CONTRIBUTING_JA.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ WindowsでVisual Studioを使用して開発を行う場合の環境構築手順
88

99
### 1. ツールのインストール
1010

11-
#### Visual Studio 2022のインストール
11+
#### Visual Studio 2026のインストール
1212

13-
Visual Studio 2022を下記リンクからダウンロードし、インストールしてください。
13+
Visual Studio 2026を下記リンクからダウンロードし、インストールしてください。
1414
https://visualstudio.microsoft.com/downloads/
1515

16-
#### .NET 8 SDKのインストール
16+
#### .NET 10 SDKのインストール
1717

18-
.NET SDK 8.0の最新バージョンを下記リンクからダウンロードし、インストールしてください。
19-
https://dotnet.microsoft.com/download/dotnet/8.0
18+
.NET SDK 10.0の最新バージョンを下記リンクからダウンロードし、インストールしてください。
19+
https://dotnet.microsoft.com/download/dotnet/10.0
2020

2121
#### Node.jsのインストール
2222

@@ -43,7 +43,7 @@ https://code.visualstudio.com/
4343
プリザンターは、SQLServer、PostgreSQL、MySQLのいずれかのデータベースを使用して動作します。
4444
開発環境で利用するデータベースを選び、下記の手順に従ってインストールしてください。
4545

46-
- SQLServer: https://pleasanter.org/manual/install-sql-server2022-express
46+
- SQLServer: https://pleasanter.org/ja/manual/install-sql-server2025-express
4747
- PostgreSQL: https://pleasanter.org/manual/install-postgresql-on-windows
4848
- MySQL: https://pleasanter.org/manual/install-mysql-on-windows
4949

‎Implem.CodeDefiner/Functions/Rds/TablesConfigurator.cs‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Implem.CodeDefiner.Functions.Rds.Parts;
2-
using Implem.CodeDefiner.Functions.Rds.Parts.PostgreSql;
32
using Implem.DefinitionAccessor;
43
using Implem.IRds;
54
using Implem.Libraries.DataSources.SqlServer;

‎Implem.CodeDefiner/Functions/Rds/TimeConverter.cs‎

Lines changed: 62 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,114 @@
1-
using Implem.DefinitionAccessor;
1+
using Implem.CodeDefiner.Functions.Rds.Parts;
2+
using Implem.DefinitionAccessor;
23
using Implem.IRds;
34
using Implem.Libraries.Utilities;
5+
using System;
46
using System.Collections.Generic;
57
using System.Data;
68
using System.Linq;
9+
using System.Text.RegularExpressions;
710
namespace Implem.CodeDefiner.Functions.Rds
811
{
912
public static class TimeConverter
1013
{
14+
private static int ParseTimeOffset(string timeOffset)
15+
{
16+
if (string.IsNullOrWhiteSpace(timeOffset))
17+
{
18+
throw new ArgumentException("TimeOffset cannot be null or empty", nameof(timeOffset));
19+
}
20+
21+
timeOffset = timeOffset.Trim();
22+
23+
var pattern = @"^([+-]?)([01]?\d|2[0-3])(?::([0-5]\d))?$";
24+
var match = Regex.Match(timeOffset, pattern);
25+
26+
if (!match.Success)
27+
{
28+
throw new FormatException($"Invalid time format: {timeOffset}. Expected format: H:mm or H (e.g., '9:00', '-5:30', '9'). Minutes are optional and must be two digits (00-59) when specified.");
29+
}
30+
31+
var isNegative = match.Groups[1].Value == "-";
32+
var hours = int.Parse(match.Groups[2].Value);
33+
var minutes = match.Groups[3].Success ? int.Parse(match.Groups[3].Value) : 0;
34+
35+
var totalMinutes = hours * 60 + minutes;
36+
return isNegative ? -totalMinutes : totalMinutes;
37+
}
38+
39+
public static void Convert(
40+
ISqlObjectFactory factory,
41+
string timeOffset)
42+
{
43+
var minuteOffset = ParseTimeOffset(timeOffset);
44+
Convert(factory: factory, minuteOffset: minuteOffset);
45+
}
46+
1147
public static void Convert(
1248
ISqlObjectFactory factory,
13-
int hourOffset)
49+
int minuteOffset)
1450
{
1551
Def.ColumnDefinitionCollection
1652
.Where(columnDefinition => columnDefinition.TableName != "_Bases")
1753
.Where(columnDefinition => columnDefinition.TableName != "_BaseItems")
1854
.Select(columnDefinition => columnDefinition.TableName)
1955
.Distinct()
56+
.Where(tableName => !Tables.IsQuartzTable(tableName))
2057
.ForEach(tableName =>
2158
{
2259
Convert(
2360
factory: factory,
2461
tableName: tableName,
2562
suffix: string.Empty,
26-
hourOffset: hourOffset);
63+
minuteOffset: minuteOffset);
2764
Convert(
2865
factory: factory,
2966
tableName: tableName,
3067
suffix: "_deleted",
31-
hourOffset: hourOffset);
68+
minuteOffset: minuteOffset);
3269
Convert(
3370
factory: factory,
3471
tableName: tableName,
3572
suffix: "_history",
36-
hourOffset: hourOffset);
73+
minuteOffset: minuteOffset);
3774
});
3875
}
3976

4077
private static void Convert(
4178
ISqlObjectFactory factory,
4279
string tableName,
4380
string suffix,
44-
int hourOffset)
81+
int minuteOffset)
4582
{
4683
Consoles.Write(tableName + suffix, Consoles.Types.Info);
4784
ConvertDateTimeColumns(
4885
factory: factory,
4986
tableName: tableName,
5087
suffix: suffix,
51-
hourOffset: hourOffset);
88+
minuteOffset: minuteOffset);
5289
ConvertComments(
5390
factory: factory,
5491
tableName: tableName,
55-
suffix: suffix);
92+
suffix: suffix,
93+
minuteOffset: minuteOffset);
5694
}
5795

5896
private static void ConvertDateTimeColumns(
5997
ISqlObjectFactory factory,
6098
string tableName,
6199
string suffix,
62-
int hourOffset)
100+
int minuteOffset)
63101
{
64102
var commandText = $"update \"{tableName}{suffix}\" set\n"
65103
+ Def.ColumnDefinitionCollection
66104
.Where(columnDefinition => columnDefinition.TableName == tableName)
67105
.Where(columnDefinition => columnDefinition.TypeName == "datetime")
68106
.Where(columnDefinition => !columnDefinition.NotUpdate)
69107
.Select(columnDefinition => columnDefinition.ColumnName)
70-
.Select(columnName => $"\"{columnName}\"=dateadd(hour, {hourOffset}, \"{columnName}\")")
108+
.Select(columnName => $"\"{columnName}\"={factory.Sqls.DateAddMinute(minuteOffset, $"\"{columnName}\"")}")
71109
.Join("\n,");
72-
Def.SqlIoBySa(
73-
factory: factory,
74-
initialCatalog: Environments.ServiceName)
110+
Def.SqlIoByAdmin(
111+
factory: factory)
75112
.ExecuteNonQuery(
76113
factory: factory,
77114
dbTransaction: null,
@@ -83,7 +120,8 @@ private static void ConvertDateTimeColumns(
83120
private static void ConvertComments(
84121
ISqlObjectFactory factory,
85122
string tableName,
86-
string suffix)
123+
string suffix,
124+
int minuteOffset)
87125
{
88126
var idColumn = Def.ColumnDefinitionCollection
89127
.Where(columnDefinition => columnDefinition.TableName == tableName)
@@ -97,9 +135,8 @@ private static void ConvertComments(
97135
from ""{idColumn.TableName}{suffix}""
98136
where ""{idColumn.TableName}{suffix}"".""Comments"" is not null
99137
and ""{idColumn.TableName}{suffix}"".""Comments""<>'[]';";
100-
var dataTable = Def.SqlIoBySa(
101-
factory: factory,
102-
initialCatalog: Environments.ServiceName)
138+
var dataTable = Def.SqlIoByAdmin(
139+
factory: factory)
103140
.ExecuteTable(
104141
factory: factory,
105142
commandText: commandText);
@@ -108,33 +145,34 @@ private static void ConvertComments(
108145
factory: factory,
109146
idColumn: idColumn,
110147
dataRow: dataRow,
111-
suffix: suffix));
148+
suffix: suffix,
149+
minuteOffset: minuteOffset));
112150
}
113151
}
114152

115153
private static void UpdateComments(
116154
ISqlObjectFactory factory,
117155
ColumnDefinition idColumn,
118156
DataRow dataRow,
119-
string suffix)
157+
string suffix,
158+
int minuteOffset)
120159
{
121160
var comments = dataRow.String("Comments").Deserialize<List<Comment>>();
122161
if (comments?.Any() == true)
123162
{
124163
comments.ForEach(comment =>
125164
{
126-
comment.CreatedTime = comment.CreatedTime.AddHours(-9);
165+
comment.CreatedTime = comment.CreatedTime.AddMinutes(minuteOffset);
127166
if (comment.UpdatedTime != null)
128167
{
129-
comment.UpdatedTime = comment.UpdatedTime.ToDateTime().AddHours(-9);
168+
comment.UpdatedTime = comment.UpdatedTime.ToDateTime().AddMinutes(minuteOffset);
130169
}
131170
var commandText = $@"
132171
update ""{idColumn.TableName}{suffix}""
133172
set ""Comments""=@Comments
134173
where ""{idColumn.TableName}{suffix}"".""{idColumn.ColumnName}""=@Id";
135-
var io = Def.SqlIoBySa(
136-
factory: factory,
137-
initialCatalog: Environments.ServiceName);
174+
var io = Def.SqlIoByAdmin(
175+
factory: factory);
138176
io.SqlCommand.Parameters_AddWithValue("Id", dataRow[idColumn.ColumnName]);
139177
io.SqlCommand.Parameters_AddWithValue("Comments", comments.ToJson());
140178
io.ExecuteTable(

‎Implem.CodeDefiner/Implem.CodeDefiner.csproj‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
<Year>$([System.DateTime]::Now.Year.ToString())</Year>
77
<Copyright>Copyright © Implem Inc 2014 - $(Year)</Copyright>
88
<Description>This program does the automatic code creation and merging of existing code based on the definition. Also it will make the configuration change of sql server database.</Description>
9-
<AssemblyVersion>1.5.0.0</AssemblyVersion>
10-
<FileVersion>1.5.0.0</FileVersion>
11-
<Version>1.5.0.0</Version>
9+
<AssemblyVersion>1.5.1.0</AssemblyVersion>
10+
<FileVersion>1.5.1.0</FileVersion>
11+
<Version>1.5.1.0</Version>
1212
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
1313
</PropertyGroup>
1414

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
{
1+
{
22
"profiles": {
33
"Implem.CodeDefiner": {
44
"commandName": "Project",
55
"commandLineArgs": "def"
66
},
77
"Implem.CodeDefiner_rds": {
8-
"commandName": "Project",
9-
"commandLineArgs": "_rds"
8+
"commandName": "Project",
9+
"commandLineArgs": "_rds"
1010
},
1111
"WSL": {
1212
"commandName": "WSL2",
@@ -15,6 +15,14 @@
1515
"Docker": {
1616
"commandName": "Docker",
1717
"commandLineArgs": "_rds"
18+
},
19+
"Implem.CodeDefiner ConvertTime /h -9": {
20+
"commandName": "Project",
21+
"commandLineArgs": "ConvertTime /h -9"
22+
},
23+
"Implem.CodeDefiner ConvertTime /h +9:00": {
24+
"commandName": "Project",
25+
"commandLineArgs": "ConvertTime /h +9:00"
1826
}
1927
}
2028
}

‎Implem.CodeDefiner/Starter.cs‎

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public static void Main(string[] args)
104104
case "ConvertTime":
105105
ConvertTime(
106106
factory: factory,
107-
hourOffset: int.Parse(argHash.Get("h") ?? "-9"));
107+
timeOffset: argHash.Get("h") ?? "-9");
108108
break;
109109
case "merge":
110110
MergeParameters(
@@ -541,15 +541,32 @@ private static void CanMigrate()
541541

542542
private static void ConvertTime(
543543
ISqlObjectFactory factory,
544-
int hourOffset)
544+
string timeOffset)
545545
{
546546
TryOpenConnections(factory);
547-
Functions.Rds.TimeConverter.Convert(
548-
factory: factory,
549-
hourOffset: hourOffset);
550-
Consoles.Write(
551-
DisplayAccessor.Displays.Get("CodeDefinerRdsCompleted"),
552-
Consoles.Types.Success);
547+
try
548+
{
549+
Functions.Rds.TimeConverter.Convert(
550+
factory: factory,
551+
timeOffset: timeOffset);
552+
Consoles.Write(
553+
DisplayAccessor.Displays.Get("CodeDefinerRdsCompleted"),
554+
Consoles.Types.Success);
555+
}
556+
catch (FormatException e)
557+
{
558+
Consoles.Write(
559+
$"Invalid time format: {e.Message}",
560+
Consoles.Types.Error,
561+
abort: true);
562+
}
563+
catch (ArgumentException e)
564+
{
565+
Consoles.Write(
566+
$"Invalid argument: {e.Message}",
567+
Consoles.Types.Error,
568+
abort: true);
569+
}
553570
}
554571

555572
private static void TrialConfigureDatabase(

0 commit comments

Comments
 (0)