From a895d0e6a8cadf71d73ee175196849098a0f2160 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 28 Oct 2019 17:21:43 +0900 Subject: [PATCH 01/47] Now, I am fixing #328. Making RIA library into .NET Core. --- root/programs/CS/0_ExecAllBat.bat | 3 ++ root/programs/CS/2_Build_NuGet_nettcore30.bat | 27 +++++++++++ .../3_Build_BusinessRichClient_netcore30.bat | 27 +++++++++++ .../Business.RichClient_netcore30.csproj | 46 +++++++++++++++++++ .../RichClient/Business/MyBaseLogic2CS.cs | 2 +- .../RichClient/Business/MyFcBaseLogic2CS.cs | 2 +- .../BusinessRichClient_netcore30.sln | 31 +++++++++++++ .../RichClient/Control/WinCustomTextBox.cs | 37 ++++++++++++++- .../CustomControl.RichClient_netcore30.csproj | 34 ++++++++++++++ .../Framework.RichClient_netcore30.csproj | 35 ++++++++++++++ .../Nuget_RichClient_netcore30.sln | 37 +++++++++++++++ .../Public/Public_netstd20.csproj | 1 + .../Public/Public_netstd21.csproj | 1 + .../Public/Str/StringChecker.cs | 7 +-- .../Public/Str/StringConverter.cs | 29 ++++++++++-- 15 files changed, 310 insertions(+), 9 deletions(-) create mode 100644 root/programs/CS/2_Build_NuGet_nettcore30.bat create mode 100644 root/programs/CS/3_Build_BusinessRichClient_netcore30.bat create mode 100644 root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj create mode 100644 root/programs/CS/Frameworks/Infrastructure/BusinessRichClient_netcore30.sln create mode 100644 root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj create mode 100644 root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj create mode 100644 root/programs/CS/Frameworks/Infrastructure/Nuget_RichClient_netcore30.sln diff --git a/root/programs/CS/0_ExecAllBat.bat b/root/programs/CS/0_ExecAllBat.bat index 37264e2e3..287a6e0f1 100644 --- a/root/programs/CS/0_ExecAllBat.bat +++ b/root/programs/CS/0_ExecAllBat.bat @@ -10,6 +10,7 @@ echo | call 2_Build_NuGet_net47.bat echo | call 2_Build_NuGet_net48.bat echo | call 2_Build_NuGet_netstd20.bat echo | call 2_Build_NuGet_netstd21.bat +echo | call 2_Build_NuGet_nettcore30.bat @echo on timeout 5 @@ -24,6 +25,8 @@ echo | call 3_Build_BusinessRichClient_net45.bat echo | call 3_Build_BusinessRichClient_net46.bat echo | call 3_Build_BusinessRichClient_net47.bat echo | call 3_Build_BusinessRichClient_net48.bat +echo | call 3_Build_BusinessRichClient_netcore30.bat + echo | call 4_Build_CopyAssemblies.bat @echo on diff --git a/root/programs/CS/2_Build_NuGet_nettcore30.bat b/root/programs/CS/2_Build_NuGet_nettcore30.bat new file mode 100644 index 000000000..dc634bb59 --- /dev/null +++ b/root/programs/CS/2_Build_NuGet_nettcore30.bat @@ -0,0 +1,27 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Build the batch Infrastructure +rem -------------------------------------------------- +call dotnet restore "Frameworks\Infrastructure\Nuget_RichClient_netcore30.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Infrastructure\Nuget_RichClient_netcore30.sln" + +pause + +rem ------------------------------------------------------- +endlocal \ No newline at end of file diff --git a/root/programs/CS/3_Build_BusinessRichClient_netcore30.bat b/root/programs/CS/3_Build_BusinessRichClient_netcore30.bat new file mode 100644 index 000000000..3a2e35f36 --- /dev/null +++ b/root/programs/CS/3_Build_BusinessRichClient_netcore30.bat @@ -0,0 +1,27 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Build the batch Infrastructure +rem -------------------------------------------------- +call dotnet restore "Frameworks\Infrastructure\BusinessRichClient_netcore30.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Infrastructure\BusinessRichClient_netcore30.sln" + +pause + +rem ------------------------------------------------------- +endlocal \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj new file mode 100644 index 000000000..a5e6e8724 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj @@ -0,0 +1,46 @@ + + + + Library + netcoreapp3.0 + true + true + + + + TRACE;NETCOREAPP + + + + + + + + + ..\..\Build_netcore30\netcoreapp3.0\Framework.RichClient.dll + + + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.DamManagedOdp.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.DamMySQL.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.DamPstGrS.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.Framework.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyBaseLogic2CS.cs b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyBaseLogic2CS.cs index 0fcd516b4..e9401d78e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyBaseLogic2CS.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyBaseLogic2CS.cs @@ -145,7 +145,7 @@ protected override void UOC_ConnectionOpen( // 接続文字列をロード connstring = GetConfigParameter.GetConnectionString("ConnectionString_SQL"); } -#if NETCOREAPP2_0 +#if NETCOREAPP #else else if (parameterValue.ActionType.Split('%')[0] == "OLE") { diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyFcBaseLogic2CS.cs b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyFcBaseLogic2CS.cs index df30b8be9..862b3be42 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyFcBaseLogic2CS.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business/MyFcBaseLogic2CS.cs @@ -173,7 +173,7 @@ protected override void UOC_ConnectionOpen( // 接続文字列をロード connstring = GetConfigParameter.GetConnectionString("ConnectionString_SQL"); } -#if NETCOREAPP2_0 +#if NETCOREAPP #else else if (parameterValue.ActionType.Split('%')[0] == "OLE") { diff --git a/root/programs/CS/Frameworks/Infrastructure/BusinessRichClient_netcore30.sln b/root/programs/CS/Frameworks/Infrastructure/BusinessRichClient_netcore30.sln new file mode 100644 index 000000000..d22155443 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/BusinessRichClient_netcore30.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Business.RichClient_netcore30", "Business\RichClient\Business.RichClient_netcore30.csproj", "{7518B624-536C-4F4B-8E73-E5421EDCF1DD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomControl.RichClient_netcore30", "CustomControl\RichClient\CustomControl.RichClient_netcore30.csproj", "{7F43B77D-7B02-4C18-94CC-4B1348CDEB57}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Release|Any CPU.Build.0 = Release|Any CPU + {7F43B77D-7B02-4C18-94CC-4B1348CDEB57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F43B77D-7B02-4C18-94CC-4B1348CDEB57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F43B77D-7B02-4C18-94CC-4B1348CDEB57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F43B77D-7B02-4C18-94CC-4B1348CDEB57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F8E24A69-525F-46B8-B01A-3223411B148E} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/Control/WinCustomTextBox.cs b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/Control/WinCustomTextBox.cs index 068fead5a..30095b540 100644 --- a/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/Control/WinCustomTextBox.cs +++ b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/Control/WinCustomTextBox.cs @@ -29,6 +29,7 @@ //* ---------- ---------------- ------------------------------------------------- //* 2016/01/28 Sai Corrected IsIndispensabile property spelling //* 2017/01/31 西野 大介 "Indispensable" ---> "Required" +//* 2017/01/31 西野 大介 Obsolete of String.Copy. //********************************************************************************** using System; @@ -43,6 +44,7 @@ using System.Windows.Forms.Design; using Touryo.Infrastructure.Framework.RichClient.Util; +using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Str; namespace Touryo.Infrastructure.CustomControl.RichClient @@ -1140,7 +1142,11 @@ private void WinCustomTextBox_KeyUp(object sender, KeyEventArgs e) //Debug.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":" + base.Text); // 無限ループ対応 +#if NETCOREAPP + string txt = this.StringCopy(base.Text); +#else string txt = String.Copy(base.Text); +#endif if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) { @@ -1178,7 +1184,11 @@ private void WinCustomTextBox_KeyUp(object sender, KeyEventArgs e) public void PreValidate() { // 生入力 +#if NETCOREAPP + string txt = this.StringCopy(base.Text); +#else string txt = String.Copy(base.Text); +#endif // 半角化(数値指定されている場合) if (this.NumericalPossibility) @@ -1357,7 +1367,11 @@ public bool Validate(out string[] result) // ワーク List lstRet = new List(); +#if NETCOREAPP + string txt = this.StringCopy(base.Text); +#else string txt = String.Copy(base.Text); +#endif if (this.CheckType != null) { @@ -1571,12 +1585,20 @@ internal void Edit() if (this.DisplayUnits == null) { // DisplayUnitsがNULLである。 +#if NETCOREAPP + txt = this.StringCopy(base.Text); +#else txt = String.Copy(base.Text); +#endif } else { // DisplayUnitsがNULLでない。 +#if NETCOREAPP + txt = this.StringCopy(this._Value); +#else txt = String.Copy(this._Value); +#endif } //Debug.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":point1"); @@ -1645,10 +1667,14 @@ internal void ReEdit() // 0対応 string temp = ""; +#if NETCOREAPP + string txt = this.StringCopy(base.Text); +#else string txt = String.Copy(base.Text); +#endif //Debug.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name + ":point1"); - + // 数値だが、数値で無い場合、 if (this.NumericalPossibility && (!StringChecker.IsNumeric(txt))) { @@ -1985,5 +2011,14 @@ private string DeleteZeroAfterDP(string txt, EditDigitsAfterDP edad) } #endregion + +#if NETCOREAPP + /// StringCopy + private string StringCopy(string input) + { + return (string)BinarySerialize.DeepClone(input); + } +#else +#endif } } diff --git a/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj new file mode 100644 index 000000000..3bdfb31a8 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj @@ -0,0 +1,34 @@ + + + + Library + netcoreapp3.0 + true + true + + + + TRACE;NETCOREAPP + + + + + + + + + + + + + ..\..\Build_netcore30\netcoreapp3.0\Framework.RichClient.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.Framework.dll + + + ..\..\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj new file mode 100644 index 000000000..dbd3f6490 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj @@ -0,0 +1,35 @@ + + + + Library + netcoreapp3.0 + true + true + + + Framework.RichClient + Framework.RichClient + + + + On + ..\..\Build_netcore30\ + ..\..\Build_netcore30\Framework.RichClient.xml + Off + TRACE;NETCOREAPP + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Nuget_RichClient_netcore30.sln b/root/programs/CS/Frameworks/Infrastructure/Nuget_RichClient_netcore30.sln new file mode 100644 index 000000000..5ffc17049 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Nuget_RichClient_netcore30.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Framework.RichClient_netcore30", "Framework\RichClient\Framework.RichClient_netcore30.csproj", "{7518B624-536C-4F4B-8E73-E5421EDCF1DD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Public_netstd21", "Public\Public_netstd21.csproj", "{B7B97B7C-B8A2-44CC-AB00-107D634A45E7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Framework_netstd21", "Framework\Framework_netstd21.csproj", "{D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7518B624-536C-4F4B-8E73-E5421EDCF1DD}.Release|Any CPU.Build.0 = Release|Any CPU + {B7B97B7C-B8A2-44CC-AB00-107D634A45E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7B97B7C-B8A2-44CC-AB00-107D634A45E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7B97B7C-B8A2-44CC-AB00-107D634A45E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7B97B7C-B8A2-44CC-AB00-107D634A45E7}.Release|Any CPU.Build.0 = Release|Any CPU + {D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5A5BE98-2C29-48BE-95B3-0E6A8F500E14}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F8E24A69-525F-46B8-B01A-3223411B148E} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj index 9a6a6d740..7fee9fb05 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj @@ -101,6 +101,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj index f852b96cd..e627bc7b7 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj @@ -101,6 +101,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringChecker.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringChecker.cs index c9dc118bd..4d4d32ea8 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringChecker.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringChecker.cs @@ -37,6 +37,7 @@ //* 2012/09/26 西野 大介 IsNumericメソッドを追加 //* 2013/08/30 西野 大介 IsInCodePageメソッドを追加 //* 2018/03/28 西野 大介 .NET Standard対応で、Microsoft.VisualBasicのサポート無し。 +//* 2019/10/28 西野 大介 VisualBasic → Zipanguで、IsNumericを復帰 //********************************************************************************** using System.Text; @@ -57,8 +58,8 @@ public class StringChecker { #region 数値チェック -#if NETSTD -#else +//#if NETSTD +//#else /// 数字(double)に変換可能か確認する。 /// 入力文字列 /// @@ -82,7 +83,7 @@ public static bool IsNumeric(string input) return double.TryParse(input, out temp); } -#endif +//#endif /// 指定された文字列が、数字のみで構成されているかどうか確認する。 /// 入力文字列 diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringConverter.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringConverter.cs index 4f765301b..273903452 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringConverter.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Str/StringConverter.cs @@ -33,22 +33,25 @@ //* 2015/09/30 Sai-san Changed the parameter locale ID to 1041(Japanese) in StrConv method //* 2017/08/11 西野 大介 BaseDam.ClearText ---> StringConverter.FormattingForOneLineLog //* 2018/03/28 西野 大介 .NET Standard対応で、Microsoft.VisualBasicのサポート無し。 +//* 2019/10/28 西野 大介 VisualBasic→Zipanguで、ToZenkaku、Hankaku、Hiragana、Katakanaを復帰 //********************************************************************************** using System.Text; #if NETSTD +using Zipangu; #else using Microsoft.VisualBasic; #endif + namespace Touryo.Infrastructure.Public.Str { /// 文字列の変換処理クラス public class StringConverter { -#if NETSTD -#else +//#if NETSTD +//#else #region 全角 / 半角 変換処理 /// → 全角変換 @@ -56,8 +59,13 @@ public class StringConverter /// (全角化された)出力文字列 public static string ToZenkaku(string input) { +#if NETSTD + // Zipanguを使用する。 + return input.AsciiToWide(); +#else // VB関数を使用する。 return Strings.StrConv(input, VbStrConv.Wide, 1041); +#endif } /// → 半角変換 @@ -65,8 +73,13 @@ public static string ToZenkaku(string input) /// (半角化された)出力文字列 public static string ToHankaku(string input) { +#if NETSTD + // Zipanguを使用する。 + return input.AsciiToNarrow(); +#else // VB関数を使用する。 return Strings.StrConv(input, VbStrConv.Narrow, 1041); +#endif } #endregion @@ -78,8 +91,13 @@ public static string ToHankaku(string input) /// (平仮名化された)出力文字列 public static string ToHiragana(string input) { +#if NETSTD + // Zipanguを使用する。 + return input.KatakanaToHiragana(); +#else // VB関数を使用する。 return Strings.StrConv(input, VbStrConv.Hiragana, 1041); +#endif } /// → 片仮名変換 @@ -87,12 +105,17 @@ public static string ToHiragana(string input) /// (片仮名化された)出力文字列 public static string ToKatakana(string input) { +#if NETSTD + // Zipanguを使用する。 + return input.HiraganaToKatakana(); +#else // VB関数を使用する。 return Strings.StrConv(input, VbStrConv.Katakana, 1041); +#endif } #endregion -#endif + //#endif #region 入力補完 変換処理 From 68569c03c57f9a83da330be1698e063c7ec76774 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 29 Oct 2019 13:41:33 +0900 Subject: [PATCH 02/47] Now, I am fixing #328. --- .../CS/4_Build_Framework_ToolCore.bat | 53 ++ .../Tools/DaoGen_Tool/DaoGen_ToolCore.csproj | 76 +++ .../Tools/DaoGen_Tool/DaoGen_ToolCore.sln | 22 + .../CS/Frameworks/Tools/DaoGen_Tool/Form1.cs | 621 +++++++++--------- .../Frameworks/Tools/DaoGen_Tool/Program.cs | 5 + .../Resources/Resource.Designer.cs | 133 ++-- .../DaoGen_Tool/Resources/Resource.ja-JP.resx | 3 - .../Tools/DaoGen_Tool/Resources/Resource.resx | 3 - .../Frameworks/Tools/DaoGen_Tool/app.config | 2 +- .../Tools/DaoGen_Tool/appsettings.json | 216 ++++++ 10 files changed, 771 insertions(+), 363 deletions(-) create mode 100644 root/programs/CS/4_Build_Framework_ToolCore.bat create mode 100644 root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj create mode 100644 root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.sln create mode 100644 root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json diff --git a/root/programs/CS/4_Build_Framework_ToolCore.bat b/root/programs/CS/4_Build_Framework_ToolCore.bat new file mode 100644 index 000000000..87df5e692 --- /dev/null +++ b/root/programs/CS/4_Build_Framework_ToolCore.bat @@ -0,0 +1,53 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem ------------------------------------------------------- +endlocal +rem -------------------------------------------------- +rem Batch build of DPQuery_Tool. +rem -------------------------------------------------- +call dotnet restore "Frameworks\Tools\DPQuery_Tool\DPQuery_ToolCore.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Tools\DPQuery_Tool\DPQuery_ToolCore.sln" + +pause + +rem -------------------------------------------------- +rem Batch build of DaoGen_Tool. +rem -------------------------------------------------- +call dotnet restore "Frameworks\Tools\DaoGen_Tool\DaoGen_ToolCore.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Tools\DaoGen_Tool\DaoGen_ToolCore.sln" + +pause + +rem -------------------------------------------------- +rem Batch build of Deploy ZipPack With HTTP. +rem -------------------------------------------------- +call dotnet restore "Frameworks\Tools\DeployZipPackWithHTTP\DeployZipPackWithHTTP_Core.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Tools\DeployZipPackWithHTTP\DeployZipPackWithHTTP_Core.sln" + +pause + +rem -------------------------------------------------- +rem Batch build of Workflow. +rem -------------------------------------------------- +call dotnet restore "Frameworks\Tools\Workflow_Tool\Workflow_ToolCore.sln" +call dotnet msbuild %COMMANDLINE% "Frameworks\Tools\Workflow_Tool\Workflow_ToolCore.sln" + +pause + +rem ------------------------------------------------------- +endlocal diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj new file mode 100644 index 000000000..2f20add1a --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj @@ -0,0 +1,76 @@ + + + + WinExe + netcoreapp3.0 + true + + + DaoGen_Tool + + + + TRACE;NETCOREAPP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamManagedOdp.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamMySQL.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamPstGrS.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + + + + + True + True + Resource.resx + + + + + + ResXFileCodeGenerator + Resource.Designer.cs + + + + + + Always + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.sln b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.sln new file mode 100644 index 000000000..1e294ac6a --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DaoGen_Tool", "DaoGen_ToolCore.csproj", "{5CC42F99-B80D-485B-9623-EE2DD59A6EDB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5CC42F99-B80D-485B-9623-EE2DD59A6EDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5CC42F99-B80D-485B-9623-EE2DD59A6EDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5CC42F99-B80D-485B-9623-EE2DD59A6EDB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5CC42F99-B80D-485B-9623-EE2DD59A6EDB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Form1.cs b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Form1.cs index 080f16f84..0bea7fe09 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Form1.cs +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Form1.cs @@ -49,6 +49,7 @@ //* and and replaced this method wherever hard coded values. //* 2014/08/19 西野 大介 カラム取得時のスキーマ考慮が無かったため追加(奥井さんからの提供) //* 2017/09/06 西野 大介 Oracle.ManagedDataAccess.Clientで主キーが取れなくなった対応 +//* 2018/10/29 西野 大介 NETCOREAPP対応で、サポートされないDBを「#if」した。 //********************************************************************************** // -------------------- @@ -56,12 +57,15 @@ // -------------------- using System.Data.SqlClient; using Oracle.ManagedDataAccess.Client; -using System.Data.OleDb; using System.Data.Odbc; using Npgsql; using MySql.Data.MySqlClient; +#if NETCOREAPP +#else +using System.Data.OleDb; using IBM.Data.DB2; using Hitachi.HiRDB; +#endif // -------------------- using System; @@ -91,21 +95,25 @@ public partial class Form1 : Form /// SqlConnection private SqlConnection SqlCn; - /// OleDbConnection - private OleDbConnection OleCn; /// OdbcConnection private OdbcConnection OdbCn; /// OracleConnection private OracleConnection OdpCn; - /// DB2Connection - private DB2Connection DB2Cn; - /// HiRDBConnection - private HiRDBConnection HiRDBCn; /// MySqlConnection private MySqlConnection MySqlCn; /// NpgsqlConnection private NpgsqlConnection NpgsqlCn; +#if NETCOREAPP +#else + /// OleDbConnection + private OleDbConnection OleCn; + /// DB2Connection + private DB2Connection DB2Cn; + /// HiRDBConnection + private HiRDBConnection HiRDBCn; +#endif + #endregion #region スキーマ情報 @@ -170,6 +178,13 @@ private void Form1_Load(object sender, EventArgs e) this.btnSetPrimaryKey.Enabled = false; this.btnDaoDefinitionGen.Enabled = false; + +#if NETCOREAPP + this.rbnOLE.Enabled = false; + this.rbnDB2.Enabled = false; + this.rbnHiRDB.Enabled = false; +#else +#endif } #endregion @@ -204,11 +219,6 @@ private void ConnectionOpen() this.SqlCn = new SqlConnection(this.txtConnString.Text); this.SqlCn.Open(); } - else if (this.rbnOLE.Checked) - { - this.OleCn = new OleDbConnection(this.txtConnString.Text); - this.OleCn.Open(); - } else if (this.rbnODB.Checked) { this.OdbCn = new OdbcConnection(this.txtConnString.Text); @@ -219,16 +229,6 @@ private void ConnectionOpen() this.OdpCn = new OracleConnection(this.txtConnString.Text); this.OdpCn.Open(); } - else if (this.rbnDB2.Checked) - { - this.DB2Cn = new DB2Connection(this.txtConnString.Text); - this.DB2Cn.Open(); - } - else if (this.rbnHiRDB.Checked) - { - this.HiRDBCn = new HiRDBConnection(this.txtConnString.Text); - this.HiRDBCn.Open(); - } else if (this.rbnMySQL.Checked) { this.MySqlCn = new MySqlConnection(this.txtConnString.Text); @@ -239,6 +239,24 @@ private void ConnectionOpen() this.NpgsqlCn = new NpgsqlConnection(this.txtConnString.Text); this.NpgsqlCn.Open(); } +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) + { + this.OleCn = new OleDbConnection(this.txtConnString.Text); + this.OleCn.Open(); + } + else if (this.rbnDB2.Checked) + { + this.DB2Cn = new DB2Connection(this.txtConnString.Text); + this.DB2Cn.Open(); + } + else if (this.rbnHiRDB.Checked) + { + this.HiRDBCn = new HiRDBConnection(this.txtConnString.Text); + this.HiRDBCn.Open(); + } +#endif else { // データプロバイダ指定無し(ありえない) @@ -257,11 +275,6 @@ private void ConnectionClose() this.SqlCn.Close(); } - if (this.OleCn != null) - { - this.OleCn.Close(); - } - if (this.OdbCn != null) { this.OdbCn.Close(); @@ -272,25 +285,33 @@ private void ConnectionClose() this.OdpCn.Close(); } - if (this.DB2Cn != null) + if (this.MySqlCn != null) { - this.DB2Cn.Close(); + this.MySqlCn.Close(); } - if (this.HiRDBCn != null) + if (this.NpgsqlCn != null) { - this.HiRDBCn.Close(); + this.NpgsqlCn.Close(); } - if (this.MySqlCn != null) +#if NETCOREAPP +#else + if (this.OleCn != null) { - this.MySqlCn.Close(); + this.OleCn.Close(); } - if (this.NpgsqlCn != null) + if (this.DB2Cn != null) { - this.NpgsqlCn.Close(); + this.DB2Cn.Close(); + } + + if (this.HiRDBCn != null) + { + this.HiRDBCn.Close(); } +#endif } #endregion @@ -604,36 +625,36 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) #endregion } - else if (this.rbnOLE.Checked) + else if (this.rbnODB.Checked) { - #region OLEDB.NET + #region ODBC.NET if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -646,42 +667,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.OleCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.OdbCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnODB.Checked) + else if (this.rbnODP.Checked) { - #region ODBC.NET + #region Oracle if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.OdbCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -694,42 +715,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.OdbCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.OdpCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnODP.Checked) + else if (this.rbnMySQL.Checked) { - #region Oracle + #region MySQL if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -742,42 +763,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.OdpCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.MySqlCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnDB2.Checked) + else if (this.rbnPstgrs.Checked) { - #region DB2 + #region PostgreSQL if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -790,42 +811,44 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.DB2Cn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.NpgsqlCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnHiRDB.Checked) +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) { - #region HiRDB + #region OLEDB.NET if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -838,42 +861,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.HiRDBCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.OleCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnMySQL.Checked) + else if (this.rbnDB2.Checked) { - #region MySQL + #region DB2 if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -886,42 +909,42 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.MySqlCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.DB2Cn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } - else if (this.rbnPstgrs.Checked) + else if (this.rbnHiRDB.Checked) { - #region PostgreSQL + #region HiRDB if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("SummaryInfo")) { // DataSourceInformation - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("TypeInfo")) { // DataTypes - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("ReservedWordInfo")) { // ReservedWords - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords); } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("RestrictionInfo")) { // Restrictions - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions); writeLineFlag = true; } else if (this.cmbSchemaInfo.SelectedItem.ToString() == this.RM_GetString("MetadataInfo")) { // MetaDataCollections - this.DtSchma = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); + this.DtSchma = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections); // アイテムの追加 if (this.cmbSchemaInfo.Items.Count <= 5) @@ -934,12 +957,13 @@ private void btnGetSchemaInfo_Click(object sender, EventArgs e) else { // その他 - this.DtSchma = this.NpgsqlCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); + this.DtSchma = this.HiRDBCn.GetSchema(this.cmbSchemaInfo.SelectedItem.ToString().Substring(2)); writeLineFlag = true; } #endregion } +#endif else { // データプロバイダ指定無し(ありえない) @@ -1053,46 +1077,6 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } - else if (this.rbnOLE.Checked) - { - #region OLEDB - - // 注釈 - //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(OLEDB用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "OLEDB"), this.RM_GetString("CautionPrerequisiteCaption")); - - #region テーブル・ビューの情報を取得 - - dtSchmaTables = this.OleCn.GetSchema("Tables"); - - // スキーマの情報(カスタム)の作成 - this.HtSchemaCustom = new Hashtable(); - - // テーブル・ビューの取り込み - foreach (System.Data.DataRow row in dtSchmaTables.Rows) - { - if ((string)row["TABLE_TYPE"] == "TABLE") - { - // テーブルの取り込み - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], false)); - } - else if ((string)row["TABLE_TYPE"] == "VIEW") - { - // ビューの取り込み。更新可能かどうかは判断しない。 - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], true)); - } - else - { - // TABLE・VIEW以外 - } - } - - #endregion - - #endregion - } else if (this.rbnODB.Checked) { #region ODBC @@ -1196,56 +1180,69 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } - else if (this.rbnDB2.Checked) + else if (this.rbnMySQL.Checked) { - #region DB2 + #region MySQL // 注釈 - //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(DB2用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "DB2"), this.RM_GetString("CautionPrerequisiteCaption")); + // MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(MySQL用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "MySQL"), this.RM_GetString("CautionPrerequisiteCaption")); #region テーブル・ビューの情報を取得 - dtSchmaTables = this.DB2Cn.GetSchema("Tables"); + dtSchmaTables = this.MySqlCn.GetSchema("Tables"); + dtSchmaViews = this.MySqlCn.GetSchema("Views"); // スキーマの情報(カスタム)の作成 this.HtSchemaCustom = new Hashtable(); - // テーブル・ビューの取り込み + // テーブルの取り込み。 foreach (System.Data.DataRow row in dtSchmaTables.Rows) { - // システム テーブルは避ける。 - if ((string)row["TABLE_TYPE"] == "TABLE" - //|| (string)row["TABLE_TYPE"] == "ALIAS" → 別名はサポートしない - || (string)row["TABLE_TYPE"] == "MATERIALIZED QUERY TABLE") - { - // システム テーブルは避ける。 - if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") - { - } - else - { - // テーブルの取り込み。 - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], false)); - } - } - else if ((string)row["TABLE_TYPE"] == "VIEW") - { - // システム ビューは避ける。 - if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") - { - } - else - { - // ビューの取り込み。更新可能かどうかは判断しない。 - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], true)); - } + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], false)); + } + + // ビューの取り込み。更新可能かどうかは判断しない。 + foreach (System.Data.DataRow row in dtSchmaViews.Rows) + { + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], true)); + } + + #endregion + + #endregion + } + else if (this.rbnPstgrs.Checked) + { + #region PostgreSQL + + // 注釈 + //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(PostgreSQL用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "PostgreSQL"), this.RM_GetString("CautionPrerequisiteCaption")); + + #region テーブル・ビューの情報を取得 + + dtSchmaTables = this.NpgsqlCn.GetSchema("Tables"); + + // スキーマの情報(カスタム)の作成 + this.HtSchemaCustom = new Hashtable(); + + // テーブル・ビューの取り込み。 + foreach (System.Data.DataRow row in dtSchmaTables.Rows) + { + string tableSchema = ((string)row["TABLE_SCHEMA"]).ToUpper(); + + if (tableSchema == "INFORMATION_SCHEMA" || tableSchema == "PG_CATALOG") + { + // システム スキーマは無視する。 } else { - // 上記以外 + // ユーザ スキーマのみ対象にする。 + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], false)); } } @@ -1253,17 +1250,19 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } - else if (this.rbnHiRDB.Checked) +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) { - #region HiRDB + #region OLEDB // 注釈 - //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(HiRDB用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "ODBC"), this.RM_GetString("CautionPrerequisiteCaption")); + //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(OLEDB用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "OLEDB"), this.RM_GetString("CautionPrerequisiteCaption")); #region テーブル・ビューの情報を取得 - dtSchmaTables = this.HiRDBCn.GetSchema("Tables"); + dtSchmaTables = this.OleCn.GetSchema("Tables"); // スキーマの情報(カスタム)の作成 this.HtSchemaCustom = new Hashtable(); @@ -1271,10 +1270,50 @@ private void btnListTable_Click(object sender, EventArgs e) // テーブル・ビューの取り込み foreach (System.Data.DataRow row in dtSchmaTables.Rows) { - // システム テーブルは避ける。 if ((string)row["TABLE_TYPE"] == "TABLE") - //|| (string)row["TABLE_TYPE"] == "ALIAS" → 別名はサポートしない - //|| (string)row["TABLE_TYPE"] == "MATERIALIZED QUERY TABLE") + { + // テーブルの取り込み + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], false)); + } + else if ((string)row["TABLE_TYPE"] == "VIEW") + { + // ビューの取り込み。更新可能かどうかは判断しない。 + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], true)); + } + else + { + // TABLE・VIEW以外 + } + } + + #endregion + + #endregion + } + else if (this.rbnDB2.Checked) + { + #region DB2 + + // 注釈 + //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(DB2用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "DB2"), this.RM_GetString("CautionPrerequisiteCaption")); + + #region テーブル・ビューの情報を取得 + + dtSchmaTables = this.DB2Cn.GetSchema("Tables"); + + // スキーマの情報(カスタム)の作成 + this.HtSchemaCustom = new Hashtable(); + + // テーブル・ビューの取り込み + foreach (System.Data.DataRow row in dtSchmaTables.Rows) + { + // システム テーブルは避ける。 + if ((string)row["TABLE_TYPE"] == "TABLE" + //|| (string)row["TABLE_TYPE"] == "ALIAS" → 別名はサポートしない + || (string)row["TABLE_TYPE"] == "MATERIALIZED QUERY TABLE") { // システム テーブルは避ける。 if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") @@ -1310,69 +1349,56 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } - else if (this.rbnMySQL.Checked) - { - #region MySQL - - // 注釈 - // MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(MySQL用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "MySQL"), this.RM_GetString("CautionPrerequisiteCaption")); - - #region テーブル・ビューの情報を取得 - - dtSchmaTables = this.MySqlCn.GetSchema("Tables"); - dtSchmaViews = this.MySqlCn.GetSchema("Views"); - - // スキーマの情報(カスタム)の作成 - this.HtSchemaCustom = new Hashtable(); - - // テーブルの取り込み。 - foreach (System.Data.DataRow row in dtSchmaTables.Rows) - { - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], false)); - } - - // ビューの取り込み。更新可能かどうかは判断しない。 - foreach (System.Data.DataRow row in dtSchmaViews.Rows) - { - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], true)); - } - - #endregion - - #endregion - } - else if (this.rbnPstgrs.Checked) + else if (this.rbnHiRDB.Checked) { - #region PostgreSQL + #region HiRDB // 注釈 - //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(PostgreSQL用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); - MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "PostgreSQL"), this.RM_GetString("CautionPrerequisiteCaption")); + //MessageBox.Show("同一DB上で同一名の複数のテーブルを持たないこと(HiRDB用のD層自動生成ツールの仕様です)", "-注意(前提条件)-"); + MessageBox.Show(string.Format(this.RM_GetString("CautionPrerequisite"), "ODBC"), this.RM_GetString("CautionPrerequisiteCaption")); #region テーブル・ビューの情報を取得 - dtSchmaTables = this.NpgsqlCn.GetSchema("Tables"); + dtSchmaTables = this.HiRDBCn.GetSchema("Tables"); // スキーマの情報(カスタム)の作成 this.HtSchemaCustom = new Hashtable(); - // テーブル・ビューの取り込み。 + // テーブル・ビューの取り込み foreach (System.Data.DataRow row in dtSchmaTables.Rows) { - string tableSchema = ((string)row["TABLE_SCHEMA"]).ToUpper(); - - if (tableSchema == "INFORMATION_SCHEMA" || tableSchema == "PG_CATALOG") + // システム テーブルは避ける。 + if ((string)row["TABLE_TYPE"] == "TABLE") + //|| (string)row["TABLE_TYPE"] == "ALIAS" → 別名はサポートしない + //|| (string)row["TABLE_TYPE"] == "MATERIALIZED QUERY TABLE") { - // システム スキーマは無視する。 + // システム テーブルは避ける。 + if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") + { + } + else + { + // テーブルの取り込み。 + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], false)); + } + } + else if ((string)row["TABLE_TYPE"] == "VIEW") + { + // システム ビューは避ける。 + if ((string)row["TABLE_SCHEMA"].ToString().Substring(0, 3) == "SYS") + { + } + else + { + // ビューの取り込み。更新可能かどうかは判断しない。 + HtSchemaCustom.Add((string)row["TABLE_NAME"], + new CTable((string)row["TABLE_NAME"], true)); + } } else { - // ユーザ スキーマのみ対象にする。 - HtSchemaCustom.Add((string)row["TABLE_NAME"], - new CTable((string)row["TABLE_NAME"], false)); + // 上記以外 } } @@ -1380,6 +1406,7 @@ private void btnListTable_Click(object sender, EventArgs e) #endregion } +#endif else { // データプロバイダ指定無し(ありえない) @@ -1472,11 +1499,6 @@ private void btnLoadColumn_Click(object sender, EventArgs e) // DataTypes CmnMethods.DataTypes = this.SqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnOLE.Checked) - { - // DataTypes - CmnMethods.DataTypes = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); - } else if (this.rbnODB.Checked) { // DataTypes @@ -1487,26 +1509,34 @@ private void btnLoadColumn_Click(object sender, EventArgs e) // DataTypes CmnMethods.DataTypes = this.OdpCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnDB2.Checked) + else if (this.rbnMySQL.Checked) { // DataTypes - CmnMethods.DataTypes = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + CmnMethods.DataTypes = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnHiRDB.Checked) + else if (this.rbnPstgrs.Checked) + { + //// DataTypes(NpgsqlではDataTypesがサポートされていない) + //CmnMethods.DataTypes = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + } +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) { // DataTypes - CmnMethods.DataTypes = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + CmnMethods.DataTypes = this.OleCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnMySQL.Checked) + else if (this.rbnDB2.Checked) { // DataTypes - CmnMethods.DataTypes = this.MySqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + CmnMethods.DataTypes = this.DB2Cn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } - else if (this.rbnPstgrs.Checked) + else if (this.rbnHiRDB.Checked) { - //// DataTypes(NpgsqlではDataTypesがサポートされていない) - //CmnMethods.DataTypes = this.NpgsqlCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); + // DataTypes + CmnMethods.DataTypes = this.HiRDBCn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes); } +#endif else { // データプロバイダ指定無し(ありえない) @@ -1670,44 +1700,6 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnOLE.Checked) - { - #region OLEDB.NET - - dtSchmaColumns = this.OleCn.GetSchema("Columns"); - - // カラムの取り込み - foreach (System.Data.DataRow row in dtSchmaColumns.Rows) - { - // テーブルを取得 - CTable table = (CTable)this.HtSchemaCustom[(string)row["TABLE_NAME"]]; - - // 有効なテーブルにのみロードする。 - if (table == null) - { - // 不明なテーブル - } - else - { - // 有効なテーブル - if (table.Effective) - { - CColumn column = new CColumn( - (string)row["COLUMN_NAME"], CmnMethods.ConvertToDBTypeInfo_OLEDB(row["DATA_TYPE"].ToString()), - CmnMethods.ConvertToDotNetTypeInfo(CmnMethods.ConvertToDBTypeInfo_OLEDB(row["DATA_TYPE"].ToString()))); - - // ポジションをキーにしてカラムを追加 - table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; - // カラム名をキーにしてカラムを追加 - table.HtColumns_Name[(string)row["COLUMN_NAME"]] = column; - } - } - } - - // 主キーの情報をロード・・・しない。 - - #endregion - } else if (this.rbnODB.Checked) { #region ODBC.NET @@ -1864,12 +1856,12 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnDB2.Checked) + else if (this.rbnMySQL.Checked) { - #region DB2 + #region MySQL // カラムの情報を取得 - dtSchmaColumns = this.DB2Cn.GetSchema("Columns"); + dtSchmaColumns = this.MySqlCn.GetSchema("Columns"); // カラムの取り込み foreach (System.Data.DataRow row in dtSchmaColumns.Rows) @@ -1888,8 +1880,8 @@ private void btnLoadColumn_Click(object sender, EventArgs e) if (table.Effective) { CColumn column = new CColumn( - (string)row["COLUMN_NAME"], (string)row["DATA_TYPE_NAME"], - CmnMethods.ConvertToDotNetTypeInfo_DB2((string)row["DATA_TYPE_NAME"])); + (string)row["COLUMN_NAME"], (string)row["DATA_TYPE"], + CmnMethods.ConvertToDotNetTypeInfo((string)row["DATA_TYPE"])); // ポジションをキーにしてカラムを追加 table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; @@ -1903,12 +1895,12 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnHiRDB.Checked) + else if (this.rbnPstgrs.Checked) { - #region HiRDB + #region PostgreSQL // カラムの情報を取得 - dtSchmaColumns = this.HiRDBCn.GetSchema("Columns"); + dtSchmaColumns = this.NpgsqlCn.GetSchema("Columns"); // カラムの取り込み foreach (System.Data.DataRow row in dtSchmaColumns.Rows) @@ -1927,8 +1919,9 @@ private void btnLoadColumn_Click(object sender, EventArgs e) if (table.Effective) { CColumn column = new CColumn( - (string)row["COLUMN_NAME"], (string)row["DATA_TYPE_NAME"], - CmnMethods.ConvertToDotNetTypeInfo_DB2((string)row["DATA_TYPE_NAME"])); + (string)row["COLUMN_NAME"], (string)row["DATA_TYPE"], "System.Object"); + //CmnMethods.ConvertToDotNetTypeInfo((string)row["DATA_TYPE"])); + //(NpgsqlではDataTypesがサポートされていないため) // ポジションをキーにしてカラムを追加 table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; @@ -1942,12 +1935,52 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnMySQL.Checked) +#if NETCOREAPP +#else + else if (this.rbnOLE.Checked) { - #region MySQL + #region OLEDB.NET + + dtSchmaColumns = this.OleCn.GetSchema("Columns"); + + // カラムの取り込み + foreach (System.Data.DataRow row in dtSchmaColumns.Rows) + { + // テーブルを取得 + CTable table = (CTable)this.HtSchemaCustom[(string)row["TABLE_NAME"]]; + + // 有効なテーブルにのみロードする。 + if (table == null) + { + // 不明なテーブル + } + else + { + // 有効なテーブル + if (table.Effective) + { + CColumn column = new CColumn( + (string)row["COLUMN_NAME"], CmnMethods.ConvertToDBTypeInfo_OLEDB(row["DATA_TYPE"].ToString()), + CmnMethods.ConvertToDotNetTypeInfo(CmnMethods.ConvertToDBTypeInfo_OLEDB(row["DATA_TYPE"].ToString()))); + + // ポジションをキーにしてカラムを追加 + table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; + // カラム名をキーにしてカラムを追加 + table.HtColumns_Name[(string)row["COLUMN_NAME"]] = column; + } + } + } + + // 主キーの情報をロード・・・しない。 + + #endregion + } + else if (this.rbnDB2.Checked) + { + #region DB2 // カラムの情報を取得 - dtSchmaColumns = this.MySqlCn.GetSchema("Columns"); + dtSchmaColumns = this.DB2Cn.GetSchema("Columns"); // カラムの取り込み foreach (System.Data.DataRow row in dtSchmaColumns.Rows) @@ -1966,8 +1999,8 @@ private void btnLoadColumn_Click(object sender, EventArgs e) if (table.Effective) { CColumn column = new CColumn( - (string)row["COLUMN_NAME"], (string)row["DATA_TYPE"], - CmnMethods.ConvertToDotNetTypeInfo((string)row["DATA_TYPE"])); + (string)row["COLUMN_NAME"], (string)row["DATA_TYPE_NAME"], + CmnMethods.ConvertToDotNetTypeInfo_DB2((string)row["DATA_TYPE_NAME"])); // ポジションをキーにしてカラムを追加 table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; @@ -1981,12 +2014,12 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } - else if (this.rbnPstgrs.Checked) + else if (this.rbnHiRDB.Checked) { - #region PostgreSQL + #region HiRDB // カラムの情報を取得 - dtSchmaColumns = this.NpgsqlCn.GetSchema("Columns"); + dtSchmaColumns = this.HiRDBCn.GetSchema("Columns"); // カラムの取り込み foreach (System.Data.DataRow row in dtSchmaColumns.Rows) @@ -2005,9 +2038,8 @@ private void btnLoadColumn_Click(object sender, EventArgs e) if (table.Effective) { CColumn column = new CColumn( - (string)row["COLUMN_NAME"], (string)row["DATA_TYPE"], "System.Object"); - //CmnMethods.ConvertToDotNetTypeInfo((string)row["DATA_TYPE"])); - //(NpgsqlではDataTypesがサポートされていないため) + (string)row["COLUMN_NAME"], (string)row["DATA_TYPE_NAME"], + CmnMethods.ConvertToDotNetTypeInfo_DB2((string)row["DATA_TYPE_NAME"])); // ポジションをキーにしてカラムを追加 table.HtColumns_Position[row["ORDINAL_POSITION"].ToString()] = column; @@ -2021,6 +2053,7 @@ private void btnLoadColumn_Click(object sender, EventArgs e) #endregion } +#endif else { // データプロバイダ指定無し(ありえない) diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs index 7db080474..0d9f57c98 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs @@ -52,6 +52,11 @@ static class Program [STAThread] static void Main() { +#if NETCOREAPP + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); +#else +#endif try { Application.EnableVisualStyles(); diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.Designer.cs b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.Designer.cs index 3cb3fc775..4798ba942 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.Designer.cs +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// このコードはツールによって生成されました。 +// ランタイム バージョン:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 +// コードが再生成されるときに損失したりします。 // //------------------------------------------------------------------------------ @@ -13,13 +13,13 @@ namespace DaoGen_Tool.Resources { /// - /// A strongly-typed resource class, for looking up localized strings, etc. + /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。 /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + // このクラスは StronglyTypedResourceBuilder クラスが ResGen + // または Visual Studio のようなツールを使用して自動生成されました。 + // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に + // ResGen を実行し直すか、または VS プロジェクトをビルドし直します。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resource { @@ -33,7 +33,7 @@ internal Resource() { } /// - /// Returns the cached ResourceManager instance used by this class. + /// このクラスで使用されているキャッシュされた ResourceManager インスタンスを返します。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ internal Resource() { } /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. + /// すべてについて、現在のスレッドの CurrentUICulture プロパティをオーバーライドします + /// 現在のスレッドの CurrentUICulture プロパティをオーバーライドします。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ internal Resource() { } /// - /// Looks up a localized string similar to app.Config parameter has not been set. :. + /// app.Config parameter has not been set. : に類似しているローカライズされた文字列を検索します。 /// internal static string AppConfigParameterNotSet { get { @@ -70,7 +70,7 @@ internal static string AppConfigParameterNotSet { } /// - /// Looks up a localized string similar to Do not have more than one table with the same name on the same DB ( the specification for the Data layer generator for {0}) . + /// Do not have more than one table with the same name on the same DB ( the specification for the Data layer generator for {0}) に類似しているローカライズされた文字列を検索します。 /// internal static string CautionPrerequisite { get { @@ -79,7 +79,7 @@ internal static string CautionPrerequisite { } /// - /// Looks up a localized string similar to Note - ( prerequisite ) . + /// Note - ( prerequisite ) に類似しているローカライズされた文字列を検索します。 /// internal static string CautionPrerequisiteCaption { get { @@ -88,7 +88,7 @@ internal static string CautionPrerequisiteCaption { } /// - /// Looks up a localized string similar to (Is the specification of Data layer generator for Oracle ) that we only consider the table owned by the ( user ) schema [{0}]. + /// (Is the specification of Data layer generator for Oracle ) that we only consider the table owned by the ( user ) schema [{0}] に類似しているローカライズされた文字列を検索します。 /// internal static string CautionPrerequisiteOracle { get { @@ -97,7 +97,7 @@ internal static string CautionPrerequisiteOracle { } /// - /// Looks up a localized string similar to Check Error is :. + /// Check Error is : に類似しているローカライズされた文字列を検索します。 /// internal static string CheckExceptionError { get { @@ -106,7 +106,7 @@ internal static string CheckExceptionError { } /// - /// Looks up a localized string similar to Confirmation. + /// Confirmation に類似しているローカライズされた文字列を検索します。 /// internal static string Confirm { get { @@ -115,7 +115,7 @@ internal static string Confirm { } /// - /// Looks up a localized string similar to Display ({0}) dialog of schema information of DBMS. + /// Display ({0}) dialog of schema information of DBMS に類似しているローカライズされた文字列を検索します。 /// internal static string DisplaySchemaInfoDialogBox { get { @@ -124,7 +124,16 @@ internal static string DisplaySchemaInfoDialogBox { } /// - /// Looks up a localized string similar to Completion of generation of the Data layer definition information!. + /// The operation was canceled. に類似しているローカライズされた文字列を検索します。 + /// + internal static string DLayerCancelledmessage { + get { + return ResourceManager.GetString("DLayerCancelledmessage", resourceCulture); + } + } + + /// + /// Completion of generation of the Data layer definition information! に類似しているローカライズされた文字列を検索します。 /// internal static string DlayerGeneratedMessage { get { @@ -133,7 +142,7 @@ internal static string DlayerGeneratedMessage { } /// - /// Looks up a localized string similar to Entry Point:. + /// Entry Point: に類似しているローカライズされた文字列を検索します。 /// internal static string EntryPoint { get { @@ -142,7 +151,7 @@ internal static string EntryPoint { } /// - /// Looks up a localized string similar to Escape character is not set.. + /// Escape character is not set. に類似しているローカライズされた文字列を検索します。 /// internal static string EscCharacterNotSet { get { @@ -151,7 +160,7 @@ internal static string EscCharacterNotSet { } /// - /// Looks up a localized string similar to Data layer definition information file format error : There is no table name.. + /// Data layer definition information file format error : There is no table name. に類似しているローカライズされた文字列を検索します。 /// internal static string FileFormatError { get { @@ -160,7 +169,7 @@ internal static string FileFormatError { } /// - /// Looks up a localized string similar to Automatic Generation Completed !. + /// Automatic Generation Completed ! に類似しているローカライズされた文字列を検索します。 /// internal static string FileGenComplete { get { @@ -169,7 +178,7 @@ internal static string FileGenComplete { } /// - /// Looks up a localized string similar to Check error: file type information DB [{0}] does not exist.. + /// Check error: file type information DB [{0}] does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string FilenotExistDBtypeInfo { get { @@ -178,7 +187,7 @@ internal static string FilenotExistDBtypeInfo { } /// - /// Looks up a localized string similar to Check error:Defined Data layer Information file defined [{0}] does not exist.. + /// Check error:Defined Data layer Information file defined [{0}] does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string FilenotExistDlayerInfo { get { @@ -187,7 +196,7 @@ internal static string FilenotExistDlayerInfo { } /// - /// Looks up a localized string similar to Check error:. NET type information file [{0}] does not exist.. + /// Check error:. NET type information file [{0}] does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string FilenotExistNETtypeInfo { get { @@ -196,7 +205,7 @@ internal static string FilenotExistNETtypeInfo { } /// - /// Looks up a localized string similar to Go to the next table.. + /// Go to the next table. に類似しているローカライズされた文字列を検索します。 /// internal static string GotoNextTable { get { @@ -205,7 +214,7 @@ internal static string GotoNextTable { } /// - /// Looks up a localized string similar to Root folder of the input file (template file) does not exist.. + /// Root folder of the input file (template file) does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string InputFileRootFolderNotExist { get { @@ -214,7 +223,7 @@ internal static string InputFileRootFolderNotExist { } /// - /// Looks up a localized string similar to Invalid Format. + /// Invalid Format に類似しているローカライズされた文字列を検索します。 /// internal static string InvalidFormat { get { @@ -223,7 +232,7 @@ internal static string InvalidFormat { } /// - /// Looks up a localized string similar to Meta-Data Information. + /// Meta-Data Information に類似しているローカライズされた文字列を検索します。 /// internal static string MetadataInfo { get { @@ -232,7 +241,7 @@ internal static string MetadataInfo { } /// - /// Looks up a localized string similar to There is no time stamp column name.. + /// There is no time stamp column name. に類似しているローカライズされた文字列を検索します。 /// internal static string NoTimestampColName { get { @@ -241,7 +250,7 @@ internal static string NoTimestampColName { } /// - /// Looks up a localized string similar to CSV file (*.csv)|*.csv. + /// CSV file (*.csv)|*.csv に類似しているローカライズされた文字列を検索します。 /// internal static string OpenFileDialogFilter { get { @@ -250,7 +259,7 @@ internal static string OpenFileDialogFilter { } /// - /// Looks up a localized string similar to Data layer definition information file. + /// Data layer definition information file に類似しているローカライズされた文字列を検索します。 /// internal static string OpenFileDialogTitle { get { @@ -259,7 +268,7 @@ internal static string OpenFileDialogTitle { } /// - /// Looks up a localized string similar to Root folder (Dao class file, SQL file. Etc) of the output file does not exist.. + /// Root folder (Dao class file, SQL file. Etc) of the output file does not exist. に類似しているローカライズされた文字列を検索します。 /// internal static string OutputFileRootFolderNotExist { get { @@ -268,7 +277,7 @@ internal static string OutputFileRootFolderNotExist { } /// - /// Looks up a localized string similar to Specifies the root folder path (Dao file, SQL file) of the output file. + /// Specifies the root folder path (Dao file, SQL file) of the output file に類似しているローカライズされた文字列を検索します。 /// internal static string OutputFolderPath { get { @@ -277,7 +286,7 @@ internal static string OutputFolderPath { } /// - /// Looks up a localized string similar to Primary key is not defined in the table.. + /// Primary key is not defined in the table. に類似しているローカライズされた文字列を検索します。 /// internal static string PrimaryKeyNotDefined { get { @@ -286,7 +295,7 @@ internal static string PrimaryKeyNotDefined { } /// - /// Looks up a localized string similar to Reserved Word Information. + /// Reserved Word Information に類似しているローカライズされた文字列を検索します。 /// internal static string ReservedWordInfo { get { @@ -295,7 +304,7 @@ internal static string ReservedWordInfo { } /// - /// Looks up a localized string similar to Restriction Information. + /// Restriction Information に類似しているローカライズされた文字列を検索します。 /// internal static string RestrictionInfo { get { @@ -304,7 +313,7 @@ internal static string RestrictionInfo { } /// - /// Looks up a localized string similar to Is a run-time error:. + /// Is a run-time error: に類似しているローカライズされた文字列を検索します。 /// internal static string RuntimeError { get { @@ -313,7 +322,7 @@ internal static string RuntimeError { } /// - /// Looks up a localized string similar to CSV file (*.csv)|*.csv. + /// CSV file (*.csv)|*.csv に類似しているローカライズされた文字列を検索します。 /// internal static string SaveFileDialogFilter { get { @@ -322,7 +331,7 @@ internal static string SaveFileDialogFilter { } /// - /// Looks up a localized string similar to Data layer definition information file. + /// Data layer definition information file に類似しているローカライズされた文字列を検索します。 /// internal static string SaveFileDialogTitle { get { @@ -331,7 +340,7 @@ internal static string SaveFileDialogTitle { } /// - /// Looks up a localized string similar to Setting the primary key information ({0}) dialog. + /// Setting the primary key information ({0}) dialog に類似しているローカライズされた文字列を検索します。 /// internal static string SetPrimaryKeyInfo { get { @@ -340,7 +349,7 @@ internal static string SetPrimaryKeyInfo { } /// - /// Looks up a localized string similar to In front of, I can only be specified indent:.. + /// In front of, I can only be specified indent:. に類似しているローカライズされた文字列を検索します。 /// internal static string StringIndentation { get { @@ -349,7 +358,7 @@ internal static string StringIndentation { } /// - /// Looks up a localized string similar to Summary Information. + /// Summary Information に類似しているローカライズされた文字列を検索します。 /// internal static string SummaryInfo { get { @@ -358,7 +367,7 @@ internal static string SummaryInfo { } /// - /// Looks up a localized string similar to Table name, column DB-type information. + /// Table name, column DB-type information に類似しているローカライズされた文字列を検索します。 /// internal static string TableNameColDbTypeInfo { get { @@ -367,7 +376,7 @@ internal static string TableNameColDbTypeInfo { } /// - /// Looks up a localized string similar to Table name, column. NET type information -. + /// Table name, column. NET type information - に類似しているローカライズされた文字列を検索します。 /// internal static string TableNameColdotNetTypeInfo { get { @@ -376,7 +385,7 @@ internal static string TableNameColdotNetTypeInfo { } /// - /// Looks up a localized string similar to Table name, column information -. + /// Table name, column information - に類似しているローカライズされた文字列を検索します。 /// internal static string TableNameColInfo { get { @@ -385,7 +394,7 @@ internal static string TableNameColInfo { } /// - /// Looks up a localized string similar to Tab 1. + /// Tab 1 に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage1 { get { @@ -394,7 +403,7 @@ internal static string TabPage1 { } /// - /// Looks up a localized string similar to Column Information. + /// Column Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage1ColumnInfo { get { @@ -403,7 +412,7 @@ internal static string TabPage1ColumnInfo { } /// - /// Looks up a localized string similar to Schema Information. + /// Schema Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage1SchemaInfo { get { @@ -412,7 +421,7 @@ internal static string TabPage1SchemaInfo { } /// - /// Looks up a localized string similar to Table Information. + /// Table Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage1TableInfo { get { @@ -421,7 +430,7 @@ internal static string TabPage1TableInfo { } /// - /// Looks up a localized string similar to Tab 2. + /// Tab 2 に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage2 { get { @@ -430,7 +439,7 @@ internal static string TabPage2 { } /// - /// Looks up a localized string similar to Primary Key Information. + /// Primary Key Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage2PrimarykeyInfo { get { @@ -439,7 +448,7 @@ internal static string TabPage2PrimarykeyInfo { } /// - /// Looks up a localized string similar to Vieux Information. + /// Vieux Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage2VieuxInfo { get { @@ -448,7 +457,7 @@ internal static string TabPage2VieuxInfo { } /// - /// Looks up a localized string similar to Tab 3. + /// Tab 3 に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage3 { get { @@ -457,7 +466,7 @@ internal static string TabPage3 { } /// - /// Looks up a localized string similar to Index Column Information. + /// Index Column Information に類似しているローカライズされた文字列を検索します。 /// internal static string TabPage3IndexColInfo { get { @@ -466,7 +475,7 @@ internal static string TabPage3IndexColInfo { } /// - /// Looks up a localized string similar to Template file does not exist. :. + /// Template file does not exist. : に類似しているローカライズされた文字列を検索します。 /// internal static string TempFilenotExists { get { @@ -475,7 +484,7 @@ internal static string TempFilenotExists { } /// - /// Looks up a localized string similar to Specifies the root folder path input file (template file). + /// Specifies the root folder path input file (template file) に類似しているローカライズされた文字列を検索します。 /// internal static string TemplateFolderPath { get { @@ -484,7 +493,7 @@ internal static string TemplateFolderPath { } /// - /// Looks up a localized string similar to ToolTip Text. + /// This field is optional. に類似しているローカライズされた文字列を検索します。 /// internal static string ToolTipText { get { @@ -493,7 +502,7 @@ internal static string ToolTipText { } /// - /// Looks up a localized string similar to Type Information. + /// Type Information に類似しているローカライズされた文字列を検索します。 /// internal static string TypeInfo { get { diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.ja-JP.resx b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.ja-JP.resx index 571748af3..9e253ea66 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.ja-JP.resx +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.ja-JP.resx @@ -144,9 +144,6 @@ 制限情報 - - ランタイムエラーです: - CSVファイル(*.csv)|*.csv diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.resx b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.resx index 6f2f68679..b6800b9f3 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.resx +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Resources/Resource.resx @@ -144,9 +144,6 @@ Restriction Information - - There is Run time error : - CSV file (*.csv)|*.csv diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config index a1688ebdb..85d9f462c 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config @@ -78,7 +78,7 @@ - + diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json new file mode 100644 index 000000000..5251f6418 --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json @@ -0,0 +1,216 @@ +{ + // connectionStrings section + "connectionStrings": { + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;", + "ConnectionString_ODBC": "Dsn=odbc_test1", + "ConnectionString_ODP": "User Id=SCOTT;Password=tiger;Data Source=localhost/XE;", + "ConnectionString_MCN": "Server=localhost;Database=test;User Id=root;Password=seigi@123", + "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;" + }, + + // appSettings section + "appSettings": { + + // tH_ + "InputFilesRoot": "C:\\", + "OutputFilesRoot": "C:\\", + + // pҖ + "FamilyName": "", + "PersonalName": "Y", + + // ͍ځiev[gj + + // DaoNX ev[g t@Cigqj + "DaoTemplateFileName": "DaoTemplate", + + // EntityNX ev[g t@Cigqj + "EntityTemplateFileName": "EntityTemplate", + // DataSetNX ev[g t@C + "DataSetTemplateFileName": "DataSetTemplate.xsd", + + // eiX ev[g t@C + "TableAdapterTemplateFileName": "TableAdapter", + "ConditionalSearchTemplateFileName": "ConditionalSearch.aspx", + "SearchAndUpdateTemplateFileName": "SearchAndUpdate.aspx", + "DetailTemplateFileName": "Detail.aspx", + + // SQL ev[g t@C + // ÓI + "InsertTemplateFileName": "s1_InsertTemplate.sql", + "SelectTemplateFileName": "s2_SelectTemplate.xml", + "UpdateTemplateFileName": "s3_UpdateTemplate.xml", + "DeleteTemplateFileName": "s4_DeleteTemplate.xml", + + // I + "DynInsTemplateFileName": "d1_DynInsTemplate.xml", + "DynSelTemplateFileName": "d2_DynSelTemplate.xml", + "DynUpdTemplateFileName": "d3_DynUpdTemplate.xml", + "DynDelTemplateFileName": "d4_DynDelTemplate.xml", + + // g\bhp + "DynSelCntTemplateFileName": "d5_DynSelCntTemplate.xml", + + // o͍ + // DaoNX t@C̃wb_Etb^ + // DaoNX̃wb_Etb^ + "DaoClassNameHeader": "Dao", + "DaoClassNameFooter": "", + + // EntityNX t@C̃wb_Etb^ + // EntityNX̃wb_Etb^ + "EntityClassNameHeader": "", + "EntityClassNameFooter": "Entity", + + // DataSetNX t@C̃wb_Etb^ + // DataSetNX̃wb_Etb^ + "DataSetClassNameHeader": "", + "DataSetClassNameFooter": "DataSet", + + // DataTableNX̃wb_Etb^ + // DataTableNX̃wb_Etb^ + "DataTableClassNameHeader": "", + "DataTableClassNameFooter": "DataTable", + + // \bhCRUD + "MethodLabel_Ins": "1_Insert", + "MethodLabel_Sel": "2_Select", + "MethodLabel_Upd": "3_Update", + "MethodLabel_Del": "4_Delete", + "MethodLabel_SelCnt": "5_SelCnt", + + // \bh̃wb_Etb^iÓIj + "MethodNameHeaderS": "S", + "MethodNameFooterS": "", + + // \bh̃wb_Etb^iIj + "MethodNameHeaderD": "D", + "MethodNameFooterD": "", + + // Updatẽp^̃wb_Etb^ + "UpdateParamHeader": "Set_", + "UpdateParamFooter": "_forUPD", + + // Likẽp^̃wb_Etb^ + "LikeParamHeader": "", + "LikeParamFooter": "_Like", + + // SQLt@C̃wb_Etb^ + // @SQLt@ĆADaoNX{\bhƂB + + // f[^ + // ev[g̒u + + // + "RpFileName": "_FileName_", + "RpTimeStamp": "_TimeStamp_", + "RpUserName": "_UserName_", + + "RpTableName": "_TableName_", + "RpColumnName": "_ColumnName_", + + "RpAllColumnList": "_AllColumnList_", + "RpPKColumnList": "_PKColumnList_", + + "CcLoopStart_PKColumn": "ControlComment:LoopStart-PKColumn", + "CcLoopEnd_PKColumn": "ControlComment:LoopEnd-PKColumn", + + "CcLoopStart_ElseColumn": "ControlComment:LoopStart-ElseColumn", + "CcLoopEnd_ElseColumn": "ControlComment:LoopEnd-ElseColumn", + + "CcIsRequired_TimeStamp": "ControlComment:IsRequired-TimeStamp", + + // SQL + "RpXMLEncoding": "_XMLEncoding_", + + "RpAllColumnListSQL": "_AllColumnListSQL_", + "RpPKColumnListSQL": "_PKColumnListSQL_", + + "RpAllColumnListTableAdapterSQL": "_AllColumnListTableAdapterSQL_", + "RpTimeStampColName": "_TimeStampColName_", + + "RpColumnsCondition": "_ColumnsCondition_", + "RpDynColsCondition": "_DynColsCondition_", + "RpDynColsCondition_Like": "_DynColsConditionLike_", + + // "RpInsertColumns": "_InsertColumns_", + "RpDynInsColumns": "_DynInsColumns_", + + "RpInsertParameters": "_InsertParameters_", + "RpDynInsParameters": "_DynInsParameters_", + + // "RpUpdateParameters": "_UpdateParameters_", + "RpDynUpdParameters": "_DynUpdParameters_", + + // Daoit@Cj + "RpDaoClassName": "_DaoClassName_", + + // vpeB vV[W + "CcLoopStart_PPUpdSet": "ControlComment:LoopStart-PPUpdSet", + "CcLoopEnd_PPUpdSet": "ControlComment:LoopEnd-PPUpdSet", + + "CcLoopStart_PPLike": "ControlComment:LoopStart-PPLike", + "CcLoopEnd_PPLike": "ControlComment:LoopEnd-PPLike", + + // \bh + "RpInsertMethodName": "_InsertMethodName_", + "RpDynInsMethodName": "_DynInsMethodName_", + + "RpSelectMethodName": "_SelectMethodName_", + "RpDynSelMethodName": "_DynSelMethodName_", + + "RpUpdateMethodName": "_UpdateMethodName_", + "RpDynUpdMethodName": "_DynUpdMethodName_", + + "RpDeleteMethodName": "_DeleteMethodName_", + "RpDynDelMethodName": "_DynDelMethodName_", + + // g\bh + "RpDynSelCntMethodName": "_DynSelCntMethodName_", + + // EntityNXit@Cj + "RpEntityClassName": "_EntityClassName_", + "RpEntityTypeInfo": "_EntityTypeInfo_", + + // DataSetNXit@Cj + "RpDataSetClassName": "_DataSetClassName_", + "RpDataTableClassName": "_DataTableClassName_", + "RpXSDTypeInfo": "_XSDTypeInfo_", + + // SQLt@C + "RpInsertFileName": "_InsertFileName_", + "RpDynInsFileName": "_DynInsFileName_", + + "RpSelectFileName": "_SelectFileName_", + "RpDynSelFileName": "_DynSelFileName_", + + "RpUpdateFileName": "_UpdateFileName_", + "RpDynUpdFileName": "_DynUpdFileName_", + + "RpDeleteFileName": "_DeleteFileName_", + "RpDynDelFileName": "_DynDelFileName_", + + // g\bhpt@C + "RpDynSelCntFileName": "_DynSelCntFileName_", + + // ASPX + "RpCodebehindLanguage": "_CodebehindLanguage_", + "RpClassTemplateFileExtension": "_ClassTemplateFileExtension_", + + // CODE + "RpCommentOut": "_CommentOut_", + "RpPKFirstColumn": "_PKFirstColumn_", + // GridView Header Column Number + "RpColumnNmbr": "_ColumnNmbr_", + // For Internationalization Test + "DefaultCulture": "ja-JP", + + // Add Data Providers from tool + "RpDBMS": "_DBMS_", + "RpDAP": "_DAP_", + + // Get Document from tool + "LnkHelpDoc_En": "https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/1_User_Guide/en/5_User_Guide(D_Layer_Automatic_Generation)_EN.doc", + "LnkHelpDoc_Ja": "https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/1_User_Guide/ja-JP/5_User_Guide(D_Layer_Automatic_Generation).doc" + } +} \ No newline at end of file From 9e70cc79d2c90f5514a1b784d6aef8482015f263 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 29 Oct 2019 13:56:22 +0900 Subject: [PATCH 03/47] Now, I am fixing #328. --- .../Tools/DaoGen_Tool/DaoGen_ToolCore.csproj | 8 ++++---- .../Frameworks/Tools/DaoGen_Tool/appsettings.json | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj index 2f20add1a..80893f76c 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj @@ -26,10 +26,10 @@ - - - - + + + + diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json index 5251f6418..74dae595a 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/appsettings.json @@ -1,15 +1,15 @@ { - // connectionStrings section - "connectionStrings": { + // appSettings section + "appSettings": { + + // ͍ځij + + // ڑ "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;", "ConnectionString_ODBC": "Dsn=odbc_test1", "ConnectionString_ODP": "User Id=SCOTT;Password=tiger;Data Source=localhost/XE;", "ConnectionString_MCN": "Server=localhost;Database=test;User Id=root;Password=seigi@123", - "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;" - }, - - // appSettings section - "appSettings": { + "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;", // tH_ "InputFilesRoot": "C:\\", From 996a36dc1f56f64fdc71852dd5f83e982da34a14 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 29 Oct 2019 15:25:32 +0900 Subject: [PATCH 04/47] Now, I am fixing #328. --- .../CS/4_Build_Framework_ToolCore.bat | 2 - .../DPQuery_Tool/DPQuery_ToolCore.csproj | 76 ++++ .../Tools/DPQuery_Tool/DPQuery_ToolCore.sln | 22 ++ .../CS/Frameworks/Tools/DPQuery_Tool/Form1.cs | 185 +++++----- .../Frameworks/Tools/DPQuery_Tool/Form3.resx | 336 ------------------ .../Frameworks/Tools/DPQuery_Tool/Literal.cs | 22 +- .../Frameworks/Tools/DPQuery_Tool/Program.cs | 6 + .../Frameworks/Tools/DPQuery_Tool/app.config | 4 +- .../Tools/DPQuery_Tool/appsettings.json | 222 ++++++++++++ .../Frameworks/Tools/DaoGen_Tool/Program.cs | 8 +- .../Frameworks/Tools/DaoGen_Tool/app.config | 18 +- 11 files changed, 459 insertions(+), 442 deletions(-) create mode 100644 root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj create mode 100644 root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.sln create mode 100644 root/programs/CS/Frameworks/Tools/DPQuery_Tool/appsettings.json diff --git a/root/programs/CS/4_Build_Framework_ToolCore.bat b/root/programs/CS/4_Build_Framework_ToolCore.bat index 87df5e692..24ac82eea 100644 --- a/root/programs/CS/4_Build_Framework_ToolCore.bat +++ b/root/programs/CS/4_Build_Framework_ToolCore.bat @@ -15,8 +15,6 @@ set CURRENT_DIR="%~dp0" @rem -------------------------------------------------- call %CURRENT_DIR%z_Common.bat -rem ------------------------------------------------------- -endlocal rem -------------------------------------------------- rem Batch build of DPQuery_Tool. rem -------------------------------------------------- diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj new file mode 100644 index 000000000..703f3e03d --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj @@ -0,0 +1,76 @@ + + + + WinExe + netcoreapp3.0 + true + + + DPQuery_Tool + + + + TRACE;NETCOREAPP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamManagedOdp.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamMySQL.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.DamPstGrS.dll + + + ..\..\Infrastructure\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + + + + + True + True + Resource.resx + + + + + + ResXFileCodeGenerator + Resource.Designer.cs + + + + + + Always + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.sln b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.sln new file mode 100644 index 000000000..8190fe20f --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DPQuery_Tool", "DPQuery_ToolCore.csproj", "{1A31B69C-1DA9-4F0F-AC19-E52929285EB3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1A31B69C-1DA9-4F0F-AC19-E52929285EB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1A31B69C-1DA9-4F0F-AC19-E52929285EB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A31B69C-1DA9-4F0F-AC19-E52929285EB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1A31B69C-1DA9-4F0F-AC19-E52929285EB3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form1.cs b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form1.cs index 856b1c7ed..9883e499d 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form1.cs +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form1.cs @@ -58,6 +58,7 @@ //* 2014/05/12 Rituparna Removed and tags. //* 2015/07/19 Sandeep Improved UI of tools and button controls. //* 2015/10/28 Sandeep Optimized messages in the resource file and implemented code to format it. +//* 2018/10/29 西野 大介 NETCOREAPP対応で、サポートされないDBを「#if」した。 //********************************************************************************** // -------------------- @@ -67,12 +68,15 @@ //using System.Data.OracleClient; // 衝突するのでエイリアスを作成 //using Oracle.DataAccess.Client; // Managedに移行 //using Oracle.ManagedDataAccess.Client; // 衝突するのでエイリアスを作成 -using System.Data.OleDb; using System.Data.Odbc; using Npgsql; using MySql.Data.MySqlClient; +#if NETCOREAPP +#else +using System.Data.OleDb; using IBM.Data.DB2; //using Hitachi.HiRDB; +#endif // -------------------- using System; @@ -183,14 +187,17 @@ public Form1() // 初期設定(DataProvider) this.cmbDataProvider.Items.Add(Literal.DAP_SQL); - this.cmbDataProvider.Items.Add(Literal.DAP_OLE); this.cmbDataProvider.Items.Add(Literal.DAP_ODB); this.cmbDataProvider.Items.Add(Literal.DAP_ORA); this.cmbDataProvider.Items.Add(Literal.DAP_ODP); - this.cmbDataProvider.Items.Add(Literal.DAP_DB2); - //this.cmbDataProvider.Items.Add(Literal.DAP_HiRDB); this.cmbDataProvider.Items.Add(Literal.DAP_MySQL); this.cmbDataProvider.Items.Add(Literal.DAP_PstgrS); +#if NETCOREAPP +#else + this.cmbDataProvider.Items.Add(Literal.DAP_OLE); + this.cmbDataProvider.Items.Add(Literal.DAP_DB2); + //this.cmbDataProvider.Items.Add(Literal.DAP_HiRDB); +#endif this.cmbDataProvider.SelectedIndex = 0; // 初期設定(スロット) @@ -420,10 +427,6 @@ private void btnLoadConfig_Click(object sender, EventArgs e) { this.cmbDataProvider.SelectedIndex = 0; } - else if (str.Substring(len) == Literal.DAP_OLE) - { - this.cmbDataProvider.SelectedIndex = 1; - } else if (str.Substring(len) == Literal.DAP_ODB) { this.cmbDataProvider.SelectedIndex = 2; @@ -436,14 +439,6 @@ private void btnLoadConfig_Click(object sender, EventArgs e) { this.cmbDataProvider.SelectedIndex = 4; } - else if (str.Substring(len) == Literal.DAP_DB2) - { - this.cmbDataProvider.SelectedIndex = 5; - } - //else if (str.Substring(len) == Literal.DAP_HiRDB) - //{ - // this.cmbDataProvider.SelectedIndex = x; - //} else if (str.Substring(len) == Literal.DAP_MySQL) { this.cmbDataProvider.SelectedIndex = 6; @@ -452,6 +447,21 @@ private void btnLoadConfig_Click(object sender, EventArgs e) { this.cmbDataProvider.SelectedIndex = 7; } +#if NETCOREAPP +#else + else if (str.Substring(len) == Literal.DAP_OLE) + { + this.cmbDataProvider.SelectedIndex = 1; + } + else if (str.Substring(len) == Literal.DAP_DB2) + { + this.cmbDataProvider.SelectedIndex = 5; + } + //else if (str.Substring(len) == Literal.DAP_HiRDB) + //{ + // this.cmbDataProvider.SelectedIndex = x; + //} +#endif else { // ありえない @@ -589,27 +599,6 @@ private void cmbDataProvider_SelectedIndexChanged(object sender, EventArgs e) // 状態 ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_SQL); - } - else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_OLE) - { - //OLEDB.NET - this._dam = new DamOLEDB(); - - //接続文字列のサンプルを設定する(空の場合)。 - OleDbConnectionStringBuilder csb = new OleDbConnectionStringBuilder(); - - csb.Provider = "Provider"; - csb.DataSource = "DataSourceName"; - csb.FileName = "FileName"; - - this.txtCnnStr.Text = csb.ConnectionString; - - // 活性 - this.nudNumOfBind.Enabled = true; - - // 状態 - ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_OLE); - } else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_ODB) { @@ -673,45 +662,6 @@ private void cmbDataProvider_SelectedIndexChanged(object sender, EventArgs e) ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_ODP); } - else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_DB2) - { - //DB2.NET - this._dam = new DamDB2(); - - //接続文字列のサンプルを設定する(空の場合)。 - DB2ConnectionStringBuilder csb = new DB2ConnectionStringBuilder(); - - //csb.Server = this._ip + ":50000"; - csb.Database = "SAMPLE"; - csb.UserID = this._uid; - csb.Password = this._pwd; - - this.txtCnnStr.Text = csb.ConnectionString; - - // 状態 - ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_DB2); - - } - //else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_HiRDB) - //{ - // //HiRDBデータ プロバイダ - // this._dam = new DamHiRDB(); - - // //接続文字列のサンプルを設定する(空の場合)。 - // //HiRDBデータ プロバイダは、ConnectionStringBuilderがない。 - // string csb = ""; - // csb += "DataSource=C:\\Windows\\HiRDB.ini;"; - // csb += "UID=" + this._uid + ";"; - // csb += "PWD=" + this._pwd + ";"; - - // this.txtCnnStr.Text = csb; - - // // 活性 - // this.nudNumOfBind.Enabled = true; - - // // 状態 - // ((ToolStripStatusLabel)this.statBar.Items[0]).Text = Literal.STATUS_HRD_CREATED; - //} else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_MySQL) { //MySQL Connector/NET @@ -756,6 +706,69 @@ private void cmbDataProvider_SelectedIndexChanged(object sender, EventArgs e) // 状態 ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_PstgrS); } +#if NETCOREAPP +#else + else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_OLE) + { + //OLEDB.NET + this._dam = new DamOLEDB(); + + //接続文字列のサンプルを設定する(空の場合)。 + OleDbConnectionStringBuilder csb = new OleDbConnectionStringBuilder(); + + csb.Provider = "Provider"; + csb.DataSource = "DataSourceName"; + csb.FileName = "FileName"; + + this.txtCnnStr.Text = csb.ConnectionString; + + // 活性 + this.nudNumOfBind.Enabled = true; + + // 状態 + ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_OLE); + + } + else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_DB2) + { + //DB2.NET + this._dam = new DamDB2(); + + //接続文字列のサンプルを設定する(空の場合)。 + DB2ConnectionStringBuilder csb = new DB2ConnectionStringBuilder(); + + //csb.Server = this._ip + ":50000"; + csb.Database = "SAMPLE"; + csb.UserID = this._uid; + csb.Password = this._pwd; + + this.txtCnnStr.Text = csb.ConnectionString; + + // 状態 + ((ToolStripStatusLabel)this.statBar.Items[0]).Text = string.Format(this.RM_GetString("STATUS_DATA_PROVIDER_SELECTED"), Literal.DAP_DB2); + + } + //else if (this.cmbDataProvider.SelectedItem.ToString() == Literal.DAP_HiRDB) + //{ + // //HiRDBデータ プロバイダ + // this._dam = new DamHiRDB(); + + // //接続文字列のサンプルを設定する(空の場合)。 + // //HiRDBデータ プロバイダは、ConnectionStringBuilderがない。 + // string csb = ""; + // csb += "DataSource=C:\\Windows\\HiRDB.ini;"; + // csb += "UID=" + this._uid + ";"; + // csb += "PWD=" + this._pwd + ";"; + + // this.txtCnnStr.Text = csb; + + // // 活性 + // this.nudNumOfBind.Enabled = true; + + // // 状態 + // ((ToolStripStatusLabel)this.statBar.Items[0]).Text = Literal.STATUS_HRD_CREATED; + //} +#endif else { //ありえない @@ -1366,11 +1379,6 @@ private void btnExecQuery_Click(object sender, EventArgs e) // sqlClientの型情報を推論 this.InferSQLType(dr[2].GetType(), out dbTypeInfo); } - else if (this._dam.GetType() == typeof(DamOLEDB)) - { - // OLEDBの型情報を推論 - this.InferOLEType(dr[2].GetType(), out dbTypeInfo); - } else if (this._dam.GetType() == typeof(DamODBC)) { // ODBCの型情報を推論 @@ -1381,12 +1389,18 @@ private void btnExecQuery_Click(object sender, EventArgs e) // Oracle Clientの型情報を推論 this.InferORAType(dr[2].GetType(), out dbTypeInfo); } - else if (this._dam.GetType() == typeof(DamManagedOdp)) { // ODP.NETの型情報を推論 this.InferODPType(dr[2].GetType(), out dbTypeInfo); } +#if NETCOREAPP +#else + else if (this._dam.GetType() == typeof(DamOLEDB)) + { + // OLEDBの型情報を推論 + this.InferOLEType(dr[2].GetType(), out dbTypeInfo); + } else if (this._dam.GetType() == typeof(DamDB2)) { // DB2.NETの型情報を推論 @@ -1394,6 +1408,7 @@ private void btnExecQuery_Click(object sender, EventArgs e) } // HiRDBデータプロバイダ、MySQL Connector/NET、PostgreSQL Npgsql // については、推論不明(マニュアル無し)。推論非対応。 +#endif // パラメタを設定(型情報・有) ((BaseDam)this._dam).SetParameter(dr[1].ToString(), dr[2], dbTypeInfo); @@ -1856,6 +1871,8 @@ private bool InferSQLType(Type type, out object sqlDbType) #endregion +#if NETCOREAPP +#else #region OLEDB /// @@ -1975,6 +1992,7 @@ private bool InferOLEType(Type type, out object oleDbType) } #endregion +#endif #region ODBC @@ -2303,6 +2321,8 @@ private bool InferODPType(Type type, out object oracleDbType) #endregion +#if NETCOREAPP +#else #region DB2.NET /// @@ -2373,6 +2393,7 @@ private bool InferDB2Type(Type type, out object db2DbType) } #endregion +#endif // HiRDBデータ プロバイダは情報が見当たらず diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form3.resx b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form3.resx index 0972bf986..236c41f1e 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form3.resx +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Form3.resx @@ -225,18 +225,6 @@ 0 - - cmbSTEncoding - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxSqlTemplateEncoding - - - 0 - 280, 213 @@ -261,30 +249,6 @@ 0 - - rbnDTL_VB - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDaoTemplateLanguage - - - 0 - - - rbnDTL_CS - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDaoTemplateLanguage - - - 1 - 21, 155 @@ -309,18 +273,6 @@ 1 - - cmbDTEncoding - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDaoTemplateEncoding - - - 0 - 21, 213 @@ -375,18 +327,6 @@ 3 - - cmbDDEncoding - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDaoDefinitionEncoding - - - 0 - 21, 55 @@ -591,42 +531,6 @@ 0 - - gbxSQLFileEncoding - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxOutput - - - 2 - - - gbxDaoFileEncoding - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxOutput - - - 3 - - - txtSetOutput - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxOutput - - - 4 - 5, 286 @@ -681,42 +585,6 @@ 0 - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 0 - - - gbxDataProviders - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 1 - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 2 - 4, 22 @@ -972,78 +840,6 @@ 4 - - cbxTSIndisp - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 2 - - - txtTimeStampColName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - txtTimeStampUpdMethod - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 5 - 6, 175 @@ -1233,78 +1029,6 @@ 5 - - rbnODB - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 0 - - - rbnOLE - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 1 - - - rbnPstgrs - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 2 - - - rbnMySQL - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 3 - - - rbnDB2 - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 4 - - - rbnODP - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 5 - rbnSQL @@ -1539,66 +1263,6 @@ SQL Server Client - - rbnSQL - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - gbxDataProviders - - - 6 - - - txtPersonalName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - lblFamilyName - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - txtFamilyName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - 6, 83 diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Literal.cs b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Literal.cs index fb5037e40..3da7059fc 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Literal.cs +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Literal.cs @@ -35,6 +35,7 @@ //* 2012/02/09 西野 大介 OLEDB、ODBCのデータプロバイダ対応 //* 2014/02/05 西野 大介 System.Data.OracleClientデータプロバイダ対応 //* 2017/11/29 西野 大介 Resource化したメッセージを削除 +//* 2018/10/29 西野 大介 NETCOREAPP対応で、サポートされないDBを「#if」した。 //********************************************************************************** namespace DPQuery_Tool @@ -75,9 +76,6 @@ public readonly static string[] SLOT /// 選択:SQL Server用 sqlClient public const string DAP_SQL = "SQL Server - sqlClient"; - /// 選択:OLEDB.NET - public const string DAP_OLE = "OLEDB.NET"; - /// 選択:ODBC.NET public const string DAP_ODB = "ODBC.NET"; @@ -87,18 +85,24 @@ public readonly static string[] SLOT /// 選択:Oracle用 ODP.NET public const string DAP_ODP = "Oracle - ODP.NET"; - /// 選択:DB2用 DB2.NET - public const string DAP_DB2 = "DB2 - DB2.NET"; - - ///// 選択:HiRDB用 データ プロバイダ - //public const string DAP_HiRDB = "HiRDB - HiRDBデータ プロバイダ"; - /// 選択:MySQL用 MySQL Connector/NET public const string DAP_MySQL = "MySQL - Connector/NET"; /// 選択:PostgreSQL用 Npgsql public const string DAP_PstgrS = "PostgreSQL - Npgsql"; +#if NETCOREAPP +#else + /// 選択:OLEDB.NET + public const string DAP_OLE = "OLEDB.NET"; + + /// 選択:DB2用 DB2.NET + public const string DAP_DB2 = "DB2 - DB2.NET"; + + ///// 選択:HiRDB用 データ プロバイダ + //public const string DAP_HiRDB = "HiRDB - HiRDBデータ プロバイダ"; +#endif + #endregion #region 実行メソッド diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Program.cs b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Program.cs index f63934542..95a1b19dd 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Program.cs +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/Program.cs @@ -32,6 +32,7 @@ //* Created Resource folder and Resource.ja-JP.resx,Resource.resx files inside the Resource folder. //* Added proper key and values in those files for English and Japanese languages. //* 2014/05/12 Rituparna Removed and tags, added check while reading DefaultCulture from app.config file +//* 2018/10/29 西野 大介 NETCOREAPP対応で、configの初期化 //********************************************************************************** using System; @@ -53,6 +54,11 @@ static class Program [STAThread] static void Main() { +#if NETCOREAPP + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); +#else +#endif try { // Add DefaultCulture key in app.Config file and take the culture value from app.Config file. diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/app.config b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/app.config index 7b63975fd..0424b27c2 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/app.config +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/app.config @@ -71,7 +71,7 @@ - + @@ -125,6 +125,8 @@ + + diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/appsettings.json b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/appsettings.json new file mode 100644 index 000000000..f15dfc248 --- /dev/null +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/appsettings.json @@ -0,0 +1,222 @@ +{ + // appSettings section + "appSettings": { + + // ʕi̎gpp[^ - start + // cw̃ptH[}XOo͋@\onEoff + "FxSqlTraceLog": "on", + // cwSQLLbV@\onEoff + // JtF[ŶƂlāAftHgoffɐݒ + "FxSqlCacheSwitch": "off", + // cwSQL[h̃GR[fBOwishift_jisAutf-8.etcj + "FxSqlEncoding": "utf-8", + // cwSQLCommandTimeoutlw + "FxSqlCommandTimeout": "30", + // ʕi̎gpp[^ - end + + // tH_ + "InputFilesRoot": "C:\\", + "OutputFilesRoot": "C:\\", + + // pҖ + "FamilyName": "", + "PersonalName": "Y", + + // ͍ځiev[gj + + // DaoNX ev[g t@Cigqj + "DaoTemplateFileName": "DaoTemplate", + + // EntityNX ev[g t@Cigqj + "EntityTemplateFileName": "EntityTemplate", + // DataSetNX ev[g t@C + "DataSetTemplateFileName": "DataSetTemplate.xsd", + + // eiX ev[g t@C + "TableAdapterTemplateFileName": "TableAdapter", + "JoinConditionalSearchTemplateFileName": "_Screen_ConditionalSearch.aspx", + "JoinSearchAndUpdateTemplateFileName": "_Screen_SearchAndUpdate.aspx", + "JoinDetailTemplateFileName": "_Screen_Detail.aspx", + + // SQL ev[g t@C + // ÓI + "InsertTemplateFileName": "s1_InsertTemplate.sql", + "SelectTemplateFileName": "s2_SelectTemplate.xml", + "UpdateTemplateFileName": "s3_UpdateTemplate.xml", + "DeleteTemplateFileName": "s4_DeleteTemplate.xml", + + // I + "DynInsTemplateFileName": "d1_DynInsTemplate.xml", + "DynSelTemplateFileName": "d2_DynSelTemplate.xml", + "DynUpdTemplateFileName": "d3_DynUpdTemplate.xml", + "DynDelTemplateFileName": "d4_DynDelTemplate.xml", + + // g\bhp + "DynSelCntTemplateFileName": "d5_DynSelCntTemplate.xml", + + // o͍ + // DaoNX t@C̃wb_Etb^ + // DaoNX̃wb_Etb^ + "DaoClassNameHeader": "Dao", + "DaoClassNameFooter": "", + + // EntityNX t@C̃wb_Etb^ + // EntityNX̃wb_Etb^ + "EntityClassNameHeader": "", + "EntityClassNameFooter": "Entity", + + // DataSetNX t@C̃wb_Etb^ + // DataSetNX̃wb_Etb^ + "DataSetClassNameHeader": "", + "DataSetClassNameFooter": "DataSet", + + // DataTableNX̃wb_Etb^ + // DataTableNX̃wb_Etb^ + "DataTableClassNameHeader": "", + "DataTableClassNameFooter": "DataTable", + + // \bhCRUD + "MethodLabel_Ins": "1_Insert", + "MethodLabel_Sel": "2_Select", + "MethodLabel_Upd": "3_Update", + "MethodLabel_Del": "4_Delete", + "MethodLabel_SelCnt": "5_SelCnt", + + // \bh̃wb_Etb^iÓIj + "MethodNameHeaderS": "S", + "MethodNameFooterS": "", + + // \bh̃wb_Etb^iIj + "MethodNameHeaderD": "D", + "MethodNameFooterD": "", + + // Updatẽp^̃wb_Etb^ + "UpdateParamHeader": "Set_", + "UpdateParamFooter": "_forUPD", + + // Likẽp^̃wb_Etb^ + "LikeParamHeader": "", + "LikeParamFooter": "_Like", + + // SQLt@C̃wb_Etb^ + // @SQLt@ĆADaoNX{\bhƂB + + // f[^ + // ev[g̒u + + // + "RpFileName": "_FileName_", + "RpTimeStamp": "_TimeStamp_", + "RpUserName": "_UserName_", + + "RpTableName": "_TableName_", + "RpColumnName": "_ColumnName_", + + "RpJoinTableName": "_JoinTableName_", + "RpJoinColumnName": "_JoinColumnName_", + "RpJoinTextboxColumnName": "_JoinTextboxColumnName_", + + "RpAllColumnList": "_AllColumnList_", + "RpPKColumnList": "_PKColumnList_", + + "CcLoopStart_PKColumn": "ControlComment:LoopStart-PKColumn", + "CcLoopEnd_PKColumn": "ControlComment:LoopEnd-PKColumn", + + "CcLoopStart_JoinTables": "ControlComment:LoopStart-JoinTables", + "CcLoopEnd_JoinTables": "ControlComment:LoopEnd-JoinTables", + + "CcLoopStart_ElseColumn": "ControlComment:LoopStart-ElseColumn", + "CcLoopEnd_ElseColumn": "ControlComment:LoopEnd-ElseColumn", + + "CcIsRequired_TimeStamp": "ControlComment:IsRequired-TimeStamp", + + // SQL + "RpXMLEncoding": "_XMLEncoding_", + + "RpAllColumnListSQL": "_AllColumnListSQL_", + "RpPKColumnListSQL": "_PKColumnListSQL_", + + "RpAllColumnListTableAdapterSQL": "_AllColumnListTableAdapterSQL_", + "RpTimeStampColName": "_TimeStampColName_", + + "RpColumnsCondition": "_ColumnsCondition_", + "RpDynColsCondition": "_DynColsCondition_", + "RpDynColsCondition_Like": "_DynColsConditionLike_", + + // "RpInsertColumns": "_InsertColumns_", + "RpDynInsColumns": "_DynInsColumns_", + + "RpInsertParameters": "_InsertParameters_", + "RpDynInsParameters": "_DynInsParameters_", + + // "RpUpdateParameters": "_UpdateParameters_", + "RpDynUpdParameters": "_DynUpdParameters_", + + // Daoit@Cj + "RpDaoClassName": "_DaoClassName_", + + // vpeB vV[W + "CcLoopStart_PPUpdSet": "ControlComment:LoopStart-PPUpdSet", + "CcLoopEnd_PPUpdSet": "ControlComment:LoopEnd-PPUpdSet", + + "CcLoopStart_PPLike": "ControlComment:LoopStart-PPLike", + "CcLoopEnd_PPLike": "ControlComment:LoopEnd-PPLike", + + // \bh + "RpInsertMethodName": "_InsertMethodName_", + "RpDynInsMethodName": "_DynInsMethodName_", + + "RpSelectMethodName": "_SelectMethodName_", + "RpDynSelMethodName": "_DynSelMethodName_", + + "RpUpdateMethodName": "_UpdateMethodName_", + "RpDynUpdMethodName": "_DynUpdMethodName_", + + "RpDeleteMethodName": "_DeleteMethodName_", + "RpDynDelMethodName": "_DynDelMethodName_", + + // g\bh + "RpDynSelCntMethodName": "_DynSelCntMethodName_", + + // EntityNXit@Cj + "RpEntityClassName": "_EntityClassName_", + "RpEntityTypeInfo": "_EntityTypeInfo_", + + // DataSetNXit@Cj + "RpDataSetClassName": "_DataSetClassName_", + "RpDataTableClassName": "_DataTableClassName_", + "RpXSDTypeInfo": "_XSDTypeInfo_", + + // SQLt@C + "RpInsertFileName": "_InsertFileName_", + "RpDynInsFileName": "_DynInsFileName_", + + "RpSelectFileName": "_SelectFileName_", + "RpDynSelFileName": "_DynSelFileName_", + + "RpUpdateFileName": "_UpdateFileName_", + "RpDynUpdFileName": "_DynUpdFileName_", + + "RpDeleteFileName": "_DeleteFileName_", + "RpDynDelFileName": "_DynDelFileName_", + + // g\bhpt@C + "RpDynSelCntFileName": "_DynSelCntFileName_", + + // ASPX + "RpCodebehindLanguage": "_CodebehindLanguage_", + "RpClassTemplateFileExtension": "_ClassTemplateFileExtension_", + + // CODE + "RpCommentOut": "_CommentOut_", + "RpPKFirstColumn": "_PKFirstColumn_", + // GridView Header Column Number + "RpColumnNmbr": "_ColumnNmbr_", + // For Internationalization Test + "DefaultCulture": "ja-JP", + + // Add Data Providers from tool + "RpDBMS": "_DBMS_", + "RpDAP": "_DAP_" + } +} \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs index 0d9f57c98..31ef75569 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/Program.cs @@ -28,9 +28,11 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2008/xx/xx 西野 大介 新規作成 -//* 2014/04/30 Santosh san Internationalization: Added Method to get the strings from the resource files based on the keys values passed. -//* and and replaced this method wherever hard coded values. -//* Also Added code to get the Culture information from app.config file. +//* 2014/04/30 Santosh san Internationalization: Added Method to get the strings +//* from the resource files based on the keys values passed. +//* and replaced to this method wherever hard coded values. +//* Also Added code to get the Culture information from app.config file. +//* 2018/10/29 西野 大介 NETCOREAPP対応で、configの初期化 //********************************************************************************** using System; diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config index 85d9f462c..d171b32a9 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/app.config @@ -38,7 +38,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -115,7 +115,7 @@ - + @@ -135,7 +135,7 @@ - + @@ -148,7 +148,7 @@ - + @@ -186,14 +186,14 @@ - + - + @@ -211,7 +211,7 @@ - + From cd3e1ae2edf09b1d740b6f01a08757fce23d1bb4 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 29 Oct 2019 16:57:42 +0900 Subject: [PATCH 05/47] Now, I am fixing #328. --- .../CS/4_Build_Framework_ToolCore.bat | 16 ------- .../Business/Business/MyFcBaseLogic.cs | 2 +- .../Business/Business_netcore20.csproj | 4 +- .../Business/Business_netcore30.csproj | 4 +- .../Business.RichClient_netcore30.csproj | 15 ++++++- .../Business/Util/MyCmnFunction.cs | 6 +-- .../CustomControl.RichClient_netcore30.csproj | 23 +++++++--- .../Framework.RichClient_netcore30.csproj | 4 +- .../Tests/EncAndDecUtilCUI/Program.cs | 42 +++++++++---------- .../core20/EncAndDecUtilCUICore.csproj | 2 +- .../core30/EncAndDecUtilCUICore.csproj | 2 +- .../Tests/TestCode/core20/TestCodeCore.csproj | 2 +- .../Tests/TestCode/core30/TestCodeCore.csproj | 2 +- .../DPQuery_Tool/DPQuery_ToolCore.csproj | 1 + .../Tools/DaoGen_Tool/DaoGen_ToolCore.csproj | 1 + .../DeployZipPackWithHTTP.csproj | 2 +- 16 files changed, 70 insertions(+), 58 deletions(-) diff --git a/root/programs/CS/4_Build_Framework_ToolCore.bat b/root/programs/CS/4_Build_Framework_ToolCore.bat index 24ac82eea..a33ae808e 100644 --- a/root/programs/CS/4_Build_Framework_ToolCore.bat +++ b/root/programs/CS/4_Build_Framework_ToolCore.bat @@ -31,21 +31,5 @@ call dotnet msbuild %COMMANDLINE% "Frameworks\Tools\DaoGen_Tool\DaoGen_ToolCore. pause -rem -------------------------------------------------- -rem Batch build of Deploy ZipPack With HTTP. -rem -------------------------------------------------- -call dotnet restore "Frameworks\Tools\DeployZipPackWithHTTP\DeployZipPackWithHTTP_Core.sln" -call dotnet msbuild %COMMANDLINE% "Frameworks\Tools\DeployZipPackWithHTTP\DeployZipPackWithHTTP_Core.sln" - -pause - -rem -------------------------------------------------- -rem Batch build of Workflow. -rem -------------------------------------------------- -call dotnet restore "Frameworks\Tools\Workflow_Tool\Workflow_ToolCore.sln" -call dotnet msbuild %COMMANDLINE% "Frameworks\Tools\Workflow_Tool\Workflow_ToolCore.sln" - -pause - rem ------------------------------------------------------- endlocal diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business/MyFcBaseLogic.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Business/MyFcBaseLogic.cs index 984dab0c4..5360b296c 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business/MyFcBaseLogic.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business/MyFcBaseLogic.cs @@ -175,7 +175,7 @@ protected override void UOC_ConnectionOpen( // 接続文字列をロード connstring = GetConfigParameter.GetConnectionString("ConnectionString_SQL"); } -#if NETCORE +#if NETCOREAPP #else else if (parameterValue.ActionType.Split('%')[0] == "OLE") { diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj index dc9121b5e..37ffca947 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj @@ -8,7 +8,7 @@ - TRACE;DEBUG;NETCORE + TRACE;DEBUG;NETCOREAPP ..\Build_netcore20\ ..\Build_netcore20\netcoreapp2.0\OpenTouryo.Business.xml portable @@ -17,7 +17,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP ..\Build_netcore20r\netstandard2.0\OpenTouryo.Business.xml ..\Build_netcore20r\ diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj index 0713e5a88..923f12de4 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj @@ -8,7 +8,7 @@ - TRACE;DEBUG;NETCORE + TRACE;DEBUG;NETCOREAPP ..\Build_netcore30\ ..\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.xml portable @@ -17,7 +17,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP ..\Build_netcore30r\netcoreapp3.0\OpenTouryo.Business.xml ..\Build_netcore30r\ diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj index a5e6e8724..7458cb7d2 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_netcore30.csproj @@ -5,10 +5,23 @@ netcoreapp3.0 true true + OpenTouryo.Business.RichClient + Touryo.Infrastructure.Business.RichClient TRACE;NETCOREAPP + ..\..\Build_netcore30\ + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.RichClient.xml + portable + true + 1701;1702;NU1701 + + + + TRACE;NETCOREAPP + ..\..\Build_netcore30r\netcoreapp3.0\OpenTouryo.Business.RichClient.xml + ..\..\Build_netcore30r\ @@ -17,7 +30,7 @@ - ..\..\Build_netcore30\netcoreapp3.0\Framework.RichClient.dll + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Util/MyCmnFunction.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Util/MyCmnFunction.cs index e2300841b..ccde4c07e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Util/MyCmnFunction.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Util/MyCmnFunction.cs @@ -49,7 +49,7 @@ using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Util; -#if NETCORE +#if NETCOREAPP using Touryo.Infrastructure.Framework.StdMigration; using Microsoft.AspNetCore.Http; #else @@ -92,7 +92,7 @@ public static long CalculateSessionSize() long size = 0; // SessionのオブジェクトをBinarySerializeしてサイズを取得。 -#if NETCORE +#if NETCOREAPP foreach (string key in MyHttpContext.Current.Session.Keys) { // 当該キーのオブジェクト・サイズを足しこむ。 @@ -115,7 +115,7 @@ public static long CalculateSessionSize() #region コントロール取得&イベントハンドラ設定 -#if NETCORE +#if NETCOREAPP #else /// コントロール取得&イベントハンドラ設定(下位互換) /// コントロール diff --git a/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj index 3bdfb31a8..3a4f64b12 100644 --- a/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/CustomControl/RichClient/CustomControl.RichClient_netcore30.csproj @@ -5,23 +5,32 @@ netcoreapp3.0 true true + OpenTouryo.CustomControl.RichClient + Touryo.Infrastructure.CustomControl.RichClient TRACE;NETCOREAPP + ..\..\Build_netcore30\ + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.CustomControl.RichClient.xml + portable + true + 1701;1702;NU1701 - - - + + TRACE;NETCOREAPP + ..\..\Build_netcore30r\netcoreapp3.0\OpenTouryo.CustomControl.RichClient.xml + ..\..\Build_netcore30r\ + - + - ..\..\Build_netcore30\netcoreapp3.0\Framework.RichClient.dll + ..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll ..\..\Build_netstd21\netstandard2.1\OpenTouryo.Framework.dll @@ -31,4 +40,8 @@ + + + + \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj index dbd3f6490..0c7244514 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Framework.RichClient_netcore30.csproj @@ -7,8 +7,8 @@ true - Framework.RichClient - Framework.RichClient + Touryo.Infrastructure.Framework.RichClient + OpenTouryo.Framework.RichClient diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs index 29930387b..a35a612c9 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs @@ -133,7 +133,7 @@ private static void Hash() MyDebug.OutputDebugAndConsole("HashAlgorithm.SHA512_M", GetHash.GetHashString(data, EnumHashAlgorithm.SHA512_M)); #endregion -#if NETCORE +#if NETCOREAPP #else #region CNG MyDebug.OutputDebugAndConsole("HashAlgorithm.MD5_CNG", GetHash.GetHashString(data, EnumHashAlgorithm.MD5_CNG)); @@ -283,7 +283,7 @@ private static void PublicKeyCryptography() MyDebug.InspectPublicX509Key("RSA", publicX509Key); #endregion -#if NETCORE || NET47 +#if NETCOREAPP || NET47 #region DSA // https://github.com/dotnet/corefx/issues/18733#issuecomment-296723615 @@ -338,11 +338,11 @@ private static void PublicKeyCryptography() DigitalSignXML dsXML = null; // ECDsa -#if NETCORE || NET47 +#if NETCOREAPP || NET47 DigitalSignECDsaX509 dsECDsaX509 = null; DigitalSignECDsaCng dsECDsaCng = null; #endif -#if NETCORE +#if NETCOREAPP DigitalSignECDsaOpenSsl dsECDsaOpenSsl = null; #endif @@ -367,7 +367,7 @@ private static void PublicKeyCryptography() dsXML = new DigitalSignXML(EnumDigitalSignAlgorithm.RsaCSP_SHA256); sign = dsXML.Sign(data); -#if !NETCORE +#if !NETCOREAPP // NETCOREでは、XML鍵のExportが動かない。 dsXML = new DigitalSignXML(dsXML.PublicKey, EnumDigitalSignAlgorithm.RsaCSP_SHA256); #endif @@ -392,7 +392,7 @@ private static void PublicKeyCryptography() dsXML = new DigitalSignXML(EnumDigitalSignAlgorithm.DsaCSP_SHA1); sign = dsXML.SignByFormatter(data); -#if !NETCORE +#if !NETCOREAPP // NETCOREでは、XML鍵のExportが動かない。 dsXML = new DigitalSignXML(dsXML.PublicKey, EnumDigitalSignAlgorithm.DsaCSP_SHA1); #endif @@ -402,7 +402,7 @@ private static void PublicKeyCryptography() #region ECDsa #region 256 -#if NETCORE || NET47 +#if NETCOREAPP || NET47 // X509 dsECDsaX509 = new DigitalSignECDsaX509(Program.PrivateECDsaX509_256Path, Program.PfxPassword, HashAlgorithmName.SHA256); sign = dsECDsaX509.Sign(data); @@ -422,7 +422,7 @@ private static void PublicKeyCryptography() #endregion #region 512 -#if NETCORE || NET47 +#if NETCOREAPP || NET47 // X509 dsECDsaX509 = new DigitalSignECDsaX509(Program.PrivateECDsaX509_256Path, Program.PfxPassword, HashAlgorithmName.SHA512); sign = dsECDsaX509.Sign(data); @@ -444,7 +444,7 @@ private static void PublicKeyCryptography() } else //if (os.Platform == PlatformID.Unix) { -#if NETCORE +#if NETCOREAPP #region RSA // X509 dsX509 = new DigitalSignX509(Program.PrivateRsaX509Path, Program.PfxPassword, "SHA256"); @@ -563,7 +563,7 @@ private static void MyJwt() byte[] key = null; string jwk = ""; RsaPublicKeyConverter rpkc = null; -#if NETCORE || NET47 +#if NETCOREAPP || NET47 EccPublicKeyConverter epkc = null; #endif #endregion @@ -581,7 +581,7 @@ private static void MyJwt() JWS_RS512_X509 jWS_RS512_X509 = null; JWS_RS512_Param jWS_RS512_Param = null; -#if NETCORE || NET47 +#if NETCOREAPP || NET47 // ES256 JWS_ES256_X509 jWS_ES256_X509 = null; JWS_ES256_Param jWS_ES256_Param = null; @@ -654,7 +654,7 @@ private static void MyJwt() jWS_RS256_Param = new JWS_RS256_Param(rpkc.JwkToParam(jwk)); MyDebug.OutputDebugAndConsole("JWS_RS256_Param.Verify", jWS_RS256_Param.Verify(token).ToString()); #endregion -#if NETCORE +#if NETCOREAPP #else #region 384 // 署名(XML) @@ -700,7 +700,7 @@ private static void MyJwt() // DSA -#if NETCORE || NET47 +#if NETCOREAPP || NET47 #region ECDsa(ES) #region 256 @@ -733,7 +733,7 @@ private static void MyJwt() // ★ xLibTest Program.VerifyResultJwt("JwsAlgorithm.xLibTest", token, jWS_ES256_X509.DigitalSignECDsaX509.AsymmetricAlgorithm, JwsAlgorithm.ES256); #endregion -#if NETCORE +#if NETCOREAPP #else #region 384 // 署名(X509) @@ -810,7 +810,7 @@ private static void MyJwt() } else //if (os.Platform == PlatformID.Unix) { -#if NETCORE +#if NETCOREAPP #region RSA(RS256) // 署名(X509) jWS_RS256_X509 = new JWS_RS256_X509(Program.PrivateRsaX509Path, Program.PfxPassword, x509KSF); @@ -951,7 +951,7 @@ private static void JoseJwt() CngKey privateKeyOfCng = null; RsaPublicKeyConverter rpkc = null; -#if NETCORE || NET47 +#if NETCOREAPP || NET47 EccPublicKeyConverter epkc = null; #endif #endregion @@ -990,7 +990,7 @@ private static void JoseJwt() token = ""; -#if NETCORE +#if NETCOREAPP rsa = (RSA)privateX509Key.PrivateKey; #else // .net frameworkでは、何故かコレが必要。 @@ -1021,7 +1021,7 @@ private static void JoseJwt() } else //if (os.Platform == PlatformID.Unix) { -#if NETCORE +#if NETCOREAPP ECParameters eCParameters = new ECParameters(); epkc = new EccPublicKeyConverter(JWS_ECDSA.ES._256); @@ -1044,13 +1044,13 @@ private static void JoseJwt() #endif } -#if NETCORE || NET47 +#if NETCOREAPP || NET47 privateX509Key = new X509Certificate2(Program.PrivateECDsaX509_256Path, Program.PfxPassword); publicX509Key = new X509Certificate2(Program.PublicECDsaX509_256Path, ""); try { -#if NETCORE +#if NETCOREAPP if (os.Platform == PlatformID.Win32NT) { } @@ -1187,7 +1187,7 @@ private static void JoseJwt() privateX509Key = new X509Certificate2(Program.PrivateRsaX509Path, Program.PfxPassword, x509KSF); publicX509Key = new X509Certificate2(Program.PublicRsaX509Path, "", x509KSF); -#if NETCORE +#if NETCOREAPP rsa = (RSA)privateX509Key.PrivateKey; #else // .net frameworkでは、何故かコレが必要。 diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj index 3f4fd8875..603858c57 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj @@ -7,7 +7,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj index 26bba1f38..8dd6a3c06 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj @@ -7,7 +7,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP diff --git a/root/programs/CS/Frameworks/Tests/TestCode/core20/TestCodeCore.csproj b/root/programs/CS/Frameworks/Tests/TestCode/core20/TestCodeCore.csproj index 120cdcb09..b8b86d79d 100644 --- a/root/programs/CS/Frameworks/Tests/TestCode/core20/TestCodeCore.csproj +++ b/root/programs/CS/Frameworks/Tests/TestCode/core20/TestCodeCore.csproj @@ -7,7 +7,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP diff --git a/root/programs/CS/Frameworks/Tests/TestCode/core30/TestCodeCore.csproj b/root/programs/CS/Frameworks/Tests/TestCode/core30/TestCodeCore.csproj index 0b7e13a89..08cd91ec3 100644 --- a/root/programs/CS/Frameworks/Tests/TestCode/core30/TestCodeCore.csproj +++ b/root/programs/CS/Frameworks/Tests/TestCode/core30/TestCodeCore.csproj @@ -7,7 +7,7 @@ - TRACE;NETCORE + TRACE;NETCOREAPP diff --git a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj index 703f3e03d..69a669a38 100644 --- a/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj +++ b/root/programs/CS/Frameworks/Tools/DPQuery_Tool/DPQuery_ToolCore.csproj @@ -7,6 +7,7 @@ DPQuery_Tool + OpenTouryo.DPQuery_Tool diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj index 80893f76c..86b1c6963 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_ToolCore.csproj @@ -7,6 +7,7 @@ DaoGen_Tool + OpenTouryo.DaoGen_Tool diff --git a/root/programs/CS/Frameworks/Tools/DeployZipPackWithHTTP/DeployZipPackWithHTTP.csproj b/root/programs/CS/Frameworks/Tools/DeployZipPackWithHTTP/DeployZipPackWithHTTP.csproj index e769778a4..4192c8725 100644 --- a/root/programs/CS/Frameworks/Tools/DeployZipPackWithHTTP/DeployZipPackWithHTTP.csproj +++ b/root/programs/CS/Frameworks/Tools/DeployZipPackWithHTTP/DeployZipPackWithHTTP.csproj @@ -82,11 +82,11 @@ False ..\..\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll - False ..\..\Infrastructure\Build\OpenTouryo.Public.dll + From 06b494a09c88168431c53369a58f245b16015fd4 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Wed, 30 Oct 2019 16:36:32 +0900 Subject: [PATCH 06/47] Now, I am fixing #328. Added 2CS_sample to Samples4NetCore folder. --- .../2CSClientWPF_sample.csproj | 140 ++ .../2CSClientWPF_sample.sln | 22 + .../2CS_sample/2CSClientWPF_sample/App.xaml | 8 + .../2CSClientWPF_sample/App.xaml.cs | 33 + .../2CSClientWPF_sample/Business/LayerB.cs | 848 ++++++++ .../Common/TestParameterValue.cs | 60 + .../Common/TestReturnValue.cs | 41 + .../2CSClientWPF_sample/Dao/DaoShippers.cs | 406 ++++ .../2CSClientWPF_sample/Dao/LayerD.cs | 518 +++++ .../2CSClientWPF_sample/MSGDefinition.xml | 23 + .../Properties/AssemblyInfo.cs | 72 + .../2CSClientWPF_sample/SPDefinition.xml | 15 + .../2CSClientWPF_sample/SampleLogConf2CS.xml | 133 ++ .../2CSClientWPF_sample/Window1.xaml | 50 + .../2CSClientWPF_sample/Window1.xaml.cs | 642 ++++++ .../2CS_sample/2CSClientWPF_sample/app.config | 68 + .../2CSClientWin_sample.csproj | 144 ++ .../2CSClientWin_sample.sln | 35 + .../2CSClientWin_sample/Business/LayerB.cs | 847 ++++++++ .../Common/TestParameterValue.cs | 59 + .../Common/TestReturnValue.cs | 41 + .../2CSClientWin_sample/Dao/DaoShippers.cs | 406 ++++ .../2CSClientWin_sample/Dao/LayerD.cs | 517 +++++ .../2CSClientWin_sample/Form1.Designer.cs | 425 ++++ .../2CS_sample/2CSClientWin_sample/Form1.cs | 648 ++++++ .../2CS_sample/2CSClientWin_sample/Form1.resx | 1194 +++++++++++ .../2CSClientWin_sample/Login.Designer.cs | 81 + .../2CS_sample/2CSClientWin_sample/Login.cs | 53 + .../2CS_sample/2CSClientWin_sample/Login.resx | 120 ++ .../2CSClientWin_sample/MSGDefinition.xml | 23 + .../2CS_sample/2CSClientWin_sample/Program.cs | 115 ++ .../Properties/AssemblyInfo.cs | 51 + .../2CSClientWin_sample/SPDefinition.xml | 15 + .../2CSClientWin_sample/SampleLogConf2CS.xml | 133 ++ .../2CSClientWin_sample/Splash.Designer.cs | 60 + .../2CS_sample/2CSClientWin_sample/Splash.cs | 188 ++ .../2CSClientWin_sample/Splash.resx | 120 ++ .../2CS_sample/2CSClientWin_sample/app.config | 83 + .../AsyncEvent_sample/AsyncEvent_sample.sln | 28 + .../2CS_sample/AsyncEvent_sample/Readme.txt | 5 + .../WindowsFormsApplication/Form1.Designer.cs | 164 ++ .../WindowsFormsApplication/Form1.cs | 290 +++ .../WindowsFormsApplication/Form1.resx | 120 ++ .../WindowsFormsApplication/Program.cs | 38 + .../Properties/AssemblyInfo.cs | 54 + .../WindowsFormsApplication.csproj | 90 + .../AsyncEvent_sample/WpfApplication/App.xaml | 8 + .../WpfApplication/App.xaml.cs | 30 + .../WpfApplication/Properties/AssemblyInfo.cs | 72 + .../WpfApplication/Window1.xaml | 16 + .../WpfApplication/Window1.xaml.cs | 302 +++ .../WpfApplication/WpfApplication.csproj | 109 + .../AsyncEvent_sample/test-winx2&wpfx2.bat | 5 + .../Legacy/2CS_sample/CustCtrl_sample/Bean.cs | 37 + .../CustCtrl_sample/CustCtrl_sample.csproj | 88 + .../CustCtrl_sample/CustCtrl_sample.sln | 22 + .../CustCtrl_sample/Form1.Designer.cs | 1792 +++++++++++++++++ .../2CS_sample/CustCtrl_sample/Form1.cs | 666 ++++++ .../2CS_sample/CustCtrl_sample/Form1.resx | 120 ++ .../2CS_sample/CustCtrl_sample/Program.cs | 38 + .../Properties/AssemblyInfo.cs | 54 + .../2CS_sample/CustCtrl_sample/Readme.txt | 217 ++ .../Business/LayerB_BatUpd.cs | 169 ++ .../Business/LayerB_Dynamic.cs | 206 ++ .../Business/LayerB_Static.cs | 233 +++ .../Common/TestParameterValue.cs | 114 ++ .../Common/TestReturnValue.cs | 58 + .../Dao/DaoCategories.cs | 450 +++++ .../Dao/DaoCategories_D1_Insert.xml | 27 + .../Dao/DaoCategories_D2_Select.xml | 23 + .../Dao/DaoCategories_D3_Update.xml | 21 + .../Dao/DaoCategories_D4_Delete.xml | 14 + .../Dao/DaoCategories_D5_SelCnt.xml | 20 + .../Dao/DaoCategories_S1_Insert.sql | 17 + .../Dao/DaoCategories_S2_Select.xml | 16 + .../Dao/DaoCategories_S3_Update.xml | 16 + .../Dao/DaoCategories_S4_Delete.xml | 11 + .../GenDaoAndBatUpd_sample/Dao/DaoProducts.cs | 714 +++++++ .../Dao/DaoProducts_D1_Insert.xml | 39 + .../Dao/DaoProducts_D2_Select.xml | 41 + .../Dao/DaoProducts_D3_Update.xml | 33 + .../Dao/DaoProducts_D4_Delete.xml | 20 + .../Dao/DaoProducts_D5_SelCnt.xml | 32 + .../Dao/DaoProducts_S1_Insert.sql | 27 + .../Dao/DaoProducts_S2_Select.xml | 22 + .../Dao/DaoProducts_S3_Update.xml | 22 + .../Dao/DaoProducts_S4_Delete.xml | 11 + .../Dao/DaoSuppliers.cs | 802 ++++++++ .../Dao/DaoSuppliers_D1_Insert.xml | 43 + .../Dao/DaoSuppliers_D2_Select.xml | 47 + .../Dao/DaoSuppliers_D3_Update.xml | 37 + .../Dao/DaoSuppliers_D4_Delete.xml | 22 + .../Dao/DaoSuppliers_D5_SelCnt.xml | 36 + .../Dao/DaoSuppliers_S1_Insert.sql | 31 + .../Dao/DaoSuppliers_S2_Select.xml | 24 + .../Dao/DaoSuppliers_S3_Update.xml | 24 + .../Dao/DaoSuppliers_S4_Delete.xml | 11 + .../GenDaoAndBatUpd_sample/Diagram.bmp | Bin 0 -> 377414 bytes .../GenDaoAndBatUpd_sample/Form1.Designer.cs | 883 ++++++++ .../GenDaoAndBatUpd_sample/Form1.cs | 821 ++++++++ .../GenDaoAndBatUpd_sample/Form1.resx | 120 ++ .../GenDaoAndBatUpd_sample.csproj | 207 ++ .../GenDaoAndBatUpd_sample.sln | 25 + .../GenDaoAndBatUpd_sample/MSGDefinition.xml | 23 + .../GenDaoAndBatUpd_sample/Program.cs | 38 + .../Properties/AssemblyInfo.cs | 51 + .../Properties/Resources.Designer.cs | 73 + .../Properties/Resources.resx | 124 ++ .../GenDaoAndBatUpd_sample/Readme.txt | 1 + .../GenDaoAndBatUpd_sample/SPDefinition.xml | 15 + .../SampleLogConf2CS.xml | 133 ++ .../GenDaoAndBatUpd_sample/app.config | 49 + .../TimeStamp_sample/Dao/Daots_test_table1.cs | 406 ++++ .../Dao/Daots_test_table1_D1_Insert.xml | 25 + .../Dao/Daots_test_table1_D2_Select.xml | 20 + .../Dao/Daots_test_table1_D3_Update.xml | 19 + .../Dao/Daots_test_table1_D4_Delete.xml | 13 + .../Dao/Daots_test_table1_D5_SelCnt.xml | 18 + .../Dao/Daots_test_table1_S1_Insert.sql | 13 + .../Dao/Daots_test_table1_S2_Select.xml | 16 + .../Dao/Daots_test_table1_S3_Update.xml | 16 + .../Dao/Daots_test_table1_S4_Delete.xml | 12 + .../TimeStamp_sample/Dao/Daots_test_table2.cs | 406 ++++ .../Dao/Daots_test_table2_D1_Insert.xml | 25 + .../Dao/Daots_test_table2_D2_Select.xml | 20 + .../Dao/Daots_test_table2_D3_Update.xml | 19 + .../Dao/Daots_test_table2_D4_Delete.xml | 13 + .../Dao/Daots_test_table2_D5_SelCnt.xml | 18 + .../Dao/Daots_test_table2_S1_Insert.sql | 13 + .../Dao/Daots_test_table2_S2_Select.xml | 16 + .../Dao/Daots_test_table2_S3_Update.xml | 16 + .../Dao/Daots_test_table2_S4_Delete.xml | 12 + .../TimeStamp_sample/Dao/Daots_test_table3.cs | 406 ++++ .../Dao/Daots_test_table3_D1_Insert.xml | 25 + .../Dao/Daots_test_table3_D2_Select.xml | 20 + .../Dao/Daots_test_table3_D3_Update.xml | 19 + .../Dao/Daots_test_table3_D4_Delete.xml | 13 + .../Dao/Daots_test_table3_D5_SelCnt.xml | 18 + .../Dao/Daots_test_table3_S1_Insert.sql | 13 + .../Dao/Daots_test_table3_S2_Select.xml | 16 + .../Dao/Daots_test_table3_S3_Update.xml | 16 + .../Dao/Daots_test_table3_S4_Delete.xml | 12 + .../TimeStamp_sample/Dao/Daots_test_tableA.cs | 406 ++++ .../Dao/Daots_test_tableA_D1_Insert.xml | 25 + .../Dao/Daots_test_tableA_D2_Select.xml | 20 + .../Dao/Daots_test_tableA_D3_Update.xml | 19 + .../Dao/Daots_test_tableA_D4_Delete.xml | 13 + .../Dao/Daots_test_tableA_D5_SelCnt.xml | 18 + .../Dao/Daots_test_tableA_S1_Insert.sql | 12 + .../Dao/Daots_test_tableA_S2_Select.xml | 16 + .../Dao/Daots_test_tableA_S3_Update.xml | 16 + .../Dao/Daots_test_tableA_S4_Delete.xml | 12 + .../TimeStamp_sample/Dao/Daots_test_tableB.cs | 406 ++++ .../Dao/Daots_test_tableB_D1_Insert.xml | 25 + .../Dao/Daots_test_tableB_D2_Select.xml | 20 + .../Dao/Daots_test_tableB_D3_Update.xml | 19 + .../Dao/Daots_test_tableB_D4_Delete.xml | 13 + .../Dao/Daots_test_tableB_D5_SelCnt.xml | 18 + .../Dao/Daots_test_tableB_S1_Insert.sql | 12 + .../Dao/Daots_test_tableB_S2_Select.xml | 16 + .../Dao/Daots_test_tableB_S3_Update.xml | 16 + .../Dao/Daots_test_tableB_S4_Delete.xml | 12 + .../TimeStamp_sample/Dao/Daots_test_tableC.cs | 406 ++++ .../Dao/Daots_test_tableC_D1_Insert.xml | 25 + .../Dao/Daots_test_tableC_D2_Select.xml | 20 + .../Dao/Daots_test_tableC_D3_Update.xml | 19 + .../Dao/Daots_test_tableC_D4_Delete.xml | 13 + .../Dao/Daots_test_tableC_D5_SelCnt.xml | 18 + .../Dao/Daots_test_tableC_S1_Insert.sql | 12 + .../Dao/Daots_test_tableC_S2_Select.xml | 16 + .../Dao/Daots_test_tableC_S3_Update.xml | 16 + .../Dao/Daots_test_tableC_S4_Delete.xml | 12 + .../TimeStamp_sample/Form1.Designer.cs | 288 +++ .../2CS_sample/TimeStamp_sample/Form1.cs | 864 ++++++++ .../2CS_sample/TimeStamp_sample/Form1.resx | 771 +++++++ .../TimeStamp_sample/MSGDefinition.xml | 23 + .../2CS_sample/TimeStamp_sample/Program.cs | 38 + .../Properties/AssemblyInfo.cs | 51 + .../2CS_sample/TimeStamp_sample/Readme.txt | 2 + .../TimeStamp_sample/SPDefinition.xml | 15 + .../TimeStamp_sample/SampleLogConf2CS.xml | 133 ++ .../TimeStamp_sample/TimeStamp_sample.csproj | 259 +++ .../TimeStamp_sample/TimeStamp_sample.sln | 35 + .../2CS_sample/TimeStamp_sample/app.config | 43 + 184 files changed, 24665 insertions(+) create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Business/LayerB.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Common/TestParameterValue.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Common/TestReturnValue.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Dao/DaoShippers.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Dao/LayerD.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/MSGDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/SPDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/SampleLogConf2CS.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Window1.xaml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Window1.xaml.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Business/LayerB.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Common/TestParameterValue.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Common/TestReturnValue.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Dao/DaoShippers.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Dao/LayerD.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/MSGDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Program.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/SPDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/SampleLogConf2CS.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/AsyncEvent_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/Readme.txt create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Program.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/WindowsFormsApplication.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/App.xaml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/App.xaml.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Window1.xaml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Window1.xaml.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/WpfApplication.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/test-winx2&wpfx2.bat create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Bean.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Program.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Readme.txt create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_BatUpd.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_Dynamic.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_Static.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Common/TestParameterValue.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Common/TestReturnValue.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D1_Insert.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D5_SelCnt.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S1_Insert.sql create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D1_Insert.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D5_SelCnt.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S1_Insert.sql create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D1_Insert.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D5_SelCnt.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S1_Insert.sql create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Diagram.bmp create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/MSGDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Program.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Readme.txt create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/SPDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/SampleLogConf2CS.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D1_Insert.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D5_SelCnt.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S1_Insert.sql create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D1_Insert.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D5_SelCnt.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S1_Insert.sql create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D1_Insert.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D5_SelCnt.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S1_Insert.sql create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D1_Insert.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D5_SelCnt.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S1_Insert.sql create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D1_Insert.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D5_SelCnt.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S1_Insert.sql create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D1_Insert.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D5_SelCnt.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S1_Insert.sql create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S2_Select.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S3_Update.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S4_Delete.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/MSGDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Program.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Readme.txt create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SPDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SampleLogConf2CS.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/app.config diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.csproj new file mode 100644 index 000000000..453f1fafa --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.csproj @@ -0,0 +1,140 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {F9737483-DC6C-45D1-8CB7-27138FD76D36} + WinExe + Properties + _2CSClientWPF_sample + 2CSClientWPF_sample + v4.6 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + + + + + + Code + + + + + + + Always + + + Always + + + Always + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.sln new file mode 100644 index 000000000..87b8b2c9b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2CSClientWPF_sample", "2CSClientWPF_sample.csproj", "{F9737483-DC6C-45D1-8CB7-27138FD76D36}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml new file mode 100644 index 000000000..a67cfc5f2 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml.cs new file mode 100644 index 000000000..984744320 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml.cs @@ -0,0 +1,33 @@ +//********************************************************************************** +//* サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :App +//* クラス日本語名 :App.xaml の相互作用ロジック +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Windows; + +namespace _2CSClientWPF_sample +{ + /// App.xaml の相互作用ロジック + public partial class App : Application + { + /// OnStartupイベント + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Business/LayerB.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Business/LayerB.cs new file mode 100644 index 000000000..94cc49389 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Business/LayerB.cs @@ -0,0 +1,848 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(B層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :LayerB +//* クラス日本語名 :B層のテスト +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* +//********************************************************************************** + +using _2CSClientWPF_sample.Dao; +using _2CSClientWPF_sample.Common; + +using System; +using System.Data; + +using Touryo.Infrastructure.Business.RichClient.Business; +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Framework.Exceptions; + +namespace _2CSClientWPF_sample.Business +{ + /// + /// LayerB の概要の説明です + /// + public class LayerB : MyFcBaseLogic2CS + { + #region テンプレ + + /// 業務処理を実装 + /// 引数クラス + private void UOC_メソッド名(TestParameterValue testParameter) + { //メソッド引数にBaseParameterValueの派生の型を定義可能。 + + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + // 個別Dao + LayerD myDao = new LayerD(this.GetDam()); + //myDao.xxxx(testParameter, ref testReturn); + + // 共通Dao + CmnDao cmnDao = new CmnDao(this.GetDam()); + cmnDao.ExecSelectScalar(); + + // ↑業務処理----------------------------------------------------- + } + + #endregion + + #region UOCメソッド + + #region SelectCount + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectCount(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperCount.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperCount.xml"; + break; + } + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = cmnDao.ExecSelectScalar(); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = genDao.D5_SelCnt(); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectCount(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region SelectAll_DT + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll_DT(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + DataTable dt = null; + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + } + + // 戻り値 dt + dt = new DataTable(); + + // 共通Daoを実行 + cmnDao.ExecSelectFill_DT(dt); + + // 戻り値を設定 + testReturn.Obj = dt; + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // 戻り値 dt + dt = new DataTable(); + + // 自動生成Daoを実行 + genDao.D2_Select(dt); + + // 戻り値を設定 + testReturn.Obj = (DataTable)dt; + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectAll_DT(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region SelectAll_DS + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll_DS(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + DataSet ds = null; + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + } + + // 戻り値 ds + ds = new DataSet(); + + // 共通Daoを実行 + cmnDao.ExecSelectFill_DS(ds); + + // 戻り値を設定 + testReturn.Obj = ds; + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // 戻り値 ds + ds = new DataSet(); + ds.Tables.Add(new DataTable()); + + // 自動生成Daoを実行 + genDao.D2_Select(ds.Tables[0]); + + // 戻り値を設定 + testReturn.Obj = ds; + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectAll_DS(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region SelectAll_DR + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll_DR(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + DataTable dt = null; + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + } + + // 戻り値 dt + dt = new DataTable(); + + // 3列生成 + dt.Columns.Add("c1", typeof(string)); + dt.Columns.Add("c2", typeof(string)); + dt.Columns.Add("c3", typeof(string)); + + // 共通Daoを実行 + IDataReader idr = cmnDao.ExecSelect_DR(); + + while (idr.Read()) + { + // DRから読む + object[] objArray = new object[3]; + idr.GetValues(objArray); + + // DTに設定する。 + DataRow dr = dt.NewRow(); + dr.ItemArray = objArray; + dt.Rows.Add(dr); + } + + // 終了したらクローズ + idr.Close(); + + // 戻り値を設定 + testReturn.Obj = dt; + + break; + + case "generate": // 自動生成Daoを使用する。 + + // DRのI/Fなし + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // 戻り値 dt + dt = new DataTable(); + + // 自動生成Daoを実行 + genDao.D2_Select(dt); + + // 戻り値を設定 + testReturn.Obj = (DataTable)dt; + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectAll_DR(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region SelectAll_DSQL + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll_DSQL(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperSelectOrder.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperSelectOrder.xml"; + break; + } + + // ユーザ定義パラメタに対して、動的に値を設定する。 + string orderColumn = ""; + string orderSequence = ""; + + if (testParameter.OrderColumn == "c1") + { + orderColumn = "ShipperID"; + } + else if (testParameter.OrderColumn == "c2") + { + orderColumn = "CompanyName"; + } + else if (testParameter.OrderColumn == "c3") + { + orderColumn = "Phone"; + } + else { } + + if (testParameter.OrderSequence == "A") + { + orderSequence = "ASC"; + } + else if (testParameter.OrderSequence == "D") + { + orderSequence = "DESC"; + } + else { } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P1", "test"); + + // ユーザ入力は指定しない。 + // ※ 動的SQLのVALタグは、前後の空白をつめることが有るので、 + // 必要であれば、前後の空白を明示的に指定する必要がある。 + cmnDao.SetUserParameter("COLUMN", " " + orderColumn + " "); + cmnDao.SetUserParameter("SEQUENCE", " " + orderSequence + " "); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // 共通Daoを実行 + cmnDao.ExecSelectFill_DT(dt); + + // 自動生成Daoを実行 + testReturn.Obj = dt; + + break; + + //case "generate": // 自動生成Daoを使用する。 + // // 当該SQLなし + // break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectAll_DSQL(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region Select + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Select(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + DataTable dt = null; + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperSelect.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperSelect.xml"; + break; + } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P1", testParameter.ShipperID); + + // 戻り値 dt + dt = new DataTable(); + + // 共通Daoを実行 + cmnDao.ExecSelectFill_DT(dt); + + // キャストの対策コードを挿入 + + // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 + // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 + // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 + if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") + { + // Int32なのでキャスト + testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); + } + else + { + // それ以外の場合、一度、文字列に変換してInt32.Parseする。 + testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); + } + + testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); + testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // パラメタに対して、動的に値を設定する。 + genDao.PK_ShipperID = testParameter.ShipperID; + + // 戻り値 dt + dt = new DataTable(); + + // 自動生成Daoを実行 + genDao.S2_Select(dt); + + // キャストの対策コードを挿入 + + // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 + // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 + // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 + if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") + { + // Int32なのでキャスト + testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); + } + else + { + // それ以外の場合、一度、文字列に変換してInt32.Parseする。 + testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); + } + + testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); + testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.Select(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region Insert + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Insert(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + cmnDao.SQLFileName = "ShipperInsert.sql"; + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P2", testParameter.CompanyName); + cmnDao.SetParameter("P3", testParameter.Phone); + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // パラメタに対して、動的に値を設定する。 + genDao.CompanyName = testParameter.CompanyName; + genDao.Phone = testParameter.Phone; + + // 自動生成Daoを実行 + // 戻り値を設定 + testReturn.Obj = genDao.D1_Insert(); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.Insert(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region Update + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Update(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperUpdate.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperUpdate.xml"; + break; + } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P1", testParameter.ShipperID); + cmnDao.SetParameter("P2", testParameter.CompanyName); + cmnDao.SetParameter("P3", testParameter.Phone); + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // パラメタに対して、動的に値を設定する。 + genDao.PK_ShipperID = testParameter.ShipperID; + genDao.Set_CompanyName_forUPD = testParameter.CompanyName; + genDao.Set_Phone_forUPD = testParameter.Phone; + + // 自動生成Daoを実行 + // 戻り値を設定 + testReturn.Obj = genDao.S3_Update(); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.Update(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region Delete + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Delete(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperDelete.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperDelete.xml"; + break; + } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P1", testParameter.ShipperID); + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // パラメタに対して、動的に値を設定する。 + genDao.PK_ShipperID = testParameter.ShipperID; + + // 自動生成Daoを実行 + // 戻り値を設定 + testReturn.Obj = genDao.S4_Delete(); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.Delete(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #endregion + + #region ロールバックのテスト + + /// ロールバックのテスト + /// 引数クラス + private void TestRollback(TestParameterValue testParameter) + { + switch ((testParameter.ActionType.Split('%'))[3]) + { + + case "Business": + + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // 業務例外のスロー + throw new BusinessApplicationException( + "ロールバックのテスト", + "ロールバックのテスト", + "エラー情報"); + //break; // 到達できないためコメントアウト + + case "System": + + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // システム例外のスロー + throw new BusinessSystemException( + "ロールバックのテスト", + "ロールバックのテスト"); + //break; // 到達できないためコメントアウト + + case "Other": + + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // その他、一般的な例外のスロー + throw new Exception("ロールバックのテスト"); + //break; // 到達できないためコメントアウト + + case "Other-Business": + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // その他、一般的な例外(業務例外へ振り替え)のスロー + throw new Exception("Other-Business"); + //break; // 到達できないためコメントアウト + + case "Other-System": + + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // その他、一般的な例外(システム例外へ振り替え)のスロー + throw new Exception("Other-System"); + //break; // 到達できないためコメントアウト + } + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Common/TestParameterValue.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Common/TestParameterValue.cs new file mode 100644 index 000000000..4f1c1ddc8 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Common/TestParameterValue.cs @@ -0,0 +1,60 @@ +//********************************************************************************** +//* フレームワーク・テストクラス +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :TestParameterValue +//* クラス日本語名 :テスト用の引数クラス +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* +//********************************************************************************** + +using Touryo.Infrastructure.Business.Common; +using Touryo.Infrastructure.Business.Util; + +namespace _2CSClientWPF_sample.Common +{ + /// + /// TestParameterValue の概要の説明です + /// + public class TestParameterValue : MyParameterValue + { + /// 汎用エリア + public object Obj; + + /// ShipperID + public int ShipperID; + + /// CompanyName + public string CompanyName; + + /// Phone + public string Phone; + + /// OrderColumn + public string OrderColumn; + + /// OrderSequence + public string OrderSequence; + + #region コンストラクタ + + /// コンストラクタ + public TestParameterValue(string screenId, string controlId, string methodName, string actionType, MyUserInfo user) + : base(screenId, controlId, methodName, actionType, user) + { + // Baseのコンストラクタに引数を渡すために必要。 + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Common/TestReturnValue.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Common/TestReturnValue.cs new file mode 100644 index 000000000..153b0b211 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Common/TestReturnValue.cs @@ -0,0 +1,41 @@ +//********************************************************************************** +//* フレームワーク・テストクラス +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :TestReturnValue +//* クラス日本語名 :テスト用の戻り値クラス +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using Touryo.Infrastructure.Business.Common; + +namespace _2CSClientWPF_sample.Common +{ + /// + /// TestReturnValueの概要の説明です + /// + public class TestReturnValue : MyReturnValue + { + /// 汎用エリア + public object Obj; + + /// ShipperID + public int ShipperID; + + /// CompanyName + public string CompanyName; + + /// Phone + public string Phone; + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Dao/DaoShippers.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Dao/DaoShippers.cs new file mode 100644 index 000000000..8aeaa4767 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Dao/DaoShippers.cs @@ -0,0 +1,406 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :DaoShippers +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class DaoShippers : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public DaoShippers(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// ShipperID列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_ShipperID + { + set + { + this.HtParameter["ShipperID"] = value; + } + get + { + return this.HtParameter["ShipperID"]; + } + } + + + + /// CompanyName列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object CompanyName + { + set + { + this.HtParameter["CompanyName"] = value; + } + get + { + return this.HtParameter["CompanyName"]; + } + } + + /// Phone列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Phone + { + set + { + this.HtParameter["Phone"] = value; + } + get + { + return this.HtParameter["Phone"]; + } + } + + + /// Set_ShipperID_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ShipperID_forUPD + { + set + { + this.HtParameter["Set_ShipperID_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ShipperID_forUPD"]; + } + } + + + /// Set_CompanyName_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_CompanyName_forUPD + { + set + { + this.HtParameter["Set_CompanyName_forUPD"] = value; + } + get + { + return this.HtParameter["Set_CompanyName_forUPD"]; + } + } + + + /// Set_Phone_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Phone_forUPD + { + set + { + this.HtParameter["Set_Phone_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Phone_forUPD"]; + } + } + + + + /// ShipperID_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ShipperID_Like + { + set + { + this.HtParameter["ShipperID_Like"] = value; + } + get + { + return this.HtParameter["ShipperID_Like"]; + } + } + + + /// CompanyName_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object CompanyName_Like + { + set + { + this.HtParameter["CompanyName_Like"] = value; + } + get + { + return this.HtParameter["CompanyName_Like"]; + } + } + + + /// Phone_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Phone_Like + { + set + { + this.HtParameter["Phone_Like"] = value; + } + get + { + return this.HtParameter["Phone_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("DaoShippers_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("DaoShippers_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("DaoShippers_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("DaoShippers_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("DaoShippers_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("DaoShippers_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("DaoShippers_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("DaoShippers_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("DaoShippers_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Dao/LayerD.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Dao/LayerD.cs new file mode 100644 index 000000000..fdcbba207 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Dao/LayerD.cs @@ -0,0 +1,518 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :LayerD +//* クラス日本語名 :D層のテスト +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* +//********************************************************************************** + +using _2CSClientWPF_sample.Common; + +using System.Data; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +namespace _2CSClientWPF_sample.Dao +{ + /// + /// LayerD の概要の説明です + /// + public class LayerD : MyBaseDao + { + /// + /// コンストラクタ + /// + public LayerD(BaseDam dam) : base(dam) { } + + #region テンプレ + + /// テンプレ + /// 引数クラス + /// 戻り値クラス + public void テンプレ(TestParameterValue testParameter, TestReturnValue testReturn) + { + + // ↓DBアクセス----------------------------------------------------- + + // ● 下記のいづれかの方法でSQLを設定する。 + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2("ファイル名"); + + // -- 直接指定する場合。 + this.SetSqlByCommand("SQL文"); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", testParameter.ShipperID); + + object obj; + + // -- 追加、更新、削除の場合(件数を確認できる) + obj = this.ExecInsUpDel_NonQuery(); + + // -- 先頭の1セル分の情報を返すSELECTクエリを実行する場合 + obj = this.ExecSelectScalar(); + + // -- テーブル(or レコード)の情報を返す + // SELECTクエリを実行する場合(引数 = データテーブル) + obj = new DataTable(); + this.ExecSelectFill_DT((DataTable)obj); + + // -- テーブル(or レコード)の情報を返す + // SELECTクエリを実行する場合(引数 = データセット) + obj = new DataSet(); + this.ExecSelectFill_DS((DataSet)obj); + + // -- データリーダを返す + IDataReader idr = (IDataReader)this.ExecSelect_DR(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #region 参照系 + + #region 件数取得(SelectCount) + + /// 件数情報を返すSELECTクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void SelectCount(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperCount.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperCount.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + object obj; + + // -- 件数情報を返すSELECTクエリを実行する + obj = this.ExecSelectScalar(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #region 一覧取得(SelectAll) + + /// 一覧を返すSELECTクエリを実行する(DT) + /// 引数クラス + /// 戻り値クラス + public void SelectAll_DT(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string commandText = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + commandText = "SELECT * FROM Shippers"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + commandText = + "SELECT * FROM Shippers"; + // 通常、動的SQLをSetSqlByCommandで直接指定するような使い方はしない。 + } + + // -- 直接指定する場合。 + this.SetSqlByCommand(commandText); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // -- 一覧を返すSELECTクエリを実行する + this.ExecSelectFill_DT(dt); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = dt; + } + + /// 一覧を返すSELECTクエリを実行する(DS) + /// 引数クラス + /// 戻り値クラス + public void SelectAll_DS(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string commandText = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + commandText = "SELECT * FROM Shippers"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + commandText = + "SELECT * FROM Shippers"; + // 通常、動的SQLをSetSqlByCommandで直接指定するような使い方はしない。 + } + + // -- 直接指定する場合。 + this.SetSqlByCommand(commandText); + + // 戻り値 ds + DataSet ds = new DataSet(); + + // -- 一覧を返すSELECTクエリを実行する + this.ExecSelectFill_DS(ds); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = ds; + } + + /// 一覧を返すSELECTクエリを実行する(DR) + /// 引数クラス + /// 戻り値クラス + public void SelectAll_DR(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string commandText = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + commandText = "SELECT * FROM Shippers"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + commandText = + "SELECT * FROM Shippers"; + // 通常、動的SQLをSetSqlByCommandで直接指定するような使い方はしない。 + } + + // -- 直接指定する場合。 + this.SetSqlByCommand(commandText); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // 3列生成 + dt.Columns.Add("c1", typeof(string)); + dt.Columns.Add("c2", typeof(string)); + dt.Columns.Add("c3", typeof(string)); + + // -- 一覧を返すSELECTクエリを実行する + IDataReader idr = (IDataReader)this.ExecSelect_DR(); + + while (idr.Read()) + { + // DRから読む + object[] objArray = new object[3]; + idr.GetValues(objArray); + + // DTに設定する。 + DataRow dr = dt.NewRow(); + dr.ItemArray = objArray; + dt.Rows.Add(dr); + } + + // 終了したらクローズ + idr.Close(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = dt; + } + + /// 一覧を返すSELECTクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void SelectAll_DSQL(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperSelectOrder.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperSelectOrder.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + // ユーザ定義パラメタに対して、動的に値を設定する。 + string orderColumn = ""; + string orderSequence = ""; + + if (testParameter.OrderColumn == "c1") + { + orderColumn = "ShipperID"; + } + else if (testParameter.OrderColumn == "c2") + { + orderColumn = "CompanyName"; + } + else if (testParameter.OrderColumn == "c3") + { + orderColumn = "Phone"; + } + else { } + + if (testParameter.OrderSequence == "A") + { + orderSequence = "ASC"; + } + else if (testParameter.OrderSequence == "D") + { + orderSequence = "DESC"; + } + else { } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", "test"); + + // ユーザ入力は指定しない。 + // ※ 動的SQLのVALタグは、前後の空白をつめることが有るので、 + // 必要であれば、前後の空白を明示的に指定する必要がある。 + this.SetUserParameter("COLUMN", " " + orderColumn + " "); + this.SetUserParameter("SEQUENCE", " " + orderSequence + " "); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // -- 一覧を返すSELECTクエリを実行する + this.ExecSelectFill_DT(dt); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = dt; + } + + #endregion + + #region 参照 + + /// 1レコードを返すSELECTクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void Select(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperSelect.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperSelect.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", testParameter.ShipperID); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // -- 1レコードを返すSELECTクエリを実行する + this.ExecSelectFill_DT(dt); + + // ↑DBアクセス----------------------------------------------------- + + //// 戻り値を設定 // 不要 + //testReturn.Obj = dt; + + // キャストの対策コードを挿入 + + // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 + // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 + // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 + if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") + { + // Int32なのでキャスト + testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); + } + else + { + // それ以外の場合、一度、文字列に変換してInt32.Parseする。 + testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); + } + + testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); + testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); + } + + #endregion + + #endregion + + #region 更新系 + + #region 追加 + + /// Insertクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void Insert(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2("ShipperInsert.sql"); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P2", testParameter.CompanyName); + this.SetParameter("P3", testParameter.Phone); + + object obj; + + // -- 追加(件数を確認できる) + obj = this.ExecInsUpDel_NonQuery(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #region 更新 + + /// Updateクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void Update(TestParameterValue testParameter, TestReturnValue testReturn) + { + + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperUpdate.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperUpdate.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", testParameter.ShipperID); + this.SetParameter("P2", testParameter.CompanyName); + this.SetParameter("P3", testParameter.Phone); + + object obj; + + // -- 更新(件数を確認できる) + obj = this.ExecInsUpDel_NonQuery(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #region 削除 + + /// Deleteクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void Delete(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperDelete.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperDelete.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", testParameter.ShipperID); + + object obj; + + // -- 削除(件数を確認できる) + obj = this.ExecInsUpDel_NonQuery(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/MSGDefinition.xml new file mode 100644 index 000000000..f2283b409 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/MSGDefinition.xml @@ -0,0 +1,23 @@ + + + + +]> + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..646349717 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Properties/AssemblyInfo.cs @@ -0,0 +1,72 @@ +//********************************************************************************** +//* サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; +using System.Windows; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("2CSClientWPF_sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("2CSClientWPF_sample")] +[assembly: AssemblyCopyright("Copyright (C) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +//ローカライズ可能なアプリケーションのビルドを開始するには、 +//.csproj ファイルの CultureYouAreCodingWith を +// 内部で設定します。たとえば、 +//ソース ファイルで英語を使用している場合、 を en-US に設定します。次に、 +//下の NeutralResourceLanguage 属性のコメントを解除します。下の行の "en-US" を +//プロジェクト ファイルの UICulture 設定と一致するよう更新します。 + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //テーマ固有のリソース ディクショナリが置かれている場所 + //(リソースがページ、 + //またはアプリケーション リソース ディクショナリに見つからない場合に使用されます) + ResourceDictionaryLocation.SourceAssembly //汎用リソース ディクショナリが置かれている場所 + //(リソースがページ、 + //アプリケーション、またはいずれのテーマ固有のリソース ディクショナリにも見つからない場合に使用されます) +)] + + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を +// 既定値にすることができます: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/SPDefinition.xml new file mode 100644 index 000000000..6baf634bc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/SPDefinition.xml @@ -0,0 +1,15 @@ + + + + +]> + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/SampleLogConf2CS.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/SampleLogConf2CS.xml new file mode 100644 index 000000000..e39f2b3fe --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/SampleLogConf2CS.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Window1.xaml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Window1.xaml new file mode 100644 index 000000000..ae67a4dba --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Window1.xaml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Window1.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Window1.xaml.cs new file mode 100644 index 000000000..62db7b075 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Window1.xaml.cs @@ -0,0 +1,642 @@ +//********************************************************************************** +//* サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Window1 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using _2CSClientWPF_sample.Common; +using _2CSClientWPF_sample.Business; + +using System; +using System.Data; +using System.Windows; +using System.Windows.Controls; + +using Touryo.Infrastructure.Business.Util; +using Touryo.Infrastructure.Framework.Util; +using Touryo.Infrastructure.Public.Db; + +namespace _2CSClientWPF_sample +{ + /// Window1.xaml の相互作用ロジック(サンプル アプリ画面) + public partial class Window1 : Window + { + /// ユーザ情報 + MyUserInfo myUserInfo; + + #region 初期処理 + + /// コンストラクタ + public Window1() + { + InitializeComponent(); + } + + /// ロード イベント + private void Window_Loaded(object sender, RoutedEventArgs e) + { + // ddlDap + this.ddlDap.Items.Add(new ComboBoxItem("SQL Server / SQL Client", "SQL")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / OLEDB.NET", "OLE")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / ODCB.NET", "ODB")); + this.ddlDap.Items.Add(new ComboBoxItem("Oracle / ODP.NET", "ODP")); + this.ddlDap.Items.Add(new ComboBoxItem("DB2 / DB2.NET", "DB2")); + this.ddlDap.Items.Add(new ComboBoxItem("HiRDB / HiRDB-DP", "HIR")); + this.ddlDap.Items.Add(new ComboBoxItem("MySQL Cnn/NET", "MCN")); + this.ddlDap.Items.Add(new ComboBoxItem("PostgreSQL / Npgsql", "NPS")); + + this.ddlDap.SelectedIndex = 0; + + // ddlMode1 + this.ddlMode1.Items.Add(new ComboBoxItem("個別Dao", "individual")); + this.ddlMode1.Items.Add(new ComboBoxItem("共通Dao", "common")); + this.ddlMode1.Items.Add(new ComboBoxItem("自動生成Dao(更新のみ)", "generate")); + this.ddlMode1.SelectedIndex = 0; + + // ddlMode2 + this.ddlMode2.Items.Add(new ComboBoxItem("静的クエリ", "static")); + this.ddlMode2.Items.Add(new ComboBoxItem("動的クエリ", "dynamic")); + this.ddlMode2.SelectedIndex = 0; + + // ddlIso + this.ddlIso.Items.Add(new ComboBoxItem("ノットコネクト", "NC")); + this.ddlIso.Items.Add(new ComboBoxItem("ノートランザクション", "NT")); + this.ddlIso.Items.Add(new ComboBoxItem("ダーティリード", "RU")); + this.ddlIso.Items.Add(new ComboBoxItem("リードコミット", "RC")); + this.ddlIso.Items.Add(new ComboBoxItem("リピータブルリード", "RR")); + this.ddlIso.Items.Add(new ComboBoxItem("シリアライザブル", "SZ")); + this.ddlIso.Items.Add(new ComboBoxItem("スナップショット", "SS")); + this.ddlIso.Items.Add(new ComboBoxItem("デフォルト", "DF")); + this.ddlIso.SelectedIndex = 1; + + // ddlExRollback + this.ddlExRollback.Items.Add(new ComboBoxItem("正常時", "-")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外", "Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外", "System")); + this.ddlExRollback.Items.Add(new ComboBoxItem("その他、一般的な例外", "Other")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外への振替", "Other-Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外への振替", "Other-System")); + this.ddlExRollback.SelectedIndex = 0; + + // ddlOrderColumn + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c1", "c1")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c2", "c2")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c3", "c3")); + this.ddlOrderColumn.SelectedIndex = 0; + + // ddlOrderSequence + this.ddlOrderSequence.Items.Add(new ComboBoxItem("ASC", "A")); + this.ddlOrderSequence.Items.Add(new ComboBoxItem("DESC", "D")); + this.ddlOrderSequence.SelectedIndex = 0; + + // ユーザ情報 + this.myUserInfo = new MyUserInfo("userName", Environment.MachineName); + } + + #region コンボボックス用 + + /// コンボボックス用インナークラス + private class ComboBoxItem + { + /// 表示名 + private string m_name = ""; + + /// + private string m_value = ""; + + /// コンストラクタ + public ComboBoxItem(string name, string value) + { + m_name = name; + m_value = value; + } + + /// 表示名 + public string Name + { + get + { + return m_name; + } + } + + /// + public string Value + { + get + { + return m_value; + } + } + + /// + /// オーバーライドしたメソッド + /// これがコンボボックスに表示される + /// + public override string ToString() + { + return m_name; + } + } + + #endregion + + #endregion + + #region CRUD処理メソッド + + #region 参照系 + + /// 件数取得 + private void button1_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectCount", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Content = testReturnValue.Obj.ToString() + "件のデータがあります"; + } + } + + /// 一覧取得(dt) + private void button2_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectAll_DT", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridControl1.Columns.Clear(); + this.dataGridControl1.DataContext = testReturnValue.Obj; + } + } + + /// 一覧取得(ds) + private void button3_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectAll_DS", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridControl1.Columns.Clear(); + this.dataGridControl1.DataContext = ((DataSet)testReturnValue.Obj).Tables[0]; + } + } + + /// 一覧取得(dr) + private void button4_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectAll_DR", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridControl1.Columns.Clear(); + this.dataGridControl1.DataContext = testReturnValue.Obj; + } + } + + /// 一覧取得(動的sql) + private void button5_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectAll_DSQL", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 動的SQLの要素を設定 + testParameterValue.OrderColumn = ((ComboBoxItem)this.ddlOrderColumn.SelectedItem).Value; + testParameterValue.OrderSequence = ((ComboBoxItem)this.ddlOrderSequence.SelectedItem).Value; + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridControl1.Columns.Clear(); + this.dataGridControl1.DataContext = testReturnValue.Obj; + } + } + + /// 参照処理 + private void button6_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "Select", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.textBox1.Text = testReturnValue.ShipperID.ToString(); + this.textBox2.Text = testReturnValue.CompanyName; + this.textBox3.Text = testReturnValue.Phone; + } + } + + #endregion + + #region 更新系 + + /// 追加処理 + private void button7_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "Insert", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 情報の設定 + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Content = testReturnValue.Obj.ToString() + "件追加"; + } + } + + /// 更新処理 + private void button8_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "Update", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Content = testReturnValue.Obj.ToString() + "件更新"; + } + } + + /// 削除処理 + private void button9_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "Delete", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(textBox1.Text); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Content = testReturnValue.Obj.ToString() + "件削除"; + } + } + + #endregion + + #endregion + + #region その他 + + /// クリア + private void button10_Click(object sender, RoutedEventArgs e) + { + this.dataGridControl1.Columns.Clear(); + this.dataGridControl1.DataContext = null; + } + + /// メッセージ取得(埋め込まれたリソース対応) + private void button11_Click(object sender, RoutedEventArgs e) + { + this.textBox5.Text = GetMessage.GetMessageDescription(this.textBox4.Text); + } + + /// 共有情報取得(埋め込まれたリソース対応) + private void button12_Click(object sender, RoutedEventArgs e) + { + this.textBox7.Text = GetSharedProperty.GetSharedPropertyValue(this.textBox6.Text); + } + + #endregion + + #region 分離レベルの設定メソッド + + /// 分離レベルの設定 + private DbEnum.IsolationLevelEnum SelectIsolationLevel() + { + if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "NC") + { + return DbEnum.IsolationLevelEnum.NotConnect; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "NT") + { + return DbEnum.IsolationLevelEnum.NoTransaction; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "RU") + { + return DbEnum.IsolationLevelEnum.ReadUncommitted; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "RC") + { + return DbEnum.IsolationLevelEnum.ReadCommitted; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "RR") + { + return DbEnum.IsolationLevelEnum.RepeatableRead; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "SZ") + { + return DbEnum.IsolationLevelEnum.Serializable; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "SS") + { + return DbEnum.IsolationLevelEnum.Snapshot; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "DF") + { + return DbEnum.IsolationLevelEnum.DefaultTransaction; + } + else + { + throw new Exception("分離レベルの設定がおかしい"); + } + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/app.config new file mode 100644 index 000000000..b77aa4355 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/app.config @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.csproj new file mode 100644 index 000000000..7c24c90fe --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.csproj @@ -0,0 +1,144 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {386EA604-40DB-44A8-87AE-F29B209BA9CF} + WinExe + Properties + _2CSClientWin_sample + 2CSClientWin_sample + v4.6 + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + + + + + + + + + Form + + + Form1.cs + + + Form + + + Login.cs + + + + + Form + + + Splash.cs + + + Designer + Form1.cs + + + + + + + + Always + + + + + Login.cs + Designer + + + Always + + + Always + + + Splash.cs + Designer + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.sln new file mode 100644 index 000000000..d1b5dca28 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.sln @@ -0,0 +1,35 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2CSClientWin_sample", "2CSClientWin_sample.csproj", "{386EA604-40DB-44A8-87AE-F29B209BA9CF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|.NET = Debug|.NET + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Release|.NET = Release|.NET + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|.NET.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|.NET.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.Build.0 = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Business/LayerB.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Business/LayerB.cs new file mode 100644 index 000000000..e820f4ad0 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Business/LayerB.cs @@ -0,0 +1,847 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(B層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :LayerB +//* クラス日本語名 :B層のテスト +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using _2CSClientWin_sample.Common; +using _2CSClientWin_sample.Dao; + +using System; +using System.Data; + +using Touryo.Infrastructure.Business.RichClient.Business; +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Framework.Exceptions; + +namespace _2CSClientWin_sample.Business +{ + /// + /// LayerB の概要の説明です + /// + public class LayerB : MyFcBaseLogic2CS + { + #region テンプレ + + /// 業務処理を実装 + /// 引数クラス + private void UOC_メソッド名(TestParameterValue testParameter) + { //メソッド引数にBaseParameterValueの派生の型を定義可能。 + + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + // 個別Dao + LayerD myDao = new LayerD(this.GetDam()); + //myDao.xxxx(testParameter, ref testReturn); + + // 共通Dao + CmnDao cmnDao = new CmnDao(this.GetDam()); + cmnDao.ExecSelectScalar(); + + // ↑業務処理----------------------------------------------------- + } + + #endregion + + #region UOCメソッド + + #region SelectCount + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectCount(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperCount.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperCount.xml"; + break; + } + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = cmnDao.ExecSelectScalar(); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = genDao.D5_SelCnt(); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectCount(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region SelectAll_DT + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll_DT(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + DataTable dt = null; + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + } + + // 戻り値 dt + dt = new DataTable(); + + // 共通Daoを実行 + cmnDao.ExecSelectFill_DT(dt); + + // 戻り値を設定 + testReturn.Obj = dt; + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // 戻り値 dt + dt = new DataTable(); + + // 自動生成Daoを実行 + genDao.D2_Select(dt); + + // 戻り値を設定 + testReturn.Obj = (DataTable)dt; + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectAll_DT(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region SelectAll_DS + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll_DS(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + DataSet ds = null; + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + } + + // 戻り値 ds + ds = new DataSet(); + + // 共通Daoを実行 + cmnDao.ExecSelectFill_DS(ds); + + // 戻り値を設定 + testReturn.Obj = ds; + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // 戻り値 ds + ds = new DataSet(); + ds.Tables.Add(new DataTable()); + + // 自動生成Daoを実行 + genDao.D2_Select(ds.Tables[0]); + + // 戻り値を設定 + testReturn.Obj = ds; + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectAll_DS(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region SelectAll_DR + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll_DR(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + DataTable dt = null; + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLText = "SELECT * FROM Shippers"; + break; + } + + // 戻り値 dt + dt = new DataTable(); + + // 3列生成 + dt.Columns.Add("c1", typeof(string)); + dt.Columns.Add("c2", typeof(string)); + dt.Columns.Add("c3", typeof(string)); + + // 共通Daoを実行 + IDataReader idr = cmnDao.ExecSelect_DR(); + + while (idr.Read()) + { + // DRから読む + object[] objArray = new object[3]; + idr.GetValues(objArray); + + // DTに設定する。 + DataRow dr = dt.NewRow(); + dr.ItemArray = objArray; + dt.Rows.Add(dr); + } + + // 終了したらクローズ + idr.Close(); + + // 戻り値を設定 + testReturn.Obj = dt; + + break; + + case "generate": // 自動生成Daoを使用する。 + + // DRのI/Fなし + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // 戻り値 dt + dt = new DataTable(); + + // 自動生成Daoを実行 + genDao.D2_Select(dt); + + // 戻り値を設定 + testReturn.Obj = (DataTable)dt; + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectAll_DR(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region SelectAll_DSQL + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll_DSQL(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperSelectOrder.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperSelectOrder.xml"; + break; + } + + // ユーザ定義パラメタに対して、動的に値を設定する。 + string orderColumn = ""; + string orderSequence = ""; + + if (testParameter.OrderColumn == "c1") + { + orderColumn = "ShipperID"; + } + else if (testParameter.OrderColumn == "c2") + { + orderColumn = "CompanyName"; + } + else if (testParameter.OrderColumn == "c3") + { + orderColumn = "Phone"; + } + else { } + + if (testParameter.OrderSequence == "A") + { + orderSequence = "ASC"; + } + else if (testParameter.OrderSequence == "D") + { + orderSequence = "DESC"; + } + else { } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P1", "test"); + + // ユーザ入力は指定しない。 + // ※ 動的SQLのVALタグは、前後の空白をつめることが有るので、 + // 必要であれば、前後の空白を明示的に指定する必要がある。 + cmnDao.SetUserParameter("COLUMN", " " + orderColumn + " "); + cmnDao.SetUserParameter("SEQUENCE", " " + orderSequence + " "); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // 共通Daoを実行 + cmnDao.ExecSelectFill_DT(dt); + + // 自動生成Daoを実行 + testReturn.Obj = dt; + + break; + + //case "generate": // 自動生成Daoを使用する。 + // // 当該SQLなし + // break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.SelectAll_DSQL(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region Select + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Select(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + DataTable dt = null; + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperSelect.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperSelect.xml"; + break; + } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P1", testParameter.ShipperID); + + // 戻り値 dt + dt = new DataTable(); + + // 共通Daoを実行 + cmnDao.ExecSelectFill_DT(dt); + + // キャストの対策コードを挿入 + + // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 + // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 + // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 + if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") + { + // Int32なのでキャスト + testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); + } + else + { + // それ以外の場合、一度、文字列に変換してInt32.Parseする。 + testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); + } + + testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); + testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // パラメタに対して、動的に値を設定する。 + genDao.PK_ShipperID = testParameter.ShipperID; + + // 戻り値 dt + dt = new DataTable(); + + // 自動生成Daoを実行 + genDao.S2_Select(dt); + + // キャストの対策コードを挿入 + + // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 + // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 + // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 + if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") + { + // Int32なのでキャスト + testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); + } + else + { + // それ以外の場合、一度、文字列に変換してInt32.Parseする。 + testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); + } + + testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); + testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.Select(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region Insert + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Insert(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + cmnDao.SQLFileName = "ShipperInsert.sql"; + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P2", testParameter.CompanyName); + cmnDao.SetParameter("P3", testParameter.Phone); + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // パラメタに対して、動的に値を設定する。 + genDao.CompanyName = testParameter.CompanyName; + genDao.Phone = testParameter.Phone; + + // 自動生成Daoを実行 + // 戻り値を設定 + testReturn.Obj = genDao.D1_Insert(); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.Insert(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region Update + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Update(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperUpdate.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperUpdate.xml"; + break; + } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P1", testParameter.ShipperID); + cmnDao.SetParameter("P2", testParameter.CompanyName); + cmnDao.SetParameter("P3", testParameter.Phone); + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // パラメタに対して、動的に値を設定する。 + genDao.PK_ShipperID = testParameter.ShipperID; + genDao.Set_CompanyName_forUPD = testParameter.CompanyName; + genDao.Set_Phone_forUPD = testParameter.Phone; + + // 自動生成Daoを実行 + // 戻り値を設定 + testReturn.Obj = genDao.S3_Update(); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.Update(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #region Delete + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Delete(TestParameterValue testParameter) + { + // 戻り値クラスを生成して、事前に戻り値に設定しておく。 + TestReturnValue testReturn = new TestReturnValue(); + this.ReturnValue = testReturn; + + // ↓業務処理----------------------------------------------------- + + switch ((testParameter.ActionType.Split('%'))[1]) + { + case "common": // 共通Daoを使用する。 + + // 共通Daoを生成 + CmnDao cmnDao = new CmnDao(this.GetDam()); + + switch ((testParameter.ActionType.Split('%'))[2]) + { + case "static": + // 静的SQLを指定 + cmnDao.SQLFileName = "ShipperDelete.sql"; + break; + + case "dynamic": + // 動的SQLを指定 + cmnDao.SQLFileName = "ShipperDelete.xml"; + break; + } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + cmnDao.SetParameter("P1", testParameter.ShipperID); + + // 共通Daoを実行 + // 戻り値を設定 + testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); + + break; + + case "generate": // 自動生成Daoを使用する。 + + // 自動生成Daoを生成 + DaoShippers genDao = new DaoShippers(this.GetDam()); + + // パラメタに対して、動的に値を設定する。 + genDao.PK_ShipperID = testParameter.ShipperID; + + // 自動生成Daoを実行 + // 戻り値を設定 + testReturn.Obj = genDao.S4_Delete(); + + break; + + default: // 個別Daoを使用する。 + LayerD myDao = new LayerD(this.GetDam()); + myDao.Delete(testParameter, testReturn); + break; + } + + // ↑業務処理----------------------------------------------------- + + // ロールバックのテスト + this.TestRollback(testParameter); + } + + #endregion + + #endregion + + #region ロールバックのテスト + + /// ロールバックのテスト + /// 引数クラス + private void TestRollback(TestParameterValue testParameter) + { + switch ((testParameter.ActionType.Split('%'))[3]) + { + + case "Business": + + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // 業務例外のスロー + throw new BusinessApplicationException( + "ロールバックのテスト", + "ロールバックのテスト", + "エラー情報"); + //break; // 到達できないためコメントアウト + + case "System": + + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // システム例外のスロー + throw new BusinessSystemException( + "ロールバックのテスト", + "ロールバックのテスト"); + //break; // 到達できないためコメントアウト + + case "Other": + + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // その他、一般的な例外のスロー + throw new Exception("ロールバックのテスト"); + //break; // 到達できないためコメントアウト + + case "Other-Business": + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // その他、一般的な例外(業務例外へ振り替え)のスロー + throw new Exception("Other-Business"); + //break; // 到達できないためコメントアウト + + case "Other-System": + + // 戻り値が見えるか確認する。 + ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; + + // その他、一般的な例外(システム例外へ振り替え)のスロー + throw new Exception("Other-System"); + //break; // 到達できないためコメントアウト + } + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Common/TestParameterValue.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Common/TestParameterValue.cs new file mode 100644 index 000000000..1596622df --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Common/TestParameterValue.cs @@ -0,0 +1,59 @@ +//********************************************************************************** +//* フレームワーク・テストクラス +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :TestParameterValue +//* クラス日本語名 :テスト用の引数クラス +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using Touryo.Infrastructure.Business.Common; +using Touryo.Infrastructure.Business.Util; + +namespace _2CSClientWin_sample.Common +{ + /// + /// TestParameterValue の概要の説明です + /// + public class TestParameterValue : MyParameterValue + { + /// 汎用エリア + public object Obj; + + /// ShipperID + public int ShipperID; + + /// CompanyName + public string CompanyName; + + /// Phone + public string Phone; + + /// OrderColumn + public string OrderColumn; + + /// OrderSequence + public string OrderSequence; + + #region コンストラクタ + + /// コンストラクタ + public TestParameterValue(string screenId, string controlId, string methodName, string actionType, MyUserInfo user) + : base(screenId, controlId, methodName, actionType, user) + { + // Baseのコンストラクタに引数を渡すために必要。 + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Common/TestReturnValue.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Common/TestReturnValue.cs new file mode 100644 index 000000000..98ff13d24 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Common/TestReturnValue.cs @@ -0,0 +1,41 @@ +//********************************************************************************** +//* フレームワーク・テストクラス +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :TestReturnValue +//* クラス日本語名 :テスト用の戻り値クラス +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using Touryo.Infrastructure.Business.Common; + +namespace _2CSClientWin_sample.Common +{ + /// + /// TestReturnValueの概要の説明です + /// + public class TestReturnValue : MyReturnValue + { + /// 汎用エリア + public object Obj; + + /// ShipperID + public int ShipperID; + + /// CompanyName + public string CompanyName; + + /// Phone + public string Phone; + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Dao/DaoShippers.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Dao/DaoShippers.cs new file mode 100644 index 000000000..8aeaa4767 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Dao/DaoShippers.cs @@ -0,0 +1,406 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :DaoShippers +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class DaoShippers : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public DaoShippers(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// ShipperID列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_ShipperID + { + set + { + this.HtParameter["ShipperID"] = value; + } + get + { + return this.HtParameter["ShipperID"]; + } + } + + + + /// CompanyName列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object CompanyName + { + set + { + this.HtParameter["CompanyName"] = value; + } + get + { + return this.HtParameter["CompanyName"]; + } + } + + /// Phone列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Phone + { + set + { + this.HtParameter["Phone"] = value; + } + get + { + return this.HtParameter["Phone"]; + } + } + + + /// Set_ShipperID_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ShipperID_forUPD + { + set + { + this.HtParameter["Set_ShipperID_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ShipperID_forUPD"]; + } + } + + + /// Set_CompanyName_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_CompanyName_forUPD + { + set + { + this.HtParameter["Set_CompanyName_forUPD"] = value; + } + get + { + return this.HtParameter["Set_CompanyName_forUPD"]; + } + } + + + /// Set_Phone_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Phone_forUPD + { + set + { + this.HtParameter["Set_Phone_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Phone_forUPD"]; + } + } + + + + /// ShipperID_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ShipperID_Like + { + set + { + this.HtParameter["ShipperID_Like"] = value; + } + get + { + return this.HtParameter["ShipperID_Like"]; + } + } + + + /// CompanyName_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object CompanyName_Like + { + set + { + this.HtParameter["CompanyName_Like"] = value; + } + get + { + return this.HtParameter["CompanyName_Like"]; + } + } + + + /// Phone_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Phone_Like + { + set + { + this.HtParameter["Phone_Like"] = value; + } + get + { + return this.HtParameter["Phone_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("DaoShippers_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("DaoShippers_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("DaoShippers_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("DaoShippers_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("DaoShippers_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("DaoShippers_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("DaoShippers_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("DaoShippers_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("DaoShippers_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Dao/LayerD.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Dao/LayerD.cs new file mode 100644 index 000000000..b79b35e0b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Dao/LayerD.cs @@ -0,0 +1,517 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :LayerD +//* クラス日本語名 :D層のテスト +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using _2CSClientWin_sample.Common; + +using System.Data; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +namespace _2CSClientWin_sample.Dao +{ + /// + /// LayerD の概要の説明です + /// + public class LayerD : MyBaseDao + { + /// + /// コンストラクタ + /// + public LayerD(BaseDam dam) : base(dam) { } + + #region テンプレ + + /// テンプレ + /// 引数クラス + /// 戻り値クラス + public void テンプレ(TestParameterValue testParameter, TestReturnValue testReturn) + { + + // ↓DBアクセス----------------------------------------------------- + + // ● 下記のいづれかの方法でSQLを設定する。 + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2("ファイル名"); + + // -- 直接指定する場合。 + this.SetSqlByCommand("SQL文"); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", testParameter.ShipperID); + + object obj; + + // -- 追加、更新、削除の場合(件数を確認できる) + obj = this.ExecInsUpDel_NonQuery(); + + // -- 先頭の1セル分の情報を返すSELECTクエリを実行する場合 + obj = this.ExecSelectScalar(); + + // -- テーブル(or レコード)の情報を返す + // SELECTクエリを実行する場合(引数 = データテーブル) + obj = new DataTable(); + this.ExecSelectFill_DT((DataTable)obj); + + // -- テーブル(or レコード)の情報を返す + // SELECTクエリを実行する場合(引数 = データセット) + obj = new DataSet(); + this.ExecSelectFill_DS((DataSet)obj); + + // -- データリーダを返す + IDataReader idr = (IDataReader)this.ExecSelect_DR(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #region 参照系 + + #region 件数取得(SelectCount) + + /// 件数情報を返すSELECTクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void SelectCount(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperCount.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperCount.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + object obj; + + // -- 件数情報を返すSELECTクエリを実行する + obj = this.ExecSelectScalar(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #region 一覧取得(SelectAll) + + /// 一覧を返すSELECTクエリを実行する(DT) + /// 引数クラス + /// 戻り値クラス + public void SelectAll_DT(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string commandText = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + commandText = "SELECT * FROM Shippers"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + commandText = + "SELECT * FROM Shippers"; + // 通常、動的SQLをSetSqlByCommandで直接指定するような使い方はしない。 + } + + // -- 直接指定する場合。 + this.SetSqlByCommand(commandText); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // -- 一覧を返すSELECTクエリを実行する + this.ExecSelectFill_DT(dt); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = dt; + } + + /// 一覧を返すSELECTクエリを実行する(DS) + /// 引数クラス + /// 戻り値クラス + public void SelectAll_DS(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string commandText = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + commandText = "SELECT * FROM Shippers"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + commandText = + "SELECT * FROM Shippers"; + // 通常、動的SQLをSetSqlByCommandで直接指定するような使い方はしない。 + } + + // -- 直接指定する場合。 + this.SetSqlByCommand(commandText); + + // 戻り値 ds + DataSet ds = new DataSet(); + + // -- 一覧を返すSELECTクエリを実行する + this.ExecSelectFill_DS(ds); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = ds; + } + + /// 一覧を返すSELECTクエリを実行する(DR) + /// 引数クラス + /// 戻り値クラス + public void SelectAll_DR(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string commandText = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + commandText = "SELECT * FROM Shippers"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + commandText = + "SELECT * FROM Shippers"; + // 通常、動的SQLをSetSqlByCommandで直接指定するような使い方はしない。 + } + + // -- 直接指定する場合。 + this.SetSqlByCommand(commandText); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // 3列生成 + dt.Columns.Add("c1", typeof(string)); + dt.Columns.Add("c2", typeof(string)); + dt.Columns.Add("c3", typeof(string)); + + // -- 一覧を返すSELECTクエリを実行する + IDataReader idr = (IDataReader)this.ExecSelect_DR(); + + while (idr.Read()) + { + // DRから読む + object[] objArray = new object[3]; + idr.GetValues(objArray); + + // DTに設定する。 + DataRow dr = dt.NewRow(); + dr.ItemArray = objArray; + dt.Rows.Add(dr); + } + + // 終了したらクローズ + idr.Close(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = dt; + } + + /// 一覧を返すSELECTクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void SelectAll_DSQL(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperSelectOrder.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperSelectOrder.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + // ユーザ定義パラメタに対して、動的に値を設定する。 + string orderColumn = ""; + string orderSequence = ""; + + if (testParameter.OrderColumn == "c1") + { + orderColumn = "ShipperID"; + } + else if (testParameter.OrderColumn == "c2") + { + orderColumn = "CompanyName"; + } + else if (testParameter.OrderColumn == "c3") + { + orderColumn = "Phone"; + } + else { } + + if (testParameter.OrderSequence == "A") + { + orderSequence = "ASC"; + } + else if (testParameter.OrderSequence == "D") + { + orderSequence = "DESC"; + } + else { } + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", "test"); + + // ユーザ入力は指定しない。 + // ※ 動的SQLのVALタグは、前後の空白をつめることが有るので、 + // 必要であれば、前後の空白を明示的に指定する必要がある。 + this.SetUserParameter("COLUMN", " " + orderColumn + " "); + this.SetUserParameter("SEQUENCE", " " + orderSequence + " "); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // -- 一覧を返すSELECTクエリを実行する + this.ExecSelectFill_DT(dt); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = dt; + } + + #endregion + + #region 参照 + + /// 1レコードを返すSELECTクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void Select(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperSelect.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperSelect.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", testParameter.ShipperID); + + // 戻り値 dt + DataTable dt = new DataTable(); + + // -- 1レコードを返すSELECTクエリを実行する + this.ExecSelectFill_DT(dt); + + // ↑DBアクセス----------------------------------------------------- + + //// 戻り値を設定 // 不要 + //testReturn.Obj = dt; + + // キャストの対策コードを挿入 + + // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 + // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 + // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 + if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") + { + // Int32なのでキャスト + testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); + } + else + { + // それ以外の場合、一度、文字列に変換してInt32.Parseする。 + testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); + } + + testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); + testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); + } + + #endregion + + #endregion + + #region 更新系 + + #region 追加 + + /// Insertクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void Insert(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2("ShipperInsert.sql"); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P2", testParameter.CompanyName); + this.SetParameter("P3", testParameter.Phone); + + object obj; + + // -- 追加(件数を確認できる) + obj = this.ExecInsUpDel_NonQuery(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #region 更新 + + /// Updateクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void Update(TestParameterValue testParameter, TestReturnValue testReturn) + { + + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperUpdate.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperUpdate.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", testParameter.ShipperID); + this.SetParameter("P2", testParameter.CompanyName); + this.SetParameter("P3", testParameter.Phone); + + object obj; + + // -- 更新(件数を確認できる) + obj = this.ExecInsUpDel_NonQuery(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #region 削除 + + /// Deleteクエリを実行する + /// 引数クラス + /// 戻り値クラス + public void Delete(TestParameterValue testParameter, TestReturnValue testReturn) + { + // ↓DBアクセス----------------------------------------------------- + + string filename = ""; + + if ((testParameter.ActionType.Split('%'))[2] == "static") + { + // 静的SQL + filename = "ShipperDelete.sql"; + } + else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") + { + // 動的SQL + filename = "ShipperDelete.xml"; + } + + // -- ファイルから読み込む場合。 + this.SetSqlByFile2(filename); + + // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 + this.SetParameter("P1", testParameter.ShipperID); + + object obj; + + // -- 削除(件数を確認できる) + obj = this.ExecInsUpDel_NonQuery(); + + // ↑DBアクセス----------------------------------------------------- + + // 戻り値を設定 + testReturn.Obj = obj; + } + + #endregion + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.Designer.cs new file mode 100644 index 000000000..33fc4eff3 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.Designer.cs @@ -0,0 +1,425 @@ +namespace _2CSClientWin_sample +{ + partial class Form1 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.ddlDap = new System.Windows.Forms.ComboBox(); + this.ddlMode1 = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.ddlMode2 = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.ddlIso = new System.Windows.Forms.ComboBox(); + this.label5 = new System.Windows.Forms.Label(); + this.ddlExRollback = new System.Windows.Forms.ComboBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.ddlOrderColumn = new System.Windows.Forms.ComboBox(); + this.label10 = new System.Windows.Forms.Label(); + this.ddlOrderSequence = new System.Windows.Forms.ComboBox(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.btnButton1 = new System.Windows.Forms.Button(); + this.btnButton2 = new System.Windows.Forms.Button(); + this.btnButton3 = new System.Windows.Forms.Button(); + this.btnButton4 = new System.Windows.Forms.Button(); + this.btnButton5 = new System.Windows.Forms.Button(); + this.btnButton6 = new System.Windows.Forms.Button(); + this.btnButton7 = new System.Windows.Forms.Button(); + this.btnButton8 = new System.Windows.Forms.Button(); + this.btnButton9 = new System.Windows.Forms.Button(); + this.btnButton10 = new System.Windows.Forms.Button(); + this.labelMessage = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.btnButton12 = new System.Windows.Forms.Button(); + this.label15 = new System.Windows.Forms.Label(); + this.textBox6 = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.btnButton11 = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.textBox4 = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.SuspendLayout(); + // + // ddlDap + // + this.ddlDap.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlDap.FormattingEnabled = true; + resources.ApplyResources(this.ddlDap, "ddlDap"); + this.ddlDap.Name = "ddlDap"; + // + // ddlMode1 + // + this.ddlMode1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlMode1.FormattingEnabled = true; + resources.ApplyResources(this.ddlMode1, "ddlMode1"); + this.ddlMode1.Name = "ddlMode1"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // ddlMode2 + // + this.ddlMode2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlMode2.FormattingEnabled = true; + resources.ApplyResources(this.ddlMode2, "ddlMode2"); + this.ddlMode2.Name = "ddlMode2"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // ddlIso + // + this.ddlIso.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlIso.FormattingEnabled = true; + resources.ApplyResources(this.ddlIso, "ddlIso"); + this.ddlIso.Name = "ddlIso"; + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // ddlExRollback + // + this.ddlExRollback.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlExRollback.FormattingEnabled = true; + resources.ApplyResources(this.ddlExRollback, "ddlExRollback"); + this.ddlExRollback.Name = "ddlExRollback"; + // + // textBox1 + // + resources.ApplyResources(this.textBox1, "textBox1"); + this.textBox1.Name = "textBox1"; + // + // label6 + // + resources.ApplyResources(this.label6, "label6"); + this.label6.Name = "label6"; + // + // label7 + // + resources.ApplyResources(this.label7, "label7"); + this.label7.Name = "label7"; + // + // label8 + // + resources.ApplyResources(this.label8, "label8"); + this.label8.Name = "label8"; + // + // textBox2 + // + resources.ApplyResources(this.textBox2, "textBox2"); + this.textBox2.Name = "textBox2"; + // + // textBox3 + // + resources.ApplyResources(this.textBox3, "textBox3"); + this.textBox3.Name = "textBox3"; + // + // label9 + // + resources.ApplyResources(this.label9, "label9"); + this.label9.Name = "label9"; + // + // ddlOrderColumn + // + this.ddlOrderColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlOrderColumn.FormattingEnabled = true; + resources.ApplyResources(this.ddlOrderColumn, "ddlOrderColumn"); + this.ddlOrderColumn.Name = "ddlOrderColumn"; + // + // label10 + // + resources.ApplyResources(this.label10, "label10"); + this.label10.Name = "label10"; + // + // ddlOrderSequence + // + this.ddlOrderSequence.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlOrderSequence.FormattingEnabled = true; + resources.ApplyResources(this.ddlOrderSequence, "ddlOrderSequence"); + this.ddlOrderSequence.Name = "ddlOrderSequence"; + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + resources.ApplyResources(this.dataGridView1, "dataGridView1"); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.RowTemplate.Height = 21; + // + // btnButton1 + // + resources.ApplyResources(this.btnButton1, "btnButton1"); + this.btnButton1.Name = "btnButton1"; + this.btnButton1.UseVisualStyleBackColor = true; + // + // btnButton2 + // + resources.ApplyResources(this.btnButton2, "btnButton2"); + this.btnButton2.Name = "btnButton2"; + this.btnButton2.UseVisualStyleBackColor = true; + // + // btnButton3 + // + resources.ApplyResources(this.btnButton3, "btnButton3"); + this.btnButton3.Name = "btnButton3"; + this.btnButton3.UseVisualStyleBackColor = true; + // + // btnButton4 + // + resources.ApplyResources(this.btnButton4, "btnButton4"); + this.btnButton4.Name = "btnButton4"; + this.btnButton4.UseVisualStyleBackColor = true; + // + // btnButton5 + // + resources.ApplyResources(this.btnButton5, "btnButton5"); + this.btnButton5.Name = "btnButton5"; + this.btnButton5.UseVisualStyleBackColor = true; + // + // btnButton6 + // + resources.ApplyResources(this.btnButton6, "btnButton6"); + this.btnButton6.Name = "btnButton6"; + this.btnButton6.UseVisualStyleBackColor = true; + // + // btnButton7 + // + resources.ApplyResources(this.btnButton7, "btnButton7"); + this.btnButton7.Name = "btnButton7"; + this.btnButton7.UseVisualStyleBackColor = true; + // + // btnButton8 + // + resources.ApplyResources(this.btnButton8, "btnButton8"); + this.btnButton8.Name = "btnButton8"; + this.btnButton8.UseVisualStyleBackColor = true; + // + // btnButton9 + // + resources.ApplyResources(this.btnButton9, "btnButton9"); + this.btnButton9.Name = "btnButton9"; + this.btnButton9.UseVisualStyleBackColor = true; + // + // btnButton10 + // + resources.ApplyResources(this.btnButton10, "btnButton10"); + this.btnButton10.Name = "btnButton10"; + this.btnButton10.UseVisualStyleBackColor = true; + // + // labelMessage + // + resources.ApplyResources(this.labelMessage, "labelMessage"); + this.labelMessage.Name = "labelMessage"; + // + // label11 + // + resources.ApplyResources(this.label11, "label11"); + this.label11.Name = "label11"; + // + // label16 + // + resources.ApplyResources(this.label16, "label16"); + this.label16.Name = "label16"; + // + // textBox7 + // + resources.ApplyResources(this.textBox7, "textBox7"); + this.textBox7.Name = "textBox7"; + // + // btnButton12 + // + resources.ApplyResources(this.btnButton12, "btnButton12"); + this.btnButton12.Name = "btnButton12"; + this.btnButton12.UseVisualStyleBackColor = true; + // + // label15 + // + resources.ApplyResources(this.label15, "label15"); + this.label15.Name = "label15"; + // + // textBox6 + // + resources.ApplyResources(this.textBox6, "textBox6"); + this.textBox6.Name = "textBox6"; + // + // label14 + // + resources.ApplyResources(this.label14, "label14"); + this.label14.Name = "label14"; + // + // textBox5 + // + resources.ApplyResources(this.textBox5, "textBox5"); + this.textBox5.Name = "textBox5"; + // + // btnButton11 + // + resources.ApplyResources(this.btnButton11, "btnButton11"); + this.btnButton11.Name = "btnButton11"; + this.btnButton11.UseVisualStyleBackColor = true; + // + // label13 + // + resources.ApplyResources(this.label13, "label13"); + this.label13.Name = "label13"; + // + // textBox4 + // + resources.ApplyResources(this.textBox4, "textBox4"); + this.textBox4.Name = "textBox4"; + // + // Form1 + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label16); + this.Controls.Add(this.textBox7); + this.Controls.Add(this.btnButton12); + this.Controls.Add(this.label15); + this.Controls.Add(this.textBox6); + this.Controls.Add(this.label14); + this.Controls.Add(this.textBox5); + this.Controls.Add(this.btnButton11); + this.Controls.Add(this.label13); + this.Controls.Add(this.textBox4); + this.Controls.Add(this.label11); + this.Controls.Add(this.labelMessage); + this.Controls.Add(this.btnButton10); + this.Controls.Add(this.btnButton9); + this.Controls.Add(this.btnButton8); + this.Controls.Add(this.btnButton7); + this.Controls.Add(this.btnButton6); + this.Controls.Add(this.btnButton5); + this.Controls.Add(this.btnButton4); + this.Controls.Add(this.btnButton3); + this.Controls.Add(this.btnButton2); + this.Controls.Add(this.btnButton1); + this.Controls.Add(this.dataGridView1); + this.Controls.Add(this.label10); + this.Controls.Add(this.ddlOrderSequence); + this.Controls.Add(this.label9); + this.Controls.Add(this.ddlOrderColumn); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.label8); + this.Controls.Add(this.label7); + this.Controls.Add(this.label6); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label5); + this.Controls.Add(this.ddlExRollback); + this.Controls.Add(this.label4); + this.Controls.Add(this.ddlIso); + this.Controls.Add(this.label3); + this.Controls.Add(this.ddlMode2); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.ddlMode1); + this.Controls.Add(this.ddlDap); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Form1"; + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ComboBox ddlDap; + private System.Windows.Forms.ComboBox ddlMode1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox ddlMode2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox ddlIso; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ComboBox ddlExRollback; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.ComboBox ddlOrderColumn; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.ComboBox ddlOrderSequence; + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.Button btnButton1; + private System.Windows.Forms.Button btnButton2; + private System.Windows.Forms.Button btnButton3; + private System.Windows.Forms.Button btnButton4; + private System.Windows.Forms.Button btnButton5; + private System.Windows.Forms.Button btnButton6; + private System.Windows.Forms.Button btnButton7; + private System.Windows.Forms.Button btnButton8; + private System.Windows.Forms.Button btnButton9; + private System.Windows.Forms.Button btnButton10; + private System.Windows.Forms.Label labelMessage; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.Button btnButton12; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox textBox6; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.Button btnButton11; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox textBox4; + } +} + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.cs new file mode 100644 index 000000000..8d3d4722d --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.cs @@ -0,0 +1,648 @@ +//********************************************************************************** +//* サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form1 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using _2CSClientWin_sample.Business; +using _2CSClientWin_sample.Common; + +using System; +using System.Data; + +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Presentation; +using Touryo.Infrastructure.Framework.Util; +using Touryo.Infrastructure.Public.Db; + +namespace _2CSClientWin_sample +{ + /// サンプル アプリ画面 + public partial class Form1 : MyBaseControllerWin + { + + #region 初期処理 + + /// コンストラクタ + public Form1() + { + InitializeComponent(); + } + + /// + /// フォームロードのUOCメソッド(個別) + /// + protected override void UOC_FormInit() + { + // フォーム初期化(初回ロード)時に実行する処理を実装する + + // TODO: + + // ddlDap + this.ddlDap.Items.Add(new ComboBoxItem("SQL Server / SQL Client", "SQL")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / OLEDB.NET", "OLE")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / ODCB.NET", "ODB")); + this.ddlDap.Items.Add(new ComboBoxItem("Oracle / ODP.NET", "ODP")); + this.ddlDap.Items.Add(new ComboBoxItem("DB2 / DB2.NET", "DB2")); + this.ddlDap.Items.Add(new ComboBoxItem("HiRDB / HiRDB-DP", "HIR")); + this.ddlDap.Items.Add(new ComboBoxItem("MySQL Cnn/NET", "MCN")); + this.ddlDap.Items.Add(new ComboBoxItem("PostgreSQL / Npgsql", "NPS")); + this.ddlDap.SelectedIndex = 0; + + // ddlMode1 + this.ddlMode1.Items.Add(new ComboBoxItem("個別Dao", "individual")); + this.ddlMode1.Items.Add(new ComboBoxItem("共通Dao", "common")); + this.ddlMode1.Items.Add(new ComboBoxItem("自動生成Dao(更新のみ)", "generate")); + this.ddlMode1.SelectedIndex = 0; + + // ddlMode2 + this.ddlMode2.Items.Add(new ComboBoxItem("静的クエリ", "static")); + this.ddlMode2.Items.Add(new ComboBoxItem("動的クエリ", "dynamic")); + this.ddlMode2.SelectedIndex = 0; + + // ddlIso + this.ddlIso.Items.Add(new ComboBoxItem("ノットコネクト", "NC")); + this.ddlIso.Items.Add(new ComboBoxItem("ノートランザクション", "NT")); + this.ddlIso.Items.Add(new ComboBoxItem("ダーティリード", "RU")); + this.ddlIso.Items.Add(new ComboBoxItem("リードコミット", "RC")); + this.ddlIso.Items.Add(new ComboBoxItem("リピータブルリード", "RR")); + this.ddlIso.Items.Add(new ComboBoxItem("シリアライザブル", "SZ")); + this.ddlIso.Items.Add(new ComboBoxItem("スナップショット", "SS")); + this.ddlIso.Items.Add(new ComboBoxItem("デフォルト", "DF")); + this.ddlIso.SelectedIndex = 1; + + // ddlExRollback + this.ddlExRollback.Items.Add(new ComboBoxItem("正常時", "-")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外", "Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外", "System")); + this.ddlExRollback.Items.Add(new ComboBoxItem("その他、一般的な例外", "Other")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外への振替", "Other-Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外への振替", "Other-System")); + this.ddlExRollback.SelectedIndex = 0; + + // ddlOrderColumn + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c1", "c1")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c2", "c2")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c3", "c3")); + this.ddlOrderColumn.SelectedIndex = 0; + + // ddlOrderSequence + this.ddlOrderSequence.Items.Add(new ComboBoxItem("ASC", "A")); + this.ddlOrderSequence.Items.Add(new ComboBoxItem("DESC", "D")); + this.ddlOrderSequence.SelectedIndex = 0; + } + + #region コンボボックス用 + + /// コンボボックス用インナークラス + private class ComboBoxItem + { + /// 表示名 + private string m_name = ""; + + /// + private string m_value = ""; + + /// コンストラクタ + public ComboBoxItem(string name, string value) + { + m_name = name; + m_value = value; + } + + /// 表示名 + public string Name + { + get + { + return m_name; + } + } + + /// + public string Value + { + get + { + return m_value; + } + } + + /// + /// オーバーライドしたメソッド + /// これがコンボボックスに表示される + /// + public override string ToString() + { + return m_name; + } + } + + #endregion + + #endregion + + #region CRUD処理メソッド + + #region 参照系 + + /// 件数取得 + /// イベントハンドラの共通引数 + protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectCount", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Text = testReturnValue.Obj.ToString() + "件のデータがあります"; + } + } + + /// 一覧取得(dt) + /// イベントハンドラの共通引数 + protected void UOC_btnButton2_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DT", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = testReturnValue.Obj; + } + } + + /// 一覧取得(ds) + /// イベントハンドラの共通引数 + protected void UOC_btnButton3_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DS", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = ((DataSet)testReturnValue.Obj).Tables[0]; + } + } + + /// 一覧取得(dr) + /// イベントハンドラの共通引数 + protected void UOC_btnButton4_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DR", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = testReturnValue.Obj; + } + } + + /// 一覧取得(動的sql) + /// イベントハンドラの共通引数 + protected void UOC_btnButton5_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DSQL", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 動的SQLの要素を設定 + testParameterValue.OrderColumn = ((ComboBoxItem)this.ddlOrderColumn.SelectedItem).Value; + testParameterValue.OrderSequence = ((ComboBoxItem)this.ddlOrderSequence.SelectedItem).Value; + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = testReturnValue.Obj; + } + } + + /// 参照処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton6_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Select", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.textBox1.Text = testReturnValue.ShipperID.ToString(); + this.textBox2.Text = testReturnValue.CompanyName; + this.textBox3.Text = testReturnValue.Phone; + } + } + + #endregion + + #region 更新系 + + /// 追加処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton7_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Insert", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Text = testReturnValue.Obj.ToString() + "件追加"; + } + } + + /// 更新処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton8_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Update", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Text = testReturnValue.Obj.ToString() + "件更新"; + } + } + + /// 削除処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton9_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Delete", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(textBox1.Text); + + // 戻り値 + TestReturnValue testReturnValue; + + // 分離レベルの設定 + DbEnum.IsolationLevelEnum iso = this.SelectIsolationLevel(); + + // B層呼出し+都度コミット + LayerB layerB = new LayerB(); + testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); + LayerB.CommitAndClose(); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Text = testReturnValue.Obj.ToString() + "件削除"; + } + } + + #endregion + + #endregion + + #region その他 + + /// クリア + /// イベントハンドラの共通引数 + protected void UOC_btnButton10_Click(RcFxEventArgs rcFxEventArgs) + { + this.dataGridView1.DataSource = null; + } + + /// メッセージ取得(埋め込まれたリソース対応) + /// イベントハンドラの共通引数 + protected void UOC_btnButton11_Click(RcFxEventArgs rcFxEventArgs) + { + this.textBox5.Text = GetMessage.GetMessageDescription(this.textBox4.Text); + } + + /// 共有情報取得(埋め込まれたリソース対応) + /// イベントハンドラの共通引数 + protected void UOC_btnButton12_Click(RcFxEventArgs rcFxEventArgs) + { + this.textBox7.Text = GetSharedProperty.GetSharedPropertyValue(this.textBox6.Text); + } + + #endregion + + #region 分離レベルの設定メソッド + + /// 分離レベルの設定 + private DbEnum.IsolationLevelEnum SelectIsolationLevel() + { + if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "NC") + { + return DbEnum.IsolationLevelEnum.NotConnect; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "NT") + { + return DbEnum.IsolationLevelEnum.NoTransaction; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "RU") + { + return DbEnum.IsolationLevelEnum.ReadUncommitted; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "RC") + { + return DbEnum.IsolationLevelEnum.ReadCommitted; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "RR") + { + return DbEnum.IsolationLevelEnum.RepeatableRead; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "SZ") + { + return DbEnum.IsolationLevelEnum.Serializable; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "SS") + { + return DbEnum.IsolationLevelEnum.Snapshot; + } + else if (((ComboBoxItem)this.ddlIso.SelectedItem).Value == "DF") + { + return DbEnum.IsolationLevelEnum.DefaultTransaction; + } + else + { + throw new Exception("分離レベルの設定がおかしい"); + } + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.resx b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.resx new file mode 100644 index 000000000..cda82aece --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Form1.resx @@ -0,0 +1,1194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 12, 27 + + + 250, 20 + + + + 1 + + + ddlDap + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 42 + + + 12, 65 + + + 250, 20 + + + 2 + + + ddlMode1 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 41 + + + True + + + 12, 12 + + + 237, 12 + + + 3 + + + データアクセス制御クラス(データプロバイダ)を選択 + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 40 + + + True + + + 10, 50 + + + 151, 12 + + + 4 + + + 個別、共通のDao種別を選択 + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 39 + + + True + + + 10, 88 + + + 252, 12 + + + 6 + + + 静的、動的のクエリ モードを選択(共通Dao選択時) + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 37 + + + 12, 103 + + + 250, 20 + + + 5 + + + ddlMode2 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 38 + + + True + + + 10, 126 + + + 91, 12 + + + 8 + + + 分離レベルを選択 + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 35 + + + 12, 141 + + + 250, 20 + + + 7 + + + ddlIso + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 36 + + + True + + + 10, 164 + + + 258, 12 + + + 10 + + + コミット、ロールバックを設定(例外発生時、ロールバック + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 33 + + + 12, 179 + + + 250, 20 + + + 9 + + + ddlExRollback + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 34 + + + 110, 229 + + + 152, 19 + + + 11 + + + textBox1 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 32 + + + True + + + 10, 232 + + + 60, 12 + + + 12 + + + ShipperID: + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 31 + + + True + + + 10, 252 + + + 87, 12 + + + 13 + + + CompanyName: + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 30 + + + True + + + 10, 273 + + + 42, 12 + + + 14 + + + Phone: + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 29 + + + 110, 249 + + + 152, 19 + + + 15 + + + textBox2 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 28 + + + 110, 270 + + + 152, 19 + + + 16 + + + textBox3 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 27 + + + True + + + 10, 316 + + + 84, 12 + + + 18 + + + 並び替え対象列 + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 25 + + + 12, 331 + + + 250, 20 + + + 17 + + + ddlOrderColumn + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 26 + + + True + + + 10, 358 + + + 59, 12 + + + 20 + + + 昇順・降順 + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 23 + + + 12, 373 + + + 250, 20 + + + 19 + + + ddlOrderSequence + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 24 + + + 274, 12 + + + 464, 358 + + + 21 + + + dataGridView1 + + + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 22 + + + 12, 444 + + + 140, 23 + + + 22 + + + 件数取得 + + + btnButton1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 21 + + + 158, 444 + + + 140, 23 + + + 23 + + + 一覧取得(dt) + + + btnButton2 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 20 + + + 304, 444 + + + 140, 23 + + + 24 + + + 一覧取得(ds) + + + btnButton3 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 19 + + + 450, 444 + + + 140, 23 + + + 25 + + + 一覧取得(dr) + + + btnButton4 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 18 + + + 596, 444 + + + 140, 23 + + + 26 + + + 一覧取得(動的SQL) + + + btnButton5 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 17 + + + 12, 473 + + + 140, 23 + + + 27 + + + 一件参照 + + + btnButton6 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 16 + + + 158, 473 + + + 140, 23 + + + 28 + + + 追加 + + + btnButton7 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 15 + + + 304, 473 + + + 140, 23 + + + 29 + + + 更新 + + + btnButton8 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 14 + + + 450, 473 + + + 140, 23 + + + 30 + + + 削除 + + + btnButton9 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 13 + + + 274, 376 + + + 464, 23 + + + 34 + + + クリア + + + btnButton10 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 12 + + + True + + + 108, 409 + + + 23, 12 + + + 35 + + + *** + + + labelMessage + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 11 + + + True + + + 10, 409 + + + 59, 12 + + + 36 + + + 処理結果: + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + + + True + + + + NoControl + + + 237, 540 + + + 23, 12 + + + 91 + + + 値: + + + label16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 299, 537 + + + 439, 19 + + + 89 + + + textBox7 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + NoControl + + + 189, 535 + + + 42, 23 + + + 88 + + + + + + btnButton12 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + True + + + NoControl + + + 10, 540 + + + 31, 12 + + + 90 + + + キー: + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 83, 537 + + + 100, 19 + + + 87 + + + textBox6 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + True + + + NoControl + + + 237, 515 + + + 56, 12 + + + 86 + + + メッセージ: + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + 299, 512 + + + 439, 19 + + + 84 + + + textBox5 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + NoControl + + + 189, 510 + + + 42, 23 + + + 83 + + + + + + btnButton11 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + True + + + NoControl + + + 10, 515 + + + 67, 12 + + + 85 + + + メッセージID: + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + 83, 512 + + + 100, 19 + + + 82 + + + textBox4 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + True + + + 6, 12 + + + 750, 565 + + + Form1 + + + Form1 + + + Touryo.Infrastructure.Business.RichClient.Presentation.MyBaseControllerWin, Business.RichClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.Designer.cs new file mode 100644 index 000000000..8a9591a4b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.Designer.cs @@ -0,0 +1,81 @@ +namespace _2CSClientWin_sample +{ + partial class Login + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.btnButton1 = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // btnButton1 + // + this.btnButton1.Location = new System.Drawing.Point(118, 12); + this.btnButton1.Name = "btnButton1"; + this.btnButton1.Size = new System.Drawing.Size(75, 44); + this.btnButton1.TabIndex = 2; + this.btnButton1.Text = "ログイン"; + this.btnButton1.UseVisualStyleBackColor = true; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(100, 19); + this.textBox1.TabIndex = 0; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(12, 37); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(100, 19); + this.textBox2.TabIndex = 1; + this.textBox2.UseSystemPasswordChar = true; + // + // Login + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(202, 70); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.btnButton1); + this.Name = "Login"; + this.Text = "login"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnButton1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.cs new file mode 100644 index 000000000..9634e7d84 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.cs @@ -0,0 +1,53 @@ +//********************************************************************************** +//* サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :login +//* クラス日本語名 :ログイン画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Presentation; + +namespace _2CSClientWin_sample +{ + /// login + public partial class Login : MyBaseControllerWin + { + /// コンストラクタ + public Login() + { + InitializeComponent(); + + Program.FlagEnd = true; //フラグ初期化 + } + + /// フォームロードのUOCメソッド + protected override void UOC_FormInit() + { + } + + /// ログイン + /// イベントハンドラの共通引数 + protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) + { + MyBaseControllerWin.UserInfo.UserName = this.textBox1.Text; + MyBaseControllerWin.UserInfo.IPAddress = Environment.MachineName; + + Program.FlagEnd = false; // フラグ完了 + this.Close(); + } + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.resx b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Login.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/MSGDefinition.xml new file mode 100644 index 000000000..f2283b409 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/MSGDefinition.xml @@ -0,0 +1,23 @@ + + + + +]> + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Program.cs new file mode 100644 index 000000000..b9a86142a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Program.cs @@ -0,0 +1,115 @@ +//********************************************************************************** +//* サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :アプリケーションのメイン エントリ ポイント +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Util; + +namespace _2CSClientWin_sample +{ + /// アプリケーションのメイン エントリ ポイント + static class Program + { + /// 終了するかどうかを表すフラグ + public static bool FlagEnd = true; + + /// + /// アプリケーションのメイン エントリ ポイントです。 + /// + [STAThread] + static void Main() + { + // 既定の処理 + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + // UnhandledExceptionイベント・ハンドラを登録する + Thread.GetDomain().UnhandledException += new + UnhandledExceptionEventHandler(Application_UnhandledException); + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // スプラッシュ画面の表示 + Splash.ShowSplash(new Login()); + + // <スピンロック> + // SleepすればCPUオーバヘッドはほとんど無いが + // Sleep時間を長く、ループ回数を短くする + // ことでよりCPUオーバヘッドを軽減できる。 + + for (int i = 0; i < 30; i++ ) + { + if (Splash.SpinLock) + { + break; // 直ちに抜ける + } + + Thread.Sleep(100); + } + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // 次の画面(ログイン画面)の表示 + Application.Run(Splash.NextForm); + if(Program.FlagEnd) + { + return; // ログインしないで終わった場合 + } + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // 業務画面の表示(業務の開始) + Application.Run(new Form1()); + } + + // .NET TIPS > 適切に処理されなかった例外をキャッチするには? + // http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html + + /// + /// 未処理例外をキャッチするイベント・ハンドラ + /// + public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) + { + RcMyCmnFunction.ShowErrorMessageWin(e.Exception, "Application_ThreadExceptionによる例外通知です。"); + } + + /// + /// 未処理例外をキャッチするイベント・ハンドラ + /// + /// + /// メイン・スレッド以外の例外はUnhandledExceptionでハンドル + /// + public static void Application_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + Exception ex = e.ExceptionObject as Exception; + if (ex != null) + { + RcMyCmnFunction.ShowErrorMessageWin(ex, "Application_UnhandledExceptionによる例外通知です。"); + } + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..1393eed17 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Properties/AssemblyInfo.cs @@ -0,0 +1,51 @@ +//********************************************************************************** +//* サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("2CSClientWin_sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("2CSClientWin_sample")] +[assembly: AssemblyCopyright("Copyright (C) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です +[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/SPDefinition.xml new file mode 100644 index 000000000..6baf634bc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/SPDefinition.xml @@ -0,0 +1,15 @@ + + + + +]> + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/SampleLogConf2CS.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/SampleLogConf2CS.xml new file mode 100644 index 000000000..e39f2b3fe --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/SampleLogConf2CS.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.Designer.cs new file mode 100644 index 000000000..35ad2deb1 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.Designer.cs @@ -0,0 +1,60 @@ +namespace _2CSClientWin_sample +{ + partial class Splash + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("MS UI Gothic", 64F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label1.Location = new System.Drawing.Point(15, 93); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(262, 86); + this.label1.TabIndex = 0; + this.label1.Text = "splash"; + // + // Splash + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 273); + this.Controls.Add(this.label1); + this.Name = "Splash"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.cs new file mode 100644 index 000000000..8daca4f59 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.cs @@ -0,0 +1,188 @@ +//********************************************************************************** +//* サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Splash +//* クラス日本語名 :スプラッシュ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Windows.Forms; + +using Touryo.Infrastructure.Public.Log; + +namespace _2CSClientWin_sample +{ + /// + /// スプラッシュ画面 + /// + /// + /// DOBON.NET > プログラミング道 > .NET Tips + /// > フォーム > スプラッシュウィンドウを表示する + /// http://dobon.net/vb/dotnet/form/splashwindow.html + /// + /// ここでは、フレームワークは使用しない。 + /// + public partial class Splash : Form + { + /// コンストラクタ + public Splash() + { + InitializeComponent(); + + // プロパティの初期化 + this.TopMost = true; + this.ShowInTaskbar = false; + this.FormBorderStyle = FormBorderStyle.None; + this.StartPosition = FormStartPosition.CenterScreen; + + // イベントの設定 + this.Click += new System.EventHandler(Splash.Splash_Click); + this.label1.Click += new System.EventHandler(Splash.Splash_Click); + + // ログの初期化 + LogIF.InfoLog("ACCESS", "Splash"); + } + + /// + /// スプラッシュ画面のクリックイベント + /// + private static void Splash_Click(object sender, EventArgs e) + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // スピンロックを終了させ次画面を表示する。 + Splash._spinLock = true; + } + + #region 静的変数 + + /// 実行済みフラグ + private static bool _hasExecuted = false; + + /// スプラッシュ画面表示スレッド + private static Thread _thread = null; + + /// スピンロック用フラグ + /// volatile:スレッドセーフ + private static volatile bool _spinLock = false; + + /// スピンロック用フラグ(Getter) + public static bool SpinLock + { + get { return Splash._spinLock; } + } + + /// スプラッシュ画面(シングルトン) + /// volatile:スレッドセーフ + private static volatile Splash _splashForm = new Splash(); + + /// 次の画面(シングルトン) + /// volatile:スレッドセーフ + private static volatile Form _nextForm = null; + + /// 次の画面(Getter) + public static Form NextForm + { + get { return Splash._nextForm; } + } + + #endregion + + #region スプラッシュ画面を表示する + + /// スプラッシュ画面を表示する + /// 次の画面 + public static void ShowSplash(Form nextForm) + { + // 主スレッド(スプラッシュ画面を生成していないスレッド) + + // 二回以上は起動できない。 + if (Splash._hasExecuted) + { + return; + } + else + { + Splash._hasExecuted = true; + } + + #region スプラッシュ画面を表示 + + // 次の画面を設定する。 + Splash._nextForm = nextForm; +   + // スレッドの作成 + Splash._thread = new Thread( + new ThreadStart(ShowSplashByThread)); + + // スレッドの開始 + Splash._thread.Start(); + + #endregion + } + + /// Thread関数でスプラッシュ画面を表示する。 + private static void ShowSplashByThread() + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // スプラッシュ画面を + + // ・作成 + Splash._splashForm = new Splash(); + + // ・閉じるイベントハンドラを仕掛 + Splash._nextForm.Activated += new EventHandler(Splash.Login_Activated); + + // ・表示 + Application.Run(Splash._splashForm); + } + + #endregion + + #region スプラッシュ画面を閉じる + + /// + /// ログイン画面がアクティブになった時、スプラッシュ画面を閉じる + /// + private static void Login_Activated(object sender, EventArgs e) + { + // 主スレッド(スプラッシュ画面を生成していないスレッド) + + // なので、スプラッシュ画面を閉じるメソッドをInvoke + if (Splash._splashForm != null && !Splash._splashForm.IsDisposed) + { + Splash._splashForm.Invoke(new MethodInvoker(Splash.CloseSplash)); + } + + // nullクリア + Splash._splashForm = null; + Splash._nextForm = null; + Splash._thread = null; + } + + /// スプラッシュ画面を閉じる。 + private static void CloseSplash() + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // なので、スプラッシュ画面をそのまま閉じる + Splash._splashForm.Close(); + } + + #endregion + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.resx b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Splash.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/app.config new file mode 100644 index 000000000..f7b5dbeb2 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/app.config @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/AsyncEvent_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/AsyncEvent_sample.sln new file mode 100644 index 000000000..d7d27694f --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/AsyncEvent_sample.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsApplication", "WindowsFormsApplication\WindowsFormsApplication.csproj", "{17284ADF-2F82-412E-8D83-02E5C1606F53}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfApplication", "WpfApplication\WpfApplication.csproj", "{14296AF4-CB38-44B9-A42D-C104FE16CE33}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {17284ADF-2F82-412E-8D83-02E5C1606F53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {17284ADF-2F82-412E-8D83-02E5C1606F53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {17284ADF-2F82-412E-8D83-02E5C1606F53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {17284ADF-2F82-412E-8D83-02E5C1606F53}.Release|Any CPU.Build.0 = Release|Any CPU + {14296AF4-CB38-44B9-A42D-C104FE16CE33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {14296AF4-CB38-44B9-A42D-C104FE16CE33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {14296AF4-CB38-44B9-A42D-C104FE16CE33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {14296AF4-CB38-44B9-A42D-C104FE16CE33}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/Readme.txt b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/Readme.txt new file mode 100644 index 000000000..4eb146b45 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/Readme.txt @@ -0,0 +1,5 @@ +非同期イベント処理の利用サンプル + +slnをビルドして、 +「test-win×2&wpf×2.bat」 +バッチから実行できる。 \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.Designer.cs new file mode 100644 index 000000000..1e0cc39f1 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.Designer.cs @@ -0,0 +1,164 @@ +namespace WindowsFormsApplication +{ + partial class Form1 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.txtMSG = new System.Windows.Forms.TextBox(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.lblMSG = new System.Windows.Forms.Label(); + this.button5 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(12, 31); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(150, 23); + this.button1.TabIndex = 0; + this.button1.Text = "スレッド(Win)"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // txtMSG + // + this.txtMSG.Location = new System.Drawing.Point(66, 6); + this.txtMSG.Name = "txtMSG"; + this.txtMSG.Size = new System.Drawing.Size(251, 19); + this.txtMSG.TabIndex = 1; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(168, 31); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(150, 23); + this.button2.TabIndex = 2; + this.button2.Text = "スレッドプール(Win)"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(12, 60); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(150, 23); + this.button3.TabIndex = 3; + this.button3.Text = "WinForm-UIInvoke"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(168, 60); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(150, 23); + this.button4.TabIndex = 4; + this.button4.Text = "WPF-UIInvoke"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // lblMSG + // + this.lblMSG.AutoSize = true; + this.lblMSG.Location = new System.Drawing.Point(10, 9); + this.lblMSG.Name = "lblMSG"; + this.lblMSG.Size = new System.Drawing.Size(50, 12); + this.lblMSG.TabIndex = 5; + this.lblMSG.Text = "メッセージ"; + // + // button5 + // + this.button5.Location = new System.Drawing.Point(12, 89); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(305, 23); + this.button5.TabIndex = 6; + this.button5.Text = "へんなところにつなぐ"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(13, 118); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(305, 23); + this.button6.TabIndex = 7; + this.button6.Text = "エントリ登録"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(13, 147); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(305, 23); + this.button7.TabIndex = 8; + this.button7.Text = "エントリ削除"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(329, 177); + this.Controls.Add(this.button7); + this.Controls.Add(this.button6); + this.Controls.Add(this.button5); + this.Controls.Add(this.lblMSG); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.txtMSG); + this.Controls.Add(this.button1); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TextBox txtMSG; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Label lblMSG; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button7; + } +} + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.cs new file mode 100644 index 000000000..3bff70c73 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.cs @@ -0,0 +1,290 @@ +//********************************************************************************** +//* 非同期イベント・サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form1 +//* クラス日本語名 :Form1 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.IO; +using System.Threading; +using System.Windows.Forms; + +using Touryo.Infrastructure.Framework.RichClient.Asynchronous; +using Touryo.Infrastructure.Public.IO; + +namespace WindowsFormsApplication +{ + public partial class Form1 : Form + { + #region メンバ変数 + + /// 名前付きパイプ・サーバ名 + private string NPS = null; + /// 名前付きパイプ・クライアント + private string[] NPCS = null; + + /// 登録エントリ(Thread) + private AsyncEventEntry AeeTh = null; + /// 登録エントリ(ThreadPool) + private AsyncEventEntry AeePl = null; + /// 登録エントリ(WinForm) + private AsyncEventEntry AeeWin = null; + /// 登録エントリ(WPF) + private AsyncEventEntry AeeWPF = null; + + #endregion + + #region 開始・終了処理 + + #region 開始処理 + + /// コンストラクタ + public Form1() + { + InitializeComponent(); + + // サーバを起動 + string[] args = Environment.CommandLine.Split('/'); + args = args[1].Trim().Split(','); + + // this.NPS + this.NPS = args[0].Trim(); + this.Text = this.NPS; + + // this.NPCS + this.NPCS = new string[args.Length - 1]; + for (int i = 1; i < args.Length; i++) + { + this.NPCS[i-1] = args[i].Trim(); + } + + // 初期化 + + // 初めが自分の名称、 + + //// 2つ目からが相手の名称 + //MessageBox.Show( + // "this.NPS:" + this.NPS + // + "\r\nthis.NPCS:" + string.Join(",", this.NPCS), + // "コマンドラインのチェック"); + + AsyncEventFx.Init(this.NPS, this.NPCS, 3000); + } + + /// 初期処理 + private void Form1_Load(object sender, EventArgs e) + { + // 登録エントリ + + // スレッド + this.AeeTh = new AsyncEventEntry( + AsyncEventEnum.EventClass.Thread, "Thread", null, + new ParameterizedThreadStart(this.ParameterizedThreadStartDgt)); + + AsyncEventFx.RegisterAsyncEvent(this.AeeTh); + + // --- + + // スレッド プール + this.AeePl = new AsyncEventEntry( + AsyncEventEnum.EventClass.ThreadPool, "ThreadPool", null, + new WaitCallback(this.WaitCallbackDgt)); + + AsyncEventFx.RegisterAsyncEvent(this.AeePl); + + // --- + + // WinForm + this.AeeWin = new AsyncEventEntry( + AsyncEventEnum.EventClass.WinForm, "WinForm", this, + new AsyncEventFx.SetResultDelegate(this.SetResultDgt)); + + AsyncEventFx.RegisterAsyncEvent(this.AeeWin); + + // --- + + // WPF + this.AeeWPF = new AsyncEventEntry( + AsyncEventEnum.EventClass.WPF, "WPF", this, + new AsyncEventFx.SetResultDelegate(this.SetResultDgt)); + + AsyncEventFx.RegisterAsyncEvent(this.AeeWPF); + } + + #endregion + + #region 終了処理 + + /// 終了処理 + private void Form1_FormClosed(object sender, FormClosedEventArgs e) + { + // 終了 + AsyncEventFx.Final(); + } + + #endregion + + #endregion + + #region 各種デリゲード + + /// デリゲード + private void ParameterizedThreadStartDgt(object obj) + { + object[] param = (object[])obj; + AsyncEventHeader aeh = (AsyncEventHeader)param[0]; + string msg = (string)BinarySerialize.BytesToObject((byte[])param[1]); + + // ファイルにテキストを書き出し。 + using (StreamWriter sw = new StreamWriter(this.NPS + @"_test_pts.txt", true)) + { + sw.WriteLine("\r\n" + this.NPS + " - " + + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + + "WindowsFormsApplication.Form1.ParameterizedThreadStartDgtメソッドが呼ばれた。" + + "\r\nDstEventClass:" + aeh.DstEventClass.ToString() + + "\r\nDstFuncID:" + (new string(aeh.DstFuncID)).Trim() + + "\r\nSrcEventClass:" + aeh.SrcEventClass.ToString() + + "\r\nSrcFuncID:" + (new string(aeh.SrcFuncID)).Trim() + + "\r\nSrcPipeName:" + (new string(aeh.SrcPipeName)).Trim() + + "\r\nメッセージ:" + msg, this.NPS); + } + } + + /// デリゲード + private void WaitCallbackDgt(object state) + { + object[] param = (object[])state; + AsyncEventHeader aeh = (AsyncEventHeader)param[0]; + string msg = (string)BinarySerialize.BytesToObject((byte[])param[1]); + + // ファイルにテキストを書き出し。 + using (StreamWriter sw = new StreamWriter(this.NPS + @"_test_tpl.txt", true)) + { + sw.WriteLine("\r\n" + this.NPS + " - " + + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + + "WindowsFormsApplication.Form1.WaitCallbackDgtメソッドが呼ばれた。" + + "\r\nDstEventClass:" + aeh.DstEventClass.ToString() + + "\r\nDstFuncID:" + (new string(aeh.DstFuncID)).Trim() + + "\r\nSrcEventClass:" + aeh.SrcEventClass.ToString() + + "\r\nSrcFuncID:" + (new string(aeh.SrcFuncID)).Trim() + + "\r\nSrcPipeName:" + (new string(aeh.SrcPipeName)).Trim() + + "\r\nメッセージ:" + msg, this.NPS); + } + } + + /// デリゲード + private void SetResultDgt(object result) + { + object[] param = (object[])result; + AsyncEventHeader aeh = (AsyncEventHeader)param[0]; + string msg = (string)BinarySerialize.BytesToObject((byte[])param[1]); + + MessageBox.Show(this.NPS + " - " + + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + + "WindowsFormsApplication.Form1.SetResultDgtメソッドが呼ばれた。" + + "\r\nDstEventClass:" + aeh.DstEventClass.ToString() + + "\r\nDstFuncID:" + (new string(aeh.DstFuncID)).Trim() + + "\r\nSrcEventClass:" + aeh.SrcEventClass.ToString() + + "\r\nSrcFuncID:" + (new string(aeh.SrcFuncID)).Trim() + + "\r\nSrcPipeName:" + (new string(aeh.SrcPipeName)).Trim() + + "\r\nメッセージ:" + msg, this.NPS); + } + + #endregion + + #region 各種ボタン(イベント送信) + + /// WinFormのThread + private void button1_Click(object sender, EventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.Thread, "Thread", + AsyncEventEnum.EventClass.Thread, "Thread", + this.NPCS[0], this.NPS, (uint)bytes.Length, bytes); + } + + /// WinFormのThreadPool + private void button2_Click(object sender, EventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.ThreadPool, "ThreadPool", + AsyncEventEnum.EventClass.ThreadPool, "ThreadPool", + this.NPCS[0], this.NPS, (uint)bytes.Length, bytes); + } + + /// WinFormのUIInvoke + private void button3_Click(object sender, EventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.WinForm, "WinForm", + AsyncEventEnum.EventClass.WinForm, "WinForm", + this.NPCS[0], this.NPS, (uint)bytes.Length, bytes); + } + + /// WPFのUIInvoke + private void button4_Click(object sender, EventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.WPF, "WPF", + AsyncEventEnum.EventClass.WPF, "WPF", + this.NPCS[1], this.NPS, (uint)bytes.Length, bytes); + } + + /// へんなところ + private void button5_Click(object sender, EventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.WPF, "いいい", + AsyncEventEnum.EventClass.WPF, "いいい", + this.NPCS[1], "あああ", (uint)bytes.Length, bytes); + //this.NPCS[1], this.NPS, (uint)bytes.Length, bytes); + } + + #endregion + + #region 各種ボタン(エントリ) + + /// エントリを登録 + private void button6_Click(object sender, EventArgs e) + { + AsyncEventFx.RegisterAsyncEvent(this.AeeTh); + AsyncEventFx.RegisterAsyncEvent(this.AeePl); + AsyncEventFx.RegisterAsyncEvent(this.AeeWin); + AsyncEventFx.RegisterAsyncEvent(this.AeeWPF); + } + + /// エントリを削除 + private void button7_Click(object sender, EventArgs e) + { + AsyncEventFx.UnRegisterAsyncEvent(this.AeeTh); + AsyncEventFx.UnRegisterAsyncEvent(this.AeePl); + AsyncEventFx.UnRegisterAsyncEvent(this.AeeWin); + AsyncEventFx.UnRegisterAsyncEvent(this.AeeWPF); + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.resx b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Program.cs new file mode 100644 index 000000000..528d40d63 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Program.cs @@ -0,0 +1,38 @@ +//********************************************************************************** +//* 非同期イベント・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :Program +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Windows.Forms; + +namespace WindowsFormsApplication +{ + static class Program + { + /// + /// アプリケーションのメイン エントリ ポイントです。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..b5cef05a7 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Properties/AssemblyInfo.cs @@ -0,0 +1,54 @@ +//********************************************************************************** +//* 非同期イベント・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("WindowsFormsApplication")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("WindowsFormsApplication")] +[assembly: AssemblyCopyright("Copyright (C) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です +[assembly: Guid("c4de3fb7-2d34-4714-9d11-9645e812683e")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を +// 既定値にすることができます: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/WindowsFormsApplication.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/WindowsFormsApplication.csproj new file mode 100644 index 000000000..8acfb0fc2 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/WindowsFormsApplication.csproj @@ -0,0 +1,90 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {17284ADF-2F82-412E-8D83-02E5C1606F53} + WinExe + Properties + WindowsFormsApplication + WindowsFormsApplication + v4.6 + 512 + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/App.xaml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/App.xaml new file mode 100644 index 000000000..630f74bae --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/App.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/App.xaml.cs new file mode 100644 index 000000000..9ceba249a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/App.xaml.cs @@ -0,0 +1,30 @@ +//********************************************************************************** +//* 非同期イベント・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :App +//* クラス日本語名 :App +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Windows; + +namespace WpfApplication +{ + /// + /// App.xaml の相互作用ロジック + /// + public partial class App : Application + { + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..3c53b5c9c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Properties/AssemblyInfo.cs @@ -0,0 +1,72 @@ +//********************************************************************************** +//* 非同期イベント・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; +using System.Windows; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("WpfApplication")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("WpfApplication")] +[assembly: AssemblyCopyright("Copyright (c) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +//ローカライズ可能なアプリケーションのビルドを開始するには、 +//.csproj ファイルの CultureYouAreCodingWith を +// 内部で設定します。たとえば、 +//ソース ファイルで英語を使用している場合、 を en-US に設定します。次に、 +//下の NeutralResourceLanguage 属性のコメントを解除します。下の行の "en-US" を +//プロジェクト ファイルの UICulture 設定と一致するよう更新します。 + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //テーマ固有のリソース ディクショナリが置かれている場所 + //(リソースがページ、 + //またはアプリケーション リソース ディクショナリに見つからない場合に使用されます) + ResourceDictionaryLocation.SourceAssembly //汎用リソース ディクショナリが置かれている場所 + //(リソースがページ、 + //アプリケーション、またはいずれのテーマ固有のリソース ディクショナリにも見つからない場合に使用されます) +)] + + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を +// 既定値にすることができます: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Window1.xaml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Window1.xaml new file mode 100644 index 000000000..ad74ceccb --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Window1.xaml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Window1.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Window1.xaml.cs new file mode 100644 index 000000000..65f6db816 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Window1.xaml.cs @@ -0,0 +1,302 @@ +//********************************************************************************** +//* 非同期イベント・サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form1 +//* クラス日本語名 :Form1 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.IO; +using System.Threading; +using System.Windows; + +using Touryo.Infrastructure.Framework.RichClient.Asynchronous; +using Touryo.Infrastructure.Public.IO; + +namespace WpfApplication +{ + /// + /// Window1.xaml の相互作用ロジック + /// + public partial class Window1 : Window + { + #region メンバ変数 + + /// 名前付きパイプ・サーバ名 + private string NPS = null; + /// 名前付きパイプ・クライアント + private string[] NPCS = null; + + /// 登録エントリ(Thread) + private AsyncEventEntry AeeTh = null; + /// 登録エントリ(ThreadPool) + private AsyncEventEntry AeePl = null; + /// 登録エントリ(WinForm) + private AsyncEventEntry AeeWin = null; + /// 登録エントリ(WPF) + private AsyncEventEntry AeeWPF = null; + + #endregion + + #region 開始・終了処理 + + #region 開始処理 + + /// コンストラクタ + public Window1() + { + InitializeComponent(); + + // サーバを起動 + string[] args = Environment.CommandLine.Split('/'); + args = args[1].Trim().Split(','); + + // this.NPS + this.NPS = args[0].Trim(); + this.Title = this.NPS; + + // this.NPCS + this.NPCS = new string[args.Length - 1]; + for (int i = 1; i < args.Length; i++) + { + this.NPCS[i - 1] = args[i].Trim(); + } + + // 初期化 + + // 初めが自分の名称、 + + //// 2つ目からが相手の名称 + //MessageBox.Show( + // "this.NPS:" + this.NPS + // + "\r\nthis.NPCS:" + string.Join(",", this.NPCS), + // "コマンドラインのチェック"); + + AsyncEventFx.Init(this.NPS, this.NPCS, 3000); + } + + /// ロード + private void Window_Loaded(object sender, RoutedEventArgs e) + { + // 登録エントリ + + // スレッド + this.AeeTh = new AsyncEventEntry( + AsyncEventEnum.EventClass.Thread, "Thread", null, + new ParameterizedThreadStart(this.ParameterizedThreadStartDgt)); + + AsyncEventFx.RegisterAsyncEvent(this.AeeTh); + + // --- + + // スレッド プール + this.AeePl = new AsyncEventEntry( + AsyncEventEnum.EventClass.ThreadPool, "ThreadPool", null, + new WaitCallback(this.WaitCallbackDgt)); + + AsyncEventFx.RegisterAsyncEvent(this.AeePl); + + // --- + + // WinForm + this.AeeWin = new AsyncEventEntry( + AsyncEventEnum.EventClass.WinForm, "WinForm", this, + new AsyncEventFx.SetResultDelegate(this.SetResultDgt)); + + AsyncEventFx.RegisterAsyncEvent(this.AeeWin); + + // --- + + // WPF + this.AeeWPF = new AsyncEventEntry( + AsyncEventEnum.EventClass.WPF, "WPF", this, + new AsyncEventFx.SetResultDelegate(this.SetResultDgt)); + + AsyncEventFx.RegisterAsyncEvent(this.AeeWPF); + } + + #endregion + + #region 終了処理 + + /// アンロード + private void Window_Unloaded(object sender, RoutedEventArgs e) + { + // 終了 + AsyncEventFx.Final(); + } + + // ↑↓どっち?? + + /// クローズ + private void Window_Closed(object sender, EventArgs e) + { + // 終了 + AsyncEventFx.Final(); + } + + #endregion + + #endregion + + #region 各種デリゲード + + /// デリゲード + private void ParameterizedThreadStartDgt(object obj) + { + object[] param = (object[])obj; + AsyncEventHeader aeh = (AsyncEventHeader)param[0]; + string msg = (string)BinarySerialize.BytesToObject((byte[])param[1]); + + // ファイルにテキストを書き出し。 + using (StreamWriter sw = new StreamWriter(this.NPS + @"_test_pts.txt", true)) + { + sw.WriteLine("\r\n" + this.NPS + " - " + + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + + "WpfApplication.Window1.ParameterizedThreadStartDgtメソッドが呼ばれた。" + + "\r\nDstEventClass:" + aeh.DstEventClass.ToString() + + "\r\nDstFuncID:" + (new string(aeh.DstFuncID)).Trim() + + "\r\nSrcEventClass:" + aeh.SrcEventClass.ToString() + + "\r\nSrcFuncID:" + (new string(aeh.SrcFuncID)).Trim() + + "\r\nSrcPipeName:" + (new string(aeh.SrcPipeName)).Trim() + + "\r\nメッセージ:" + msg, this.NPS); + } + } + + /// デリゲード + private void WaitCallbackDgt(object state) + { + object[] param = (object[])state; + AsyncEventHeader aeh = (AsyncEventHeader)param[0]; + string msg = (string)BinarySerialize.BytesToObject((byte[])param[1]); + + // ファイルにテキストを書き出し。 + using (StreamWriter sw = new StreamWriter(this.NPS + @"_test_tpl.txt", true)) + { + sw.WriteLine("\r\n" + this.NPS + " - " + + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + + "WpfApplication.Window1.WaitCallbackDgtメソッドが呼ばれた。" + + "\r\nDstEventClass:" + aeh.DstEventClass.ToString() + + "\r\nDstFuncID:" + (new string(aeh.DstFuncID)).Trim() + + "\r\nSrcEventClass:" + aeh.SrcEventClass.ToString() + + "\r\nSrcFuncID:" + (new string(aeh.SrcFuncID)).Trim() + + "\r\nSrcPipeName:" + (new string(aeh.SrcPipeName)).Trim() + + "\r\nメッセージ:" + msg, this.NPS); + } + } + + /// デリゲード + private void SetResultDgt(object result) + { + object[] param = (object[])result; + AsyncEventHeader aeh = (AsyncEventHeader)param[0]; + string msg = (string)BinarySerialize.BytesToObject((byte[])param[1]); + + MessageBox.Show(this,this.NPS + " - " + + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + + "WpfApplication.Window1.SetResultDgtメソッドが呼ばれた。" + + "\r\nDstEventClass:" + aeh.DstEventClass.ToString() + + "\r\nDstFuncID:" + (new string(aeh.DstFuncID)).Trim() + + "\r\nSrcEventClass:" + aeh.SrcEventClass.ToString() + + "\r\nSrcFuncID:" + (new string(aeh.SrcFuncID)).Trim() + + "\r\nSrcPipeName:" + (new string(aeh.SrcPipeName)).Trim() + + "\r\nメッセージ:" + msg, this.NPS); + } + + #endregion + + #region 各種ボタン + + /// WPFのThread + private void button1_Click(object sender, RoutedEventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.Thread, "Thread", + AsyncEventEnum.EventClass.Thread, "Thread", + this.NPCS[0], this.NPS, (uint)bytes.Length, bytes); + } + + /// WPFのThreadPool + private void button2_Click(object sender, RoutedEventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.ThreadPool, "ThreadPool", + AsyncEventEnum.EventClass.ThreadPool, "ThreadPool", + this.NPCS[0], this.NPS, (uint)bytes.Length, bytes); + } + + /// WPFのUIInvoke + private void button3_Click(object sender, RoutedEventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.WPF, "WPF", + AsyncEventEnum.EventClass.WPF, "WPF", + this.NPCS[0], this.NPS, (uint)bytes.Length, bytes); + } + + /// WinFormのUIInvoke + private void button4_Click(object sender, RoutedEventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.WinForm, "WinForm", + AsyncEventEnum.EventClass.WinForm, "WinForm", + this.NPCS[1], this.NPS, (uint)bytes.Length, bytes); + } + + /// へんなところ + private void button5_Click(object sender, RoutedEventArgs e) + { + byte[] bytes = BinarySerialize.ObjectToBytes(this.txtMSG.Text); + + AsyncEventFx.SendAsyncEvent( + AsyncEventEnum.EventClass.WinForm, "いいい", + AsyncEventEnum.EventClass.WinForm, "いいい", + this.NPCS[1], "あああ", (uint)bytes.Length, bytes); + //this.NPCS[1], this.NPS, (uint)bytes.Length, bytes); + } + + #endregion + + #region 各種ボタン(エントリ) + + /// エントリを登録 + private void button6_Click(object sender, RoutedEventArgs e) + { + AsyncEventFx.RegisterAsyncEvent(this.AeeTh); + AsyncEventFx.RegisterAsyncEvent(this.AeePl); + AsyncEventFx.RegisterAsyncEvent(this.AeeWin); + AsyncEventFx.RegisterAsyncEvent(this.AeeWPF); + } + + /// エントリを削除 + private void button7_Click(object sender, RoutedEventArgs e) + { + AsyncEventFx.UnRegisterAsyncEvent(this.AeeTh); + AsyncEventFx.UnRegisterAsyncEvent(this.AeePl); + AsyncEventFx.UnRegisterAsyncEvent(this.AeeWin); + AsyncEventFx.UnRegisterAsyncEvent(this.AeeWPF); + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/WpfApplication.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/WpfApplication.csproj new file mode 100644 index 000000000..accb99fc2 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/WpfApplication.csproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {14296AF4-CB38-44B9-A42D-C104FE16CE33} + WinExe + Properties + WpfApplication + WpfApplication + v4.6 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/test-winx2&wpfx2.bat b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/test-winx2&wpfx2.bat new file mode 100644 index 000000000..9028bcb40 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/test-winx2&wpfx2.bat @@ -0,0 +1,5 @@ +start WindowsFormsApplication\bin\Debug\WindowsFormsApplication.exe /WinForm1,WinForm2,WPF1 +start WindowsFormsApplication\bin\Debug\WindowsFormsApplication.exe /WinForm2,WinForm1,WPF2 + +start WpfApplication\bin\Debug\WpfApplication.exe /WPF1,WPF2,WinForm1 +start WpfApplication\bin\Debug\WpfApplication.exe /WPF2,WPF1,WinForm2 diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Bean.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Bean.cs new file mode 100644 index 000000000..c180b701c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Bean.cs @@ -0,0 +1,37 @@ +//********************************************************************************** +//* カスタム コントロール・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Bean +//* クラス日本語名 :Bean +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; + +namespace CustCtrl_sample +{ + public class Bean + { + public decimal AAA { set; get; } + public DateTime BBB { set; get; } + public string CCC { set; get; } + + public Bean(decimal aaa, DateTime bbb, string ccc) + { + this.AAA = aaa; + this.BBB = bbb; + this.CCC = ccc; + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.csproj new file mode 100644 index 000000000..5ecbb823e --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.csproj @@ -0,0 +1,88 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {BA15CF85-A95B-4EA9-977B-0BE5EB739E72} + WinExe + Properties + CustCtrl_sample + CustCtrl_sample + v4.6 + 512 + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.CustomControl.RichClient.dll + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.sln new file mode 100644 index 000000000..5f1c05a97 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustCtrl_sample", "CustCtrl_sample.csproj", "{BA15CF85-A95B-4EA9-977B-0BE5EB739E72}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BA15CF85-A95B-4EA9-977B-0BE5EB739E72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA15CF85-A95B-4EA9-977B-0BE5EB739E72}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA15CF85-A95B-4EA9-977B-0BE5EB739E72}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA15CF85-A95B-4EA9-977B-0BE5EB739E72}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.Designer.cs new file mode 100644 index 000000000..98b312401 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.Designer.cs @@ -0,0 +1,1792 @@ +namespace CustCtrl_sample +{ + partial class Form1 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + Touryo.Infrastructure.CustomControl.RichClient.EditPadding editPadding1 = new Touryo.Infrastructure.CustomControl.RichClient.EditPadding(); + Touryo.Infrastructure.CustomControl.RichClient.EditPadding editPadding2 = new Touryo.Infrastructure.CustomControl.RichClient.EditPadding(); + Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP editDigitsAfterDP1 = new Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP(); + Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP editDigitsAfterDP2 = new Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType1 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP editDigitsAfterDP3 = new Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType2 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType3 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType4 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP editDigitsAfterDP4 = new Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType5 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP editDigitsAfterDP5 = new Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType6 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.EditPadding editPadding3 = new Touryo.Infrastructure.CustomControl.RichClient.EditPadding(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType7 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.EditPadding editPadding4 = new Touryo.Infrastructure.CustomControl.RichClient.EditPadding(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType8 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType9 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType10 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType11 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP editDigitsAfterDP6 = new Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP(); + Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP editDigitsAfterDP7 = new Touryo.Infrastructure.CustomControl.RichClient.EditDigitsAfterDP(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType12 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType13 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType14 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType15 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType16 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType17 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType18 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType19 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType20 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType21 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType22 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType23 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType24 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType25 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType26 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType27 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType28 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType29 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType30 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + Touryo.Infrastructure.CustomControl.RichClient.CheckType checkType31 = new Touryo.Infrastructure.CustomControl.RichClient.CheckType(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.button1 = new System.Windows.Forms.Button(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.lbl2f_2 = new System.Windows.Forms.Label(); + this.lbl18_2 = new System.Windows.Forms.Label(); + this.winCustomTextBox7_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox6_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox5_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox4_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox3_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox2_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.button2 = new System.Windows.Forms.Button(); + this.lbl2h = new System.Windows.Forms.Label(); + this.winCustomTextBox23 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox22 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl2g = new System.Windows.Forms.Label(); + this.lbl2f = new System.Windows.Forms.Label(); + this.lbl2e = new System.Windows.Forms.Label(); + this.winCustomTextBox21 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl2d = new System.Windows.Forms.Label(); + this.lbl2c = new System.Windows.Forms.Label(); + this.winCustomTextBox20 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl2b = new System.Windows.Forms.Label(); + this.lbl11 = new System.Windows.Forms.Label(); + this.lbl12 = new System.Windows.Forms.Label(); + this.lbl13 = new System.Windows.Forms.Label(); + this.lbl2a = new System.Windows.Forms.Label(); + this.winCustomTextBox2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox19 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox3 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl29 = new System.Windows.Forms.Label(); + this.winCustomTextBox1 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox18 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl14 = new System.Windows.Forms.Label(); + this.lbl28 = new System.Windows.Forms.Label(); + this.winCustomTextBox4 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox17 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl15 = new System.Windows.Forms.Label(); + this.lbl27 = new System.Windows.Forms.Label(); + this.winCustomTextBox5 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox16 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox6 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl26 = new System.Windows.Forms.Label(); + this.lbl16 = new System.Windows.Forms.Label(); + this.winCustomTextBox15 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox7 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl24 = new System.Windows.Forms.Label(); + this.lbl17 = new System.Windows.Forms.Label(); + this.winCustomTextBox14 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl18 = new System.Windows.Forms.Label(); + this.lbl23 = new System.Windows.Forms.Label(); + this.winCustomTextBox9 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox12 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox10 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl25 = new System.Windows.Forms.Label(); + this.lbl21 = new System.Windows.Forms.Label(); + this.winCustomTextBox11 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.lbl19 = new System.Windows.Forms.Label(); + this.lbl22 = new System.Windows.Forms.Label(); + this.winCustomTextBox8 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.winCustomTextBox13 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.lbl44 = new System.Windows.Forms.Label(); + this.lbl3c = new System.Windows.Forms.Label(); + this.button3 = new System.Windows.Forms.Button(); + this.lbl43 = new System.Windows.Forms.Label(); + this.lbl42 = new System.Windows.Forms.Label(); + this.lbl41 = new System.Windows.Forms.Label(); + this.lbl3b = new System.Windows.Forms.Label(); + this.lbl3a = new System.Windows.Forms.Label(); + this.lbl39 = new System.Windows.Forms.Label(); + this.lbl38 = new System.Windows.Forms.Label(); + this.lbl37 = new System.Windows.Forms.Label(); + this.lbl36 = new System.Windows.Forms.Label(); + this.lbl34 = new System.Windows.Forms.Label(); + this.lbl33 = new System.Windows.Forms.Label(); + this.lbl35 = new System.Windows.Forms.Label(); + this.lbl31 = new System.Windows.Forms.Label(); + this.lbl32 = new System.Windows.Forms.Label(); + this.winCustomMaskedTextBox14 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox11_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox10_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox9_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox8_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox7_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox6_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox5_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox4_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox3_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox2_2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox13 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox12 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox11 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox10 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox9 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox8 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox7 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox6 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox5 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox4 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox3 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomMaskedTextBox1 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox(); + this.winCustomDropDownList3 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomDropDownList(); + this.winCustomDropDownList2 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomDropDownList(); + this.winCustomDropDownList1 = new Touryo.Infrastructure.CustomControl.RichClient.WinCustomDropDownList(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button4 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.SuspendLayout(); + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Location = new System.Drawing.Point(462, 12); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.RowTemplate.Height = 21; + this.dataGridView1.Size = new System.Drawing.Size(375, 449); + this.dataGridView1.TabIndex = 0; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(462, 576); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(375, 65); + this.button1.TabIndex = 47; + this.button1.Text = "一括チェック"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Location = new System.Drawing.Point(12, 11); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(425, 630); + this.tabControl1.TabIndex = 54; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.lbl2f_2); + this.tabPage1.Controls.Add(this.lbl18_2); + this.tabPage1.Controls.Add(this.winCustomTextBox7_2); + this.tabPage1.Controls.Add(this.winCustomTextBox6_2); + this.tabPage1.Controls.Add(this.winCustomTextBox5_2); + this.tabPage1.Controls.Add(this.winCustomTextBox4_2); + this.tabPage1.Controls.Add(this.winCustomTextBox3_2); + this.tabPage1.Controls.Add(this.winCustomTextBox2_2); + this.tabPage1.Controls.Add(this.button2); + this.tabPage1.Controls.Add(this.lbl2h); + this.tabPage1.Controls.Add(this.winCustomTextBox23); + this.tabPage1.Controls.Add(this.winCustomTextBox22); + this.tabPage1.Controls.Add(this.lbl2g); + this.tabPage1.Controls.Add(this.lbl2f); + this.tabPage1.Controls.Add(this.lbl2e); + this.tabPage1.Controls.Add(this.winCustomTextBox21); + this.tabPage1.Controls.Add(this.lbl2d); + this.tabPage1.Controls.Add(this.lbl2c); + this.tabPage1.Controls.Add(this.winCustomTextBox20); + this.tabPage1.Controls.Add(this.lbl2b); + this.tabPage1.Controls.Add(this.lbl11); + this.tabPage1.Controls.Add(this.lbl12); + this.tabPage1.Controls.Add(this.lbl13); + this.tabPage1.Controls.Add(this.lbl2a); + this.tabPage1.Controls.Add(this.winCustomTextBox2); + this.tabPage1.Controls.Add(this.winCustomTextBox19); + this.tabPage1.Controls.Add(this.winCustomTextBox3); + this.tabPage1.Controls.Add(this.lbl29); + this.tabPage1.Controls.Add(this.winCustomTextBox1); + this.tabPage1.Controls.Add(this.winCustomTextBox18); + this.tabPage1.Controls.Add(this.lbl14); + this.tabPage1.Controls.Add(this.lbl28); + this.tabPage1.Controls.Add(this.winCustomTextBox4); + this.tabPage1.Controls.Add(this.winCustomTextBox17); + this.tabPage1.Controls.Add(this.lbl15); + this.tabPage1.Controls.Add(this.lbl27); + this.tabPage1.Controls.Add(this.winCustomTextBox5); + this.tabPage1.Controls.Add(this.winCustomTextBox16); + this.tabPage1.Controls.Add(this.winCustomTextBox6); + this.tabPage1.Controls.Add(this.lbl26); + this.tabPage1.Controls.Add(this.lbl16); + this.tabPage1.Controls.Add(this.winCustomTextBox15); + this.tabPage1.Controls.Add(this.winCustomTextBox7); + this.tabPage1.Controls.Add(this.lbl24); + this.tabPage1.Controls.Add(this.lbl17); + this.tabPage1.Controls.Add(this.winCustomTextBox14); + this.tabPage1.Controls.Add(this.lbl18); + this.tabPage1.Controls.Add(this.lbl23); + this.tabPage1.Controls.Add(this.winCustomTextBox9); + this.tabPage1.Controls.Add(this.winCustomTextBox12); + this.tabPage1.Controls.Add(this.winCustomTextBox10); + this.tabPage1.Controls.Add(this.lbl25); + this.tabPage1.Controls.Add(this.lbl21); + this.tabPage1.Controls.Add(this.winCustomTextBox11); + this.tabPage1.Controls.Add(this.lbl19); + this.tabPage1.Controls.Add(this.lbl22); + this.tabPage1.Controls.Add(this.winCustomTextBox8); + this.tabPage1.Controls.Add(this.winCustomTextBox13); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(417, 604); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "TextBox"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // lbl2f_2 + // + this.lbl2f_2.AutoSize = true; + this.lbl2f_2.Location = new System.Drawing.Point(233, 466); + this.lbl2f_2.Name = "lbl2f_2"; + this.lbl2f_2.Size = new System.Drawing.Size(159, 12); + this.lbl2f_2.TabIndex = 61; + this.lbl2f_2.Text = "数値編集は全角に適用されない"; + // + // lbl18_2 + // + this.lbl18_2.AutoSize = true; + this.lbl18_2.Location = new System.Drawing.Point(14, 208); + this.lbl18_2.Name = "lbl18_2"; + this.lbl18_2.Size = new System.Drawing.Size(316, 12); + this.lbl18_2.TabIndex = 60; + this.lbl18_2.Text = "(組み合わせは処理順序によって意図しない結果になることもある。"; + // + // winCustomTextBox7_2 + // + this.winCustomTextBox7_2.CheckRegExp = null; + editPadding1.PadChar = '0'; + editPadding1.PadDir = Touryo.Infrastructure.CustomControl.RichClient.PadDirection.Left; + this.winCustomTextBox7_2.EditPadding = editPadding1; + this.winCustomTextBox7_2.Location = new System.Drawing.Point(260, 156); + this.winCustomTextBox7_2.MaxLength = 10; + this.winCustomTextBox7_2.Name = "winCustomTextBox7_2"; + this.winCustomTextBox7_2.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox7_2.TabIndex = 12; + // + // winCustomTextBox6_2 + // + this.winCustomTextBox6_2.CheckRegExp = null; + editPadding2.PadChar = ' '; + editPadding2.PadDir = Touryo.Infrastructure.CustomControl.RichClient.PadDirection.Right; + this.winCustomTextBox6_2.EditPadding = editPadding2; + this.winCustomTextBox6_2.Location = new System.Drawing.Point(260, 131); + this.winCustomTextBox6_2.MaxLength = 10; + this.winCustomTextBox6_2.Name = "winCustomTextBox6_2"; + this.winCustomTextBox6_2.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox6_2.TabIndex = 11; + // + // winCustomTextBox5_2 + // + this.winCustomTextBox5_2.CheckRegExp = null; + editDigitsAfterDP1.DigitsAfterDP = ((uint)(4u)); + editDigitsAfterDP1.HowToCut = Touryo.Infrastructure.CustomControl.RichClient.CutMethod.Floor; + this.winCustomTextBox5_2.EditDigitsAfterDP_Editing = editDigitsAfterDP1; + this.winCustomTextBox5_2.Location = new System.Drawing.Point(260, 106); + this.winCustomTextBox5_2.Name = "winCustomTextBox5_2"; + this.winCustomTextBox5_2.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox5_2.TabIndex = 10; + // + // winCustomTextBox4_2 + // + this.winCustomTextBox4_2.CheckRegExp = null; + editDigitsAfterDP2.DigitsAfterDP = ((uint)(2u)); + editDigitsAfterDP2.HowToCut = Touryo.Infrastructure.CustomControl.RichClient.CutMethod._4sya5nyu; + this.winCustomTextBox4_2.EditDigitsAfterDP = editDigitsAfterDP2; + this.winCustomTextBox4_2.Location = new System.Drawing.Point(260, 81); + this.winCustomTextBox4_2.Name = "winCustomTextBox4_2"; + this.winCustomTextBox4_2.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox4_2.TabIndex = 9; + // + // winCustomTextBox3_2 + // + this.winCustomTextBox3_2.CheckRegExp = null; + this.winCustomTextBox3_2.EditAddFigure = Touryo.Infrastructure.CustomControl.RichClient.EditAddFigure.Af4; + this.winCustomTextBox3_2.Location = new System.Drawing.Point(260, 56); + this.winCustomTextBox3_2.Name = "winCustomTextBox3_2"; + this.winCustomTextBox3_2.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox3_2.TabIndex = 8; + // + // winCustomTextBox2_2 + // + this.winCustomTextBox2_2.CheckRegExp = null; + this.winCustomTextBox2_2.EditAddFigure = Touryo.Infrastructure.CustomControl.RichClient.EditAddFigure.Af3; + this.winCustomTextBox2_2.Location = new System.Drawing.Point(260, 31); + this.winCustomTextBox2_2.Name = "winCustomTextBox2_2"; + this.winCustomTextBox2_2.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox2_2.TabIndex = 7; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(16, 268); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(384, 30); + this.button2.TabIndex = 54; + this.button2.Text = "値取得プロパティ プロシージャ(編集中、編集後)"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // lbl2h + // + this.lbl2h.AutoSize = true; + this.lbl2h.Location = new System.Drawing.Point(233, 546); + this.lbl2h.Name = "lbl2h"; + this.lbl2h.Size = new System.Drawing.Size(121, 12); + this.lbl2h.TabIndex = 59; + this.lbl2h.Text = "少数3桁+全角&数値"; + // + // winCustomTextBox23 + // + this.winCustomTextBox23.CheckProhibitedChar = true; + this.winCustomTextBox23.CheckRegExp = null; + checkType1.IsDate = false; + checkType1.IsHankaku = false; + checkType1.IsHanKatakana = false; + checkType1.IsHiragana = false; + checkType1.IsKatakana = false; + checkType1.IsNumeric = true; + checkType1.IsZenkaku = true; + checkType1.Required = false; + this.winCustomTextBox23.CheckType = checkType1; + this.winCustomTextBox23.CheckValidating = true; + editDigitsAfterDP3.DigitsAfterDP = ((uint)(3u)); + editDigitsAfterDP3.HowToCut = Touryo.Infrastructure.CustomControl.RichClient.CutMethod._4sya5nyu; + this.winCustomTextBox23.EditDigitsAfterDP = editDigitsAfterDP3; + this.winCustomTextBox23.Location = new System.Drawing.Point(235, 568); + this.winCustomTextBox23.Name = "winCustomTextBox23"; + this.winCustomTextBox23.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox23.TabIndex = 28; + // + // winCustomTextBox22 + // + this.winCustomTextBox22.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.winCustomTextBox22.CheckRegExp = null; + checkType2.IsDate = false; + checkType2.IsHankaku = false; + checkType2.IsHanKatakana = false; + checkType2.IsHiragana = false; + checkType2.IsKatakana = false; + checkType2.IsNumeric = true; + checkType2.IsZenkaku = true; + checkType2.Required = false; + this.winCustomTextBox22.CheckType = checkType2; + this.winCustomTextBox22.CheckValidating = true; + this.winCustomTextBox22.EditAddFigure = Touryo.Infrastructure.CustomControl.RichClient.EditAddFigure.Af3; + this.winCustomTextBox22.Location = new System.Drawing.Point(235, 518); + this.winCustomTextBox22.Name = "winCustomTextBox22"; + this.winCustomTextBox22.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox22.TabIndex = 27; + // + // lbl2g + // + this.lbl2g.AutoSize = true; + this.lbl2g.Location = new System.Drawing.Point(233, 496); + this.lbl2g.Name = "lbl2g"; + this.lbl2g.Size = new System.Drawing.Size(109, 12); + this.lbl2g.TabIndex = 56; + this.lbl2g.Text = "区切り+全角&数値"; + // + // lbl2f + // + this.lbl2f.AutoSize = true; + this.lbl2f.Location = new System.Drawing.Point(233, 446); + this.lbl2f.Name = "lbl2f"; + this.lbl2f.Size = new System.Drawing.Size(167, 12); + this.lbl2f.TabIndex = 55; + this.lbl2f.Text = "編集と組み合わせてチェックをテスト"; + // + // lbl2e + // + this.lbl2e.AutoSize = true; + this.lbl2e.Location = new System.Drawing.Point(233, 396); + this.lbl2e.Name = "lbl2e"; + this.lbl2e.Size = new System.Drawing.Size(65, 12); + this.lbl2e.TabIndex = 53; + this.lbl2e.Text = "全角&数値"; + // + // winCustomTextBox21 + // + this.winCustomTextBox21.CheckProhibitedChar = true; + this.winCustomTextBox21.CheckRegExp = null; + checkType3.IsDate = false; + checkType3.IsHankaku = false; + checkType3.IsHanKatakana = false; + checkType3.IsHiragana = false; + checkType3.IsKatakana = false; + checkType3.IsNumeric = true; + checkType3.IsZenkaku = true; + checkType3.Required = false; + this.winCustomTextBox21.CheckType = checkType3; + this.winCustomTextBox21.CheckValidating = true; + this.winCustomTextBox21.Location = new System.Drawing.Point(235, 418); + this.winCustomTextBox21.Name = "winCustomTextBox21"; + this.winCustomTextBox21.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox21.TabIndex = 26; + // + // lbl2d + // + this.lbl2d.AutoSize = true; + this.lbl2d.Location = new System.Drawing.Point(233, 346); + this.lbl2d.Name = "lbl2d"; + this.lbl2d.Size = new System.Drawing.Size(65, 12); + this.lbl2d.TabIndex = 51; + this.lbl2d.Text = "半角&禁則"; + // + // lbl2c + // + this.lbl2c.AutoSize = true; + this.lbl2c.Location = new System.Drawing.Point(233, 321); + this.lbl2c.Name = "lbl2c"; + this.lbl2c.Size = new System.Drawing.Size(135, 12); + this.lbl2c.TabIndex = 50; + this.lbl2c.Text = "組み合わせてチェックをテスト"; + // + // winCustomTextBox20 + // + this.winCustomTextBox20.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.winCustomTextBox20.CheckProhibitedChar = true; + this.winCustomTextBox20.CheckRegExp = null; + checkType4.IsDate = false; + checkType4.IsHankaku = true; + checkType4.IsHanKatakana = false; + checkType4.IsHiragana = false; + checkType4.IsKatakana = false; + checkType4.IsNumeric = false; + checkType4.IsZenkaku = false; + checkType4.Required = false; + this.winCustomTextBox20.CheckType = checkType4; + this.winCustomTextBox20.CheckValidating = true; + this.winCustomTextBox20.Location = new System.Drawing.Point(235, 368); + this.winCustomTextBox20.Name = "winCustomTextBox20"; + this.winCustomTextBox20.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox20.TabIndex = 25; + // + // lbl2b + // + this.lbl2b.AutoSize = true; + this.lbl2b.Location = new System.Drawing.Point(16, 571); + this.lbl2b.Name = "lbl2b"; + this.lbl2b.Size = new System.Drawing.Size(29, 12); + this.lbl2b.TabIndex = 49; + this.lbl2b.Text = "禁則"; + // + // lbl11 + // + this.lbl11.AutoSize = true; + this.lbl11.Location = new System.Drawing.Point(14, 9); + this.lbl11.Name = "lbl11"; + this.lbl11.Size = new System.Drawing.Size(29, 12); + this.lbl11.TabIndex = 11; + this.lbl11.Text = "編集"; + // + // lbl12 + // + this.lbl12.AutoSize = true; + this.lbl12.Location = new System.Drawing.Point(14, 34); + this.lbl12.Name = "lbl12"; + this.lbl12.Size = new System.Drawing.Size(57, 12); + this.lbl12.TabIndex = 12; + this.lbl12.Text = "3桁区切り"; + // + // lbl13 + // + this.lbl13.AutoSize = true; + this.lbl13.Location = new System.Drawing.Point(14, 59); + this.lbl13.Name = "lbl13"; + this.lbl13.Size = new System.Drawing.Size(57, 12); + this.lbl13.TabIndex = 12; + this.lbl13.Text = "4桁区切り"; + // + // lbl2a + // + this.lbl2a.AutoSize = true; + this.lbl2a.Location = new System.Drawing.Point(16, 546); + this.lbl2a.Name = "lbl2a"; + this.lbl2a.Size = new System.Drawing.Size(91, 12); + this.lbl2a.TabIndex = 46; + this.lbl2a.Text = "正規表現(メアド)"; + // + // winCustomTextBox2 + // + this.winCustomTextBox2.CheckRegExp = null; + this.winCustomTextBox2.EditAddFigure = Touryo.Infrastructure.CustomControl.RichClient.EditAddFigure.Af3; + this.winCustomTextBox2.Location = new System.Drawing.Point(138, 31); + this.winCustomTextBox2.Name = "winCustomTextBox2"; + this.winCustomTextBox2.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox2.TabIndex = 1; + this.winCustomTextBox2.TextChanged += new System.EventHandler(this.winCustomTextBox_TextChanged); + // + // winCustomTextBox19 + // + this.winCustomTextBox19.BackColor = System.Drawing.SystemColors.Window; + this.winCustomTextBox19.CheckProhibitedChar = true; + this.winCustomTextBox19.CheckRegExp = null; + this.winCustomTextBox19.CheckValidating = true; + this.winCustomTextBox19.Location = new System.Drawing.Point(113, 568); + this.winCustomTextBox19.Name = "winCustomTextBox19"; + this.winCustomTextBox19.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox19.TabIndex = 24; + // + // winCustomTextBox3 + // + this.winCustomTextBox3.CheckRegExp = null; + this.winCustomTextBox3.EditAddFigure = Touryo.Infrastructure.CustomControl.RichClient.EditAddFigure.Af4; + this.winCustomTextBox3.Location = new System.Drawing.Point(138, 56); + this.winCustomTextBox3.Name = "winCustomTextBox3"; + this.winCustomTextBox3.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox3.TabIndex = 2; + this.winCustomTextBox3.TextChanged += new System.EventHandler(this.winCustomTextBox_TextChanged); + // + // lbl29 + // + this.lbl29.AutoSize = true; + this.lbl29.Location = new System.Drawing.Point(16, 521); + this.lbl29.Name = "lbl29"; + this.lbl29.Size = new System.Drawing.Size(29, 12); + this.lbl29.TabIndex = 44; + this.lbl29.Text = "日付"; + // + // winCustomTextBox1 + // + this.winCustomTextBox1.CheckRegExp = null; + this.winCustomTextBox1.Location = new System.Drawing.Point(138, 6); + this.winCustomTextBox1.Name = "winCustomTextBox1"; + this.winCustomTextBox1.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox1.TabIndex = 0; + // + // winCustomTextBox18 + // + this.winCustomTextBox18.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.winCustomTextBox18.CheckRegExp = "^([a-zA-Z0-9])+([a-zA-Z0-9\\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\\._-]+)+$"; + this.winCustomTextBox18.CheckValidating = true; + this.winCustomTextBox18.Location = new System.Drawing.Point(113, 543); + this.winCustomTextBox18.Name = "winCustomTextBox18"; + this.winCustomTextBox18.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox18.TabIndex = 23; + // + // lbl14 + // + this.lbl14.AutoSize = true; + this.lbl14.Location = new System.Drawing.Point(14, 84); + this.lbl14.Name = "lbl14"; + this.lbl14.Size = new System.Drawing.Size(99, 12); + this.lbl14.TabIndex = 15; + this.lbl14.Text = "小数点編集後 2桁"; + // + // lbl28 + // + this.lbl28.AutoSize = true; + this.lbl28.Location = new System.Drawing.Point(16, 496); + this.lbl28.Name = "lbl28"; + this.lbl28.Size = new System.Drawing.Size(41, 12); + this.lbl28.TabIndex = 42; + this.lbl28.Text = "平仮名"; + // + // winCustomTextBox4 + // + this.winCustomTextBox4.CheckRegExp = null; + editDigitsAfterDP4.DigitsAfterDP = ((uint)(2u)); + editDigitsAfterDP4.HowToCut = Touryo.Infrastructure.CustomControl.RichClient.CutMethod._4sya5nyu; + this.winCustomTextBox4.EditDigitsAfterDP = editDigitsAfterDP4; + this.winCustomTextBox4.Location = new System.Drawing.Point(138, 81); + this.winCustomTextBox4.MaxLength = 10; + this.winCustomTextBox4.Name = "winCustomTextBox4"; + this.winCustomTextBox4.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox4.TabIndex = 3; + this.winCustomTextBox4.TextChanged += new System.EventHandler(this.winCustomTextBox_TextChanged); + // + // winCustomTextBox17 + // + this.winCustomTextBox17.BackColor = System.Drawing.SystemColors.Window; + this.winCustomTextBox17.CheckRegExp = null; + checkType5.IsDate = true; + checkType5.IsHankaku = false; + checkType5.IsHanKatakana = false; + checkType5.IsHiragana = false; + checkType5.IsKatakana = false; + checkType5.IsNumeric = false; + checkType5.IsZenkaku = false; + checkType5.Required = false; + this.winCustomTextBox17.CheckType = checkType5; + this.winCustomTextBox17.CheckValidating = true; + this.winCustomTextBox17.Location = new System.Drawing.Point(113, 518); + this.winCustomTextBox17.Name = "winCustomTextBox17"; + this.winCustomTextBox17.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox17.TabIndex = 22; + // + // lbl15 + // + this.lbl15.AutoSize = true; + this.lbl15.Location = new System.Drawing.Point(14, 109); + this.lbl15.Name = "lbl15"; + this.lbl15.Size = new System.Drawing.Size(99, 12); + this.lbl15.TabIndex = 17; + this.lbl15.Text = "小数点編集中 4桁"; + // + // lbl27 + // + this.lbl27.AutoSize = true; + this.lbl27.Location = new System.Drawing.Point(14, 471); + this.lbl27.Name = "lbl27"; + this.lbl27.Size = new System.Drawing.Size(65, 12); + this.lbl27.TabIndex = 40; + this.lbl27.Text = "半角片仮名"; + // + // winCustomTextBox5 + // + this.winCustomTextBox5.CheckRegExp = null; + editDigitsAfterDP5.DigitsAfterDP = ((uint)(4u)); + editDigitsAfterDP5.HowToCut = Touryo.Infrastructure.CustomControl.RichClient.CutMethod.Floor; + this.winCustomTextBox5.EditDigitsAfterDP_Editing = editDigitsAfterDP5; + this.winCustomTextBox5.Location = new System.Drawing.Point(138, 106); + this.winCustomTextBox5.MaxLength = 10; + this.winCustomTextBox5.Name = "winCustomTextBox5"; + this.winCustomTextBox5.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox5.TabIndex = 4; + this.winCustomTextBox5.TextChanged += new System.EventHandler(this.winCustomTextBox_TextChanged); + // + // winCustomTextBox16 + // + this.winCustomTextBox16.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.winCustomTextBox16.CheckRegExp = null; + checkType6.IsDate = false; + checkType6.IsHankaku = false; + checkType6.IsHanKatakana = false; + checkType6.IsHiragana = true; + checkType6.IsKatakana = false; + checkType6.IsNumeric = false; + checkType6.IsZenkaku = false; + checkType6.Required = false; + this.winCustomTextBox16.CheckType = checkType6; + this.winCustomTextBox16.CheckValidating = true; + this.winCustomTextBox16.Location = new System.Drawing.Point(113, 493); + this.winCustomTextBox16.Name = "winCustomTextBox16"; + this.winCustomTextBox16.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox16.TabIndex = 21; + // + // winCustomTextBox6 + // + this.winCustomTextBox6.CheckRegExp = null; + editPadding3.PadChar = null; + editPadding3.PadDir = Touryo.Infrastructure.CustomControl.RichClient.PadDirection.Right; + this.winCustomTextBox6.EditPadding = editPadding3; + this.winCustomTextBox6.Location = new System.Drawing.Point(138, 131); + this.winCustomTextBox6.MaxLength = 10; + this.winCustomTextBox6.Name = "winCustomTextBox6"; + this.winCustomTextBox6.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox6.TabIndex = 5; + this.winCustomTextBox6.TextChanged += new System.EventHandler(this.winCustomTextBox_TextChanged); + // + // lbl26 + // + this.lbl26.AutoSize = true; + this.lbl26.Location = new System.Drawing.Point(14, 446); + this.lbl26.Name = "lbl26"; + this.lbl26.Size = new System.Drawing.Size(41, 12); + this.lbl26.TabIndex = 38; + this.lbl26.Text = "片仮名"; + // + // lbl16 + // + this.lbl16.AutoSize = true; + this.lbl16.Location = new System.Drawing.Point(14, 134); + this.lbl16.Name = "lbl16"; + this.lbl16.Size = new System.Drawing.Size(43, 12); + this.lbl16.TabIndex = 20; + this.lbl16.Text = "右パッド"; + // + // winCustomTextBox15 + // + this.winCustomTextBox15.BackColor = System.Drawing.SystemColors.Window; + this.winCustomTextBox15.CheckRegExp = null; + checkType7.IsDate = false; + checkType7.IsHankaku = false; + checkType7.IsHanKatakana = true; + checkType7.IsHiragana = false; + checkType7.IsKatakana = false; + checkType7.IsNumeric = false; + checkType7.IsZenkaku = false; + checkType7.Required = false; + this.winCustomTextBox15.CheckType = checkType7; + this.winCustomTextBox15.CheckValidating = true; + this.winCustomTextBox15.Location = new System.Drawing.Point(113, 468); + this.winCustomTextBox15.Name = "winCustomTextBox15"; + this.winCustomTextBox15.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox15.TabIndex = 20; + // + // winCustomTextBox7 + // + this.winCustomTextBox7.CheckRegExp = null; + editPadding4.PadChar = '0'; + editPadding4.PadDir = Touryo.Infrastructure.CustomControl.RichClient.PadDirection.Left; + this.winCustomTextBox7.EditPadding = editPadding4; + this.winCustomTextBox7.Location = new System.Drawing.Point(138, 156); + this.winCustomTextBox7.MaxLength = 10; + this.winCustomTextBox7.Name = "winCustomTextBox7"; + this.winCustomTextBox7.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox7.TabIndex = 6; + this.winCustomTextBox7.TextChanged += new System.EventHandler(this.winCustomTextBox_TextChanged); + // + // lbl24 + // + this.lbl24.AutoSize = true; + this.lbl24.Location = new System.Drawing.Point(14, 396); + this.lbl24.Name = "lbl24"; + this.lbl24.Size = new System.Drawing.Size(29, 12); + this.lbl24.TabIndex = 36; + this.lbl24.Text = "全角"; + // + // lbl17 + // + this.lbl17.AutoSize = true; + this.lbl17.Location = new System.Drawing.Point(14, 159); + this.lbl17.Name = "lbl17"; + this.lbl17.Size = new System.Drawing.Size(43, 12); + this.lbl17.TabIndex = 22; + this.lbl17.Text = "左パッド"; + // + // winCustomTextBox14 + // + this.winCustomTextBox14.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.winCustomTextBox14.CheckRegExp = null; + checkType8.IsDate = false; + checkType8.IsHankaku = false; + checkType8.IsHanKatakana = false; + checkType8.IsHiragana = false; + checkType8.IsKatakana = true; + checkType8.IsNumeric = false; + checkType8.IsZenkaku = false; + checkType8.Required = false; + this.winCustomTextBox14.CheckType = checkType8; + this.winCustomTextBox14.CheckValidating = true; + this.winCustomTextBox14.Location = new System.Drawing.Point(113, 443); + this.winCustomTextBox14.Name = "winCustomTextBox14"; + this.winCustomTextBox14.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox14.TabIndex = 19; + // + // lbl18 + // + this.lbl18.AutoSize = true; + this.lbl18.Location = new System.Drawing.Point(14, 187); + this.lbl18.Name = "lbl18"; + this.lbl18.Size = new System.Drawing.Size(284, 12); + this.lbl18.TabIndex = 23; + this.lbl18.Text = "組み合わせて編集をテスト:3桁区切り、小数点以下2, 6桁"; + // + // lbl23 + // + this.lbl23.AutoSize = true; + this.lbl23.Location = new System.Drawing.Point(14, 371); + this.lbl23.Name = "lbl23"; + this.lbl23.Size = new System.Drawing.Size(29, 12); + this.lbl23.TabIndex = 34; + this.lbl23.Text = "半角"; + // + // winCustomTextBox9 + // + this.winCustomTextBox9.BackColor = System.Drawing.SystemColors.Window; + this.winCustomTextBox9.CheckRegExp = null; + this.winCustomTextBox9.CheckValidating = true; + this.winCustomTextBox9.Location = new System.Drawing.Point(113, 318); + this.winCustomTextBox9.Name = "winCustomTextBox9"; + this.winCustomTextBox9.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox9.TabIndex = 14; + // + // winCustomTextBox12 + // + this.winCustomTextBox12.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.winCustomTextBox12.CheckRegExp = null; + checkType9.IsDate = false; + checkType9.IsHankaku = false; + checkType9.IsHanKatakana = false; + checkType9.IsHiragana = false; + checkType9.IsKatakana = false; + checkType9.IsNumeric = false; + checkType9.IsZenkaku = true; + checkType9.Required = false; + this.winCustomTextBox12.CheckType = checkType9; + this.winCustomTextBox12.CheckValidating = true; + this.winCustomTextBox12.Location = new System.Drawing.Point(113, 393); + this.winCustomTextBox12.Name = "winCustomTextBox12"; + this.winCustomTextBox12.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox12.TabIndex = 17; + // + // winCustomTextBox10 + // + this.winCustomTextBox10.BackColor = System.Drawing.SystemColors.GradientActiveCaption; + this.winCustomTextBox10.CheckRegExp = null; + checkType10.IsDate = false; + checkType10.IsHankaku = false; + checkType10.IsHanKatakana = false; + checkType10.IsHiragana = false; + checkType10.IsKatakana = false; + checkType10.IsNumeric = false; + checkType10.IsZenkaku = false; + checkType10.Required = true; + this.winCustomTextBox10.CheckType = checkType10; + this.winCustomTextBox10.CheckValidating = true; + this.winCustomTextBox10.Location = new System.Drawing.Point(113, 343); + this.winCustomTextBox10.Name = "winCustomTextBox10"; + this.winCustomTextBox10.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox10.TabIndex = 15; + // + // lbl25 + // + this.lbl25.AutoSize = true; + this.lbl25.Location = new System.Drawing.Point(14, 421); + this.lbl25.Name = "lbl25"; + this.lbl25.Size = new System.Drawing.Size(29, 12); + this.lbl25.TabIndex = 32; + this.lbl25.Text = "数値"; + // + // lbl21 + // + this.lbl21.AutoSize = true; + this.lbl21.Location = new System.Drawing.Point(14, 321); + this.lbl21.Name = "lbl21"; + this.lbl21.Size = new System.Drawing.Size(36, 12); + this.lbl21.TabIndex = 26; + this.lbl21.Text = "チェック"; + // + // winCustomTextBox11 + // + this.winCustomTextBox11.BackColor = System.Drawing.SystemColors.Window; + this.winCustomTextBox11.CheckRegExp = null; + checkType11.IsDate = false; + checkType11.IsHankaku = true; + checkType11.IsHanKatakana = false; + checkType11.IsHiragana = false; + checkType11.IsKatakana = false; + checkType11.IsNumeric = false; + checkType11.IsZenkaku = false; + checkType11.Required = false; + this.winCustomTextBox11.CheckType = checkType11; + this.winCustomTextBox11.CheckValidating = true; + this.winCustomTextBox11.Location = new System.Drawing.Point(113, 368); + this.winCustomTextBox11.Name = "winCustomTextBox11"; + this.winCustomTextBox11.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox11.TabIndex = 16; + // + // lbl19 + // + this.lbl19.AutoSize = true; + this.lbl19.Location = new System.Drawing.Point(258, 9); + this.lbl19.Name = "lbl19"; + this.lbl19.Size = new System.Drawing.Size(124, 12); + this.lbl19.TabIndex = 27; + this.lbl19.Text = "テキストチェンジ動作確認"; + // + // lbl22 + // + this.lbl22.AutoSize = true; + this.lbl22.Location = new System.Drawing.Point(14, 346); + this.lbl22.Name = "lbl22"; + this.lbl22.Size = new System.Drawing.Size(53, 12); + this.lbl22.TabIndex = 30; + this.lbl22.Text = "必須入力"; + // + // winCustomTextBox8 + // + this.winCustomTextBox8.CheckRegExp = null; + this.winCustomTextBox8.DisplayUnits = ((uint)(6u)); + this.winCustomTextBox8.EditAddFigure = Touryo.Infrastructure.CustomControl.RichClient.EditAddFigure.Af3; + editDigitsAfterDP6.DigitsAfterDP = ((uint)(2u)); + editDigitsAfterDP6.HowToCut = Touryo.Infrastructure.CustomControl.RichClient.CutMethod.Floor; + this.winCustomTextBox8.EditDigitsAfterDP = editDigitsAfterDP6; + editDigitsAfterDP7.DigitsAfterDP = ((uint)(6u)); + editDigitsAfterDP7.HowToCut = Touryo.Infrastructure.CustomControl.RichClient.CutMethod.Banker; + this.winCustomTextBox8.EditDigitsAfterDP_Editing = editDigitsAfterDP7; + this.winCustomTextBox8.Location = new System.Drawing.Point(16, 231); + this.winCustomTextBox8.MaxLength = 10; + this.winCustomTextBox8.Name = "winCustomTextBox8"; + this.winCustomTextBox8.Size = new System.Drawing.Size(384, 19); + this.winCustomTextBox8.TabIndex = 13; + // + // winCustomTextBox13 + // + this.winCustomTextBox13.BackColor = System.Drawing.SystemColors.Window; + this.winCustomTextBox13.CheckRegExp = null; + checkType12.IsDate = false; + checkType12.IsHankaku = false; + checkType12.IsHanKatakana = false; + checkType12.IsHiragana = false; + checkType12.IsKatakana = false; + checkType12.IsNumeric = true; + checkType12.IsZenkaku = false; + checkType12.Required = false; + this.winCustomTextBox13.CheckType = checkType12; + this.winCustomTextBox13.CheckValidating = true; + this.winCustomTextBox13.Location = new System.Drawing.Point(113, 418); + this.winCustomTextBox13.Name = "winCustomTextBox13"; + this.winCustomTextBox13.Size = new System.Drawing.Size(100, 19); + this.winCustomTextBox13.TabIndex = 18; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.lbl44); + this.tabPage2.Controls.Add(this.lbl3c); + this.tabPage2.Controls.Add(this.button3); + this.tabPage2.Controls.Add(this.lbl43); + this.tabPage2.Controls.Add(this.lbl42); + this.tabPage2.Controls.Add(this.lbl41); + this.tabPage2.Controls.Add(this.lbl3b); + this.tabPage2.Controls.Add(this.lbl3a); + this.tabPage2.Controls.Add(this.lbl39); + this.tabPage2.Controls.Add(this.lbl38); + this.tabPage2.Controls.Add(this.lbl37); + this.tabPage2.Controls.Add(this.lbl36); + this.tabPage2.Controls.Add(this.lbl34); + this.tabPage2.Controls.Add(this.lbl33); + this.tabPage2.Controls.Add(this.lbl35); + this.tabPage2.Controls.Add(this.lbl31); + this.tabPage2.Controls.Add(this.lbl32); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox14); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox11_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox10_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox9_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox8_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox7_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox6_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox5_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox4_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox3_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox2_2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox13); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox12); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox11); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox10); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox9); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox8); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox7); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox6); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox5); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox4); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox3); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox2); + this.tabPage2.Controls.Add(this.winCustomMaskedTextBox1); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(417, 604); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "MaskedTextBox"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // lbl44 + // + this.lbl44.AutoSize = true; + this.lbl44.Location = new System.Drawing.Point(19, 457); + this.lbl44.Name = "lbl44"; + this.lbl44.Size = new System.Drawing.Size(65, 12); + this.lbl44.TabIndex = 85; + this.lbl44.Text = "全角&数値"; + // + // lbl3c + // + this.lbl3c.AutoSize = true; + this.lbl3c.Location = new System.Drawing.Point(246, 17); + this.lbl3c.Name = "lbl3c"; + this.lbl3c.Size = new System.Drawing.Size(124, 12); + this.lbl3c.TabIndex = 83; + this.lbl3c.Text = "テキストチェンジ動作確認"; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(19, 522); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(382, 65); + this.button3.TabIndex = 82; + this.button3.Text = "値取得プロパティ プロシージャ(入力時、マスク時)"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // lbl43 + // + this.lbl43.AutoSize = true; + this.lbl43.Location = new System.Drawing.Point(19, 406); + this.lbl43.Name = "lbl43"; + this.lbl43.Size = new System.Drawing.Size(65, 12); + this.lbl43.TabIndex = 68; + this.lbl43.Text = "半角&数値"; + // + // lbl42 + // + this.lbl42.AutoSize = true; + this.lbl42.Location = new System.Drawing.Point(19, 356); + this.lbl42.Name = "lbl42"; + this.lbl42.Size = new System.Drawing.Size(65, 12); + this.lbl42.TabIndex = 67; + this.lbl42.Text = "半角&禁則"; + // + // lbl41 + // + this.lbl41.AutoSize = true; + this.lbl41.Location = new System.Drawing.Point(19, 331); + this.lbl41.Name = "lbl41"; + this.lbl41.Size = new System.Drawing.Size(135, 12); + this.lbl41.TabIndex = 66; + this.lbl41.Text = "組み合わせてチェックをテスト"; + // + // lbl3b + // + this.lbl3b.AutoSize = true; + this.lbl3b.Location = new System.Drawing.Point(19, 267); + this.lbl3b.Name = "lbl3b"; + this.lbl3b.Size = new System.Drawing.Size(29, 12); + this.lbl3b.TabIndex = 65; + this.lbl3b.Text = "禁則"; + // + // lbl3a + // + this.lbl3a.AutoSize = true; + this.lbl3a.Location = new System.Drawing.Point(19, 242); + this.lbl3a.Name = "lbl3a"; + this.lbl3a.Size = new System.Drawing.Size(89, 12); + this.lbl3a.TabIndex = 64; + this.lbl3a.Text = "正規表現(郵便)"; + // + // lbl39 + // + this.lbl39.AutoSize = true; + this.lbl39.Location = new System.Drawing.Point(19, 217); + this.lbl39.Name = "lbl39"; + this.lbl39.Size = new System.Drawing.Size(29, 12); + this.lbl39.TabIndex = 63; + this.lbl39.Text = "日付"; + // + // lbl38 + // + this.lbl38.AutoSize = true; + this.lbl38.Location = new System.Drawing.Point(19, 192); + this.lbl38.Name = "lbl38"; + this.lbl38.Size = new System.Drawing.Size(41, 12); + this.lbl38.TabIndex = 62; + this.lbl38.Text = "平仮名"; + // + // lbl37 + // + this.lbl37.AutoSize = true; + this.lbl37.Location = new System.Drawing.Point(17, 167); + this.lbl37.Name = "lbl37"; + this.lbl37.Size = new System.Drawing.Size(65, 12); + this.lbl37.TabIndex = 61; + this.lbl37.Text = "半角片仮名"; + // + // lbl36 + // + this.lbl36.AutoSize = true; + this.lbl36.Location = new System.Drawing.Point(17, 142); + this.lbl36.Name = "lbl36"; + this.lbl36.Size = new System.Drawing.Size(41, 12); + this.lbl36.TabIndex = 60; + this.lbl36.Text = "片仮名"; + // + // lbl34 + // + this.lbl34.AutoSize = true; + this.lbl34.Location = new System.Drawing.Point(17, 92); + this.lbl34.Name = "lbl34"; + this.lbl34.Size = new System.Drawing.Size(29, 12); + this.lbl34.TabIndex = 59; + this.lbl34.Text = "全角"; + // + // lbl33 + // + this.lbl33.AutoSize = true; + this.lbl33.Location = new System.Drawing.Point(17, 67); + this.lbl33.Name = "lbl33"; + this.lbl33.Size = new System.Drawing.Size(29, 12); + this.lbl33.TabIndex = 58; + this.lbl33.Text = "半角"; + // + // lbl35 + // + this.lbl35.AutoSize = true; + this.lbl35.Location = new System.Drawing.Point(17, 117); + this.lbl35.Name = "lbl35"; + this.lbl35.Size = new System.Drawing.Size(29, 12); + this.lbl35.TabIndex = 57; + this.lbl35.Text = "数値"; + // + // lbl31 + // + this.lbl31.AutoSize = true; + this.lbl31.Location = new System.Drawing.Point(17, 17); + this.lbl31.Name = "lbl31"; + this.lbl31.Size = new System.Drawing.Size(36, 12); + this.lbl31.TabIndex = 55; + this.lbl31.Text = "チェック"; + // + // lbl32 + // + this.lbl32.AutoSize = true; + this.lbl32.Location = new System.Drawing.Point(17, 42); + this.lbl32.Name = "lbl32"; + this.lbl32.Size = new System.Drawing.Size(53, 12); + this.lbl32.TabIndex = 56; + this.lbl32.Text = "必須入力"; + // + // winCustomMaskedTextBox14 + // + this.winCustomMaskedTextBox14.CheckRegExp = null; + checkType13.IsDate = false; + checkType13.IsHankaku = false; + checkType13.IsHanKatakana = false; + checkType13.IsHiragana = false; + checkType13.IsKatakana = false; + checkType13.IsNumeric = true; + checkType13.IsZenkaku = true; + checkType13.Required = false; + this.winCustomMaskedTextBox14.CheckType = checkType13; + this.winCustomMaskedTextBox14.CheckValidating = true; + this.winCustomMaskedTextBox14.Location = new System.Drawing.Point(21, 479); + this.winCustomMaskedTextBox14.Mask_Editing = ""; + this.winCustomMaskedTextBox14.Name = "winCustomMaskedTextBox14"; + this.winCustomMaskedTextBox14.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox14.TabIndex = 84; + // + // winCustomMaskedTextBox11_2 + // + this.winCustomMaskedTextBox11_2.CheckProhibitedChar = true; + this.winCustomMaskedTextBox11_2.CheckRegExp = null; + this.winCustomMaskedTextBox11_2.Location = new System.Drawing.Point(248, 264); + this.winCustomMaskedTextBox11_2.Mask_Editing = null; + this.winCustomMaskedTextBox11_2.Name = "winCustomMaskedTextBox11_2"; + this.winCustomMaskedTextBox11_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox11_2.TabIndex = 20; + // + // winCustomMaskedTextBox10_2 + // + this.winCustomMaskedTextBox10_2.CheckRegExp = "^〒[0-9]{3}-?[0-9]{4}$"; + this.winCustomMaskedTextBox10_2.Location = new System.Drawing.Point(248, 239); + this.winCustomMaskedTextBox10_2.Mask_Editing = "0000000"; + this.winCustomMaskedTextBox10_2.Name = "winCustomMaskedTextBox10_2"; + this.winCustomMaskedTextBox10_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox10_2.TabIndex = 19; + // + // winCustomMaskedTextBox9_2 + // + this.winCustomMaskedTextBox9_2.CheckRegExp = null; + checkType14.IsDate = true; + checkType14.IsHankaku = false; + checkType14.IsHanKatakana = false; + checkType14.IsHiragana = false; + checkType14.IsKatakana = false; + checkType14.IsNumeric = false; + checkType14.IsZenkaku = false; + checkType14.Required = false; + this.winCustomMaskedTextBox9_2.CheckType = checkType14; + this.winCustomMaskedTextBox9_2.Location = new System.Drawing.Point(248, 214); + this.winCustomMaskedTextBox9_2.Mask = "0000/00/00"; + this.winCustomMaskedTextBox9_2.Mask_Editing = "0000年00月00日"; + this.winCustomMaskedTextBox9_2.Name = "winCustomMaskedTextBox9_2"; + this.winCustomMaskedTextBox9_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox9_2.TabIndex = 18; + this.winCustomMaskedTextBox9_2.Text = " / /"; + // + // winCustomMaskedTextBox8_2 + // + this.winCustomMaskedTextBox8_2.CheckRegExp = null; + checkType15.IsDate = false; + checkType15.IsHankaku = false; + checkType15.IsHanKatakana = false; + checkType15.IsHiragana = true; + checkType15.IsKatakana = false; + checkType15.IsNumeric = false; + checkType15.IsZenkaku = false; + checkType15.Required = false; + this.winCustomMaskedTextBox8_2.CheckType = checkType15; + this.winCustomMaskedTextBox8_2.Location = new System.Drawing.Point(248, 189); + this.winCustomMaskedTextBox8_2.Mask = "CCCC"; + this.winCustomMaskedTextBox8_2.Mask_Editing = "ヒラガナ:CCCC"; + this.winCustomMaskedTextBox8_2.Name = "winCustomMaskedTextBox8_2"; + this.winCustomMaskedTextBox8_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox8_2.TabIndex = 17; + // + // winCustomMaskedTextBox7_2 + // + this.winCustomMaskedTextBox7_2.CheckRegExp = null; + checkType16.IsDate = false; + checkType16.IsHankaku = false; + checkType16.IsHanKatakana = true; + checkType16.IsHiragana = false; + checkType16.IsKatakana = false; + checkType16.IsNumeric = false; + checkType16.IsZenkaku = false; + checkType16.Required = false; + this.winCustomMaskedTextBox7_2.CheckType = checkType16; + this.winCustomMaskedTextBox7_2.Location = new System.Drawing.Point(248, 164); + this.winCustomMaskedTextBox7_2.Mask = "CCCC"; + this.winCustomMaskedTextBox7_2.Mask_Editing = "半角片仮名:CCCC"; + this.winCustomMaskedTextBox7_2.Name = "winCustomMaskedTextBox7_2"; + this.winCustomMaskedTextBox7_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox7_2.TabIndex = 16; + // + // winCustomMaskedTextBox6_2 + // + this.winCustomMaskedTextBox6_2.CheckRegExp = null; + checkType17.IsDate = false; + checkType17.IsHankaku = false; + checkType17.IsHanKatakana = false; + checkType17.IsHiragana = false; + checkType17.IsKatakana = true; + checkType17.IsNumeric = false; + checkType17.IsZenkaku = false; + checkType17.Required = false; + this.winCustomMaskedTextBox6_2.CheckType = checkType17; + this.winCustomMaskedTextBox6_2.Location = new System.Drawing.Point(248, 139); + this.winCustomMaskedTextBox6_2.Mask = "CCCC"; + this.winCustomMaskedTextBox6_2.Mask_Editing = "片仮名:CCCC"; + this.winCustomMaskedTextBox6_2.Name = "winCustomMaskedTextBox6_2"; + this.winCustomMaskedTextBox6_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox6_2.TabIndex = 15; + // + // winCustomMaskedTextBox5_2 + // + this.winCustomMaskedTextBox5_2.CheckRegExp = null; + checkType18.IsDate = false; + checkType18.IsHankaku = false; + checkType18.IsHanKatakana = false; + checkType18.IsHiragana = false; + checkType18.IsKatakana = false; + checkType18.IsNumeric = true; + checkType18.IsZenkaku = false; + checkType18.Required = false; + this.winCustomMaskedTextBox5_2.CheckType = checkType18; + this.winCustomMaskedTextBox5_2.Location = new System.Drawing.Point(248, 114); + this.winCustomMaskedTextBox5_2.Mask_Editing = "CCCCCCCC"; + this.winCustomMaskedTextBox5_2.Name = "winCustomMaskedTextBox5_2"; + this.winCustomMaskedTextBox5_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox5_2.TabIndex = 14; + // + // winCustomMaskedTextBox4_2 + // + this.winCustomMaskedTextBox4_2.CheckRegExp = null; + checkType19.IsDate = false; + checkType19.IsHankaku = false; + checkType19.IsHanKatakana = false; + checkType19.IsHiragana = false; + checkType19.IsKatakana = false; + checkType19.IsNumeric = false; + checkType19.IsZenkaku = true; + checkType19.Required = false; + this.winCustomMaskedTextBox4_2.CheckType = checkType19; + this.winCustomMaskedTextBox4_2.Location = new System.Drawing.Point(248, 89); + this.winCustomMaskedTextBox4_2.Mask_Editing = "CCCC"; + this.winCustomMaskedTextBox4_2.Name = "winCustomMaskedTextBox4_2"; + this.winCustomMaskedTextBox4_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox4_2.TabIndex = 13; + // + // winCustomMaskedTextBox3_2 + // + this.winCustomMaskedTextBox3_2.CheckRegExp = null; + checkType20.IsDate = false; + checkType20.IsHankaku = true; + checkType20.IsHanKatakana = false; + checkType20.IsHiragana = false; + checkType20.IsKatakana = false; + checkType20.IsNumeric = false; + checkType20.IsZenkaku = false; + checkType20.Required = false; + this.winCustomMaskedTextBox3_2.CheckType = checkType20; + this.winCustomMaskedTextBox3_2.Location = new System.Drawing.Point(248, 64); + this.winCustomMaskedTextBox3_2.Mask_Editing = "CCCC"; + this.winCustomMaskedTextBox3_2.Name = "winCustomMaskedTextBox3_2"; + this.winCustomMaskedTextBox3_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox3_2.TabIndex = 12; + // + // winCustomMaskedTextBox2_2 + // + this.winCustomMaskedTextBox2_2.CheckRegExp = null; + checkType21.IsDate = false; + checkType21.IsHankaku = false; + checkType21.IsHanKatakana = false; + checkType21.IsHiragana = false; + checkType21.IsKatakana = false; + checkType21.IsNumeric = false; + checkType21.IsZenkaku = false; + checkType21.Required = true; + this.winCustomMaskedTextBox2_2.CheckType = checkType21; + this.winCustomMaskedTextBox2_2.Location = new System.Drawing.Point(248, 39); + this.winCustomMaskedTextBox2_2.Mask = "00000000"; + this.winCustomMaskedTextBox2_2.Mask_Editing = "00000000"; + this.winCustomMaskedTextBox2_2.Name = "winCustomMaskedTextBox2_2"; + this.winCustomMaskedTextBox2_2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox2_2.TabIndex = 11; + // + // winCustomMaskedTextBox13 + // + this.winCustomMaskedTextBox13.CheckRegExp = null; + checkType22.IsDate = false; + checkType22.IsHankaku = true; + checkType22.IsHanKatakana = false; + checkType22.IsHiragana = false; + checkType22.IsKatakana = false; + checkType22.IsNumeric = true; + checkType22.IsZenkaku = false; + checkType22.Required = false; + this.winCustomMaskedTextBox13.CheckType = checkType22; + this.winCustomMaskedTextBox13.CheckValidating = true; + this.winCustomMaskedTextBox13.EditToHankaku = true; + this.winCustomMaskedTextBox13.Location = new System.Drawing.Point(21, 428); + this.winCustomMaskedTextBox13.Mask_Editing = ""; + this.winCustomMaskedTextBox13.Name = "winCustomMaskedTextBox13"; + this.winCustomMaskedTextBox13.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox13.TabIndex = 22; + // + // winCustomMaskedTextBox12 + // + this.winCustomMaskedTextBox12.CheckProhibitedChar = true; + this.winCustomMaskedTextBox12.CheckRegExp = null; + checkType23.IsDate = false; + checkType23.IsHankaku = true; + checkType23.IsHanKatakana = false; + checkType23.IsHiragana = false; + checkType23.IsKatakana = false; + checkType23.IsNumeric = false; + checkType23.IsZenkaku = false; + checkType23.Required = false; + this.winCustomMaskedTextBox12.CheckType = checkType23; + this.winCustomMaskedTextBox12.CheckValidating = true; + this.winCustomMaskedTextBox12.EditToHankaku = true; + this.winCustomMaskedTextBox12.Location = new System.Drawing.Point(21, 378); + this.winCustomMaskedTextBox12.Mask_Editing = null; + this.winCustomMaskedTextBox12.Name = "winCustomMaskedTextBox12"; + this.winCustomMaskedTextBox12.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox12.TabIndex = 21; + // + // winCustomMaskedTextBox11 + // + this.winCustomMaskedTextBox11.CheckProhibitedChar = true; + this.winCustomMaskedTextBox11.CheckRegExp = null; + this.winCustomMaskedTextBox11.CheckValidating = true; + this.winCustomMaskedTextBox11.Location = new System.Drawing.Point(116, 264); + this.winCustomMaskedTextBox11.Mask_Editing = null; + this.winCustomMaskedTextBox11.Name = "winCustomMaskedTextBox11"; + this.winCustomMaskedTextBox11.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox11.TabIndex = 10; + this.winCustomMaskedTextBox11.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox10 + // + this.winCustomMaskedTextBox10.CheckRegExp = "^〒[0-9]{3}-?[0-9]{4}$"; + this.winCustomMaskedTextBox10.CheckValidating = true; + this.winCustomMaskedTextBox10.Location = new System.Drawing.Point(116, 239); + this.winCustomMaskedTextBox10.Mask_Editing = "CCCCCCCCC"; + this.winCustomMaskedTextBox10.Name = "winCustomMaskedTextBox10"; + this.winCustomMaskedTextBox10.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox10.TabIndex = 9; + this.winCustomMaskedTextBox10.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox9 + // + this.winCustomMaskedTextBox9.CheckRegExp = null; + checkType24.IsDate = true; + checkType24.IsHankaku = false; + checkType24.IsHanKatakana = false; + checkType24.IsHiragana = false; + checkType24.IsKatakana = false; + checkType24.IsNumeric = false; + checkType24.IsZenkaku = false; + checkType24.Required = false; + this.winCustomMaskedTextBox9.CheckType = checkType24; + this.winCustomMaskedTextBox9.CheckValidating = true; + this.winCustomMaskedTextBox9.EditToHankaku = true; + this.winCustomMaskedTextBox9.EditToYYYYMMDD = true; + this.winCustomMaskedTextBox9.Location = new System.Drawing.Point(116, 214); + this.winCustomMaskedTextBox9.Mask = "0000/00/00"; + this.winCustomMaskedTextBox9.Mask_Editing = "0000年00月00日"; + this.winCustomMaskedTextBox9.Name = "winCustomMaskedTextBox9"; + this.winCustomMaskedTextBox9.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox9.TabIndex = 8; + this.winCustomMaskedTextBox9.Text = " / /"; + this.winCustomMaskedTextBox9.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox8 + // + this.winCustomMaskedTextBox8.CheckRegExp = null; + checkType25.IsDate = false; + checkType25.IsHankaku = false; + checkType25.IsHanKatakana = false; + checkType25.IsHiragana = true; + checkType25.IsKatakana = false; + checkType25.IsNumeric = false; + checkType25.IsZenkaku = false; + checkType25.Required = false; + this.winCustomMaskedTextBox8.CheckType = checkType25; + this.winCustomMaskedTextBox8.CheckValidating = true; + this.winCustomMaskedTextBox8.Location = new System.Drawing.Point(116, 189); + this.winCustomMaskedTextBox8.Mask = "CCCC"; + this.winCustomMaskedTextBox8.Mask_Editing = "ヒラガナ:CCCC"; + this.winCustomMaskedTextBox8.Name = "winCustomMaskedTextBox8"; + this.winCustomMaskedTextBox8.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox8.TabIndex = 7; + this.winCustomMaskedTextBox8.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox7 + // + this.winCustomMaskedTextBox7.CheckRegExp = null; + checkType26.IsDate = false; + checkType26.IsHankaku = false; + checkType26.IsHanKatakana = true; + checkType26.IsHiragana = false; + checkType26.IsKatakana = false; + checkType26.IsNumeric = false; + checkType26.IsZenkaku = false; + checkType26.Required = false; + this.winCustomMaskedTextBox7.CheckType = checkType26; + this.winCustomMaskedTextBox7.CheckValidating = true; + this.winCustomMaskedTextBox7.EditToHankaku = true; + this.winCustomMaskedTextBox7.Location = new System.Drawing.Point(116, 164); + this.winCustomMaskedTextBox7.Mask = "CCCC"; + this.winCustomMaskedTextBox7.Mask_Editing = "半角片仮名:CCCC"; + this.winCustomMaskedTextBox7.Name = "winCustomMaskedTextBox7"; + this.winCustomMaskedTextBox7.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox7.TabIndex = 6; + this.winCustomMaskedTextBox7.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox6 + // + this.winCustomMaskedTextBox6.CheckRegExp = null; + checkType27.IsDate = false; + checkType27.IsHankaku = false; + checkType27.IsHanKatakana = false; + checkType27.IsHiragana = false; + checkType27.IsKatakana = true; + checkType27.IsNumeric = false; + checkType27.IsZenkaku = false; + checkType27.Required = false; + this.winCustomMaskedTextBox6.CheckType = checkType27; + this.winCustomMaskedTextBox6.CheckValidating = true; + this.winCustomMaskedTextBox6.Location = new System.Drawing.Point(116, 139); + this.winCustomMaskedTextBox6.Mask = "CCCC"; + this.winCustomMaskedTextBox6.Mask_Editing = "片仮名:CCCC"; + this.winCustomMaskedTextBox6.Name = "winCustomMaskedTextBox6"; + this.winCustomMaskedTextBox6.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox6.TabIndex = 5; + this.winCustomMaskedTextBox6.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox5 + // + this.winCustomMaskedTextBox5.CheckRegExp = null; + checkType28.IsDate = false; + checkType28.IsHankaku = false; + checkType28.IsHanKatakana = false; + checkType28.IsHiragana = false; + checkType28.IsKatakana = false; + checkType28.IsNumeric = true; + checkType28.IsZenkaku = false; + checkType28.Required = false; + this.winCustomMaskedTextBox5.CheckType = checkType28; + this.winCustomMaskedTextBox5.CheckValidating = true; + this.winCustomMaskedTextBox5.Location = new System.Drawing.Point(116, 114); + this.winCustomMaskedTextBox5.Mask_Editing = "CCCCCCCC"; + this.winCustomMaskedTextBox5.Name = "winCustomMaskedTextBox5"; + this.winCustomMaskedTextBox5.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox5.TabIndex = 4; + this.winCustomMaskedTextBox5.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox4 + // + this.winCustomMaskedTextBox4.CheckRegExp = null; + checkType29.IsDate = false; + checkType29.IsHankaku = false; + checkType29.IsHanKatakana = false; + checkType29.IsHiragana = false; + checkType29.IsKatakana = false; + checkType29.IsNumeric = false; + checkType29.IsZenkaku = true; + checkType29.Required = false; + this.winCustomMaskedTextBox4.CheckType = checkType29; + this.winCustomMaskedTextBox4.CheckValidating = true; + this.winCustomMaskedTextBox4.Location = new System.Drawing.Point(116, 89); + this.winCustomMaskedTextBox4.Mask_Editing = "CCCC"; + this.winCustomMaskedTextBox4.Name = "winCustomMaskedTextBox4"; + this.winCustomMaskedTextBox4.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox4.TabIndex = 3; + this.winCustomMaskedTextBox4.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox3 + // + this.winCustomMaskedTextBox3.CheckRegExp = null; + checkType30.IsDate = false; + checkType30.IsHankaku = true; + checkType30.IsHanKatakana = false; + checkType30.IsHiragana = false; + checkType30.IsKatakana = false; + checkType30.IsNumeric = false; + checkType30.IsZenkaku = false; + checkType30.Required = false; + this.winCustomMaskedTextBox3.CheckType = checkType30; + this.winCustomMaskedTextBox3.CheckValidating = true; + this.winCustomMaskedTextBox3.EditToHankaku = true; + this.winCustomMaskedTextBox3.Location = new System.Drawing.Point(116, 64); + this.winCustomMaskedTextBox3.Mask_Editing = "CCCC"; + this.winCustomMaskedTextBox3.Name = "winCustomMaskedTextBox3"; + this.winCustomMaskedTextBox3.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox3.TabIndex = 2; + this.winCustomMaskedTextBox3.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox2 + // + this.winCustomMaskedTextBox2.CheckRegExp = null; + checkType31.IsDate = false; + checkType31.IsHankaku = false; + checkType31.IsHanKatakana = false; + checkType31.IsHiragana = false; + checkType31.IsKatakana = false; + checkType31.IsNumeric = false; + checkType31.IsZenkaku = false; + checkType31.Required = true; + this.winCustomMaskedTextBox2.CheckType = checkType31; + this.winCustomMaskedTextBox2.CheckValidating = true; + this.winCustomMaskedTextBox2.Location = new System.Drawing.Point(116, 39); + this.winCustomMaskedTextBox2.Mask = "00000000"; + this.winCustomMaskedTextBox2.Mask_Editing = "00000000"; + this.winCustomMaskedTextBox2.Name = "winCustomMaskedTextBox2"; + this.winCustomMaskedTextBox2.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox2.TabIndex = 1; + this.winCustomMaskedTextBox2.TextChanged += new System.EventHandler(this.winCustomMaskedTextBox_TextChanged); + // + // winCustomMaskedTextBox1 + // + this.winCustomMaskedTextBox1.CheckRegExp = null; + this.winCustomMaskedTextBox1.Location = new System.Drawing.Point(116, 14); + this.winCustomMaskedTextBox1.Mask_Editing = null; + this.winCustomMaskedTextBox1.Name = "winCustomMaskedTextBox1"; + this.winCustomMaskedTextBox1.Size = new System.Drawing.Size(100, 19); + this.winCustomMaskedTextBox1.TabIndex = 0; + // + // winCustomDropDownList3 + // + this.winCustomDropDownList3.FormattingEnabled = true; + this.winCustomDropDownList3.Location = new System.Drawing.Point(716, 481); + this.winCustomDropDownList3.MasterDataName = "TEST3"; + this.winCustomDropDownList3.Name = "winCustomDropDownList3"; + this.winCustomDropDownList3.Size = new System.Drawing.Size(121, 20); + this.winCustomDropDownList3.TabIndex = 53; + // + // winCustomDropDownList2 + // + this.winCustomDropDownList2.FormattingEnabled = true; + this.winCustomDropDownList2.Location = new System.Drawing.Point(589, 481); + this.winCustomDropDownList2.MasterDataName = "TEST2"; + this.winCustomDropDownList2.Name = "winCustomDropDownList2"; + this.winCustomDropDownList2.Size = new System.Drawing.Size(121, 20); + this.winCustomDropDownList2.TabIndex = 52; + // + // winCustomDropDownList1 + // + this.winCustomDropDownList1.FormattingEnabled = true; + this.winCustomDropDownList1.Location = new System.Drawing.Point(462, 481); + this.winCustomDropDownList1.MasterDataName = "TEST1"; + this.winCustomDropDownList1.Name = "winCustomDropDownList1"; + this.winCustomDropDownList1.Size = new System.Drawing.Size(121, 20); + this.winCustomDropDownList1.TabIndex = 51; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(462, 528); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(121, 19); + this.textBox1.TabIndex = 55; + // + // button4 + // + this.button4.Location = new System.Drawing.Point(589, 526); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(246, 23); + this.button4.TabIndex = 56; + this.button4.Text = "バインディング・ソースの更新と変更通知"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(847, 654); + this.Controls.Add(this.button4); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.winCustomDropDownList3); + this.Controls.Add(this.winCustomDropDownList2); + this.Controls.Add(this.winCustomDropDownList1); + this.Controls.Add(this.button1); + this.Controls.Add(this.dataGridView1); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.Button button1; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomDropDownList winCustomDropDownList1; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomDropDownList winCustomDropDownList2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomDropDownList winCustomDropDownList3; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox7_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox6_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox5_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox4_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox3_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox2_2; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label lbl2h; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox23; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox22; + private System.Windows.Forms.Label lbl2g; + private System.Windows.Forms.Label lbl2f; + private System.Windows.Forms.Label lbl2e; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox21; + private System.Windows.Forms.Label lbl2d; + private System.Windows.Forms.Label lbl2c; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox20; + private System.Windows.Forms.Label lbl2b; + private System.Windows.Forms.Label lbl11; + private System.Windows.Forms.Label lbl12; + private System.Windows.Forms.Label lbl13; + private System.Windows.Forms.Label lbl2a; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox19; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox3; + private System.Windows.Forms.Label lbl29; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox1; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox18; + private System.Windows.Forms.Label lbl14; + private System.Windows.Forms.Label lbl28; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox4; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox17; + private System.Windows.Forms.Label lbl15; + private System.Windows.Forms.Label lbl27; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox5; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox16; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox6; + private System.Windows.Forms.Label lbl26; + private System.Windows.Forms.Label lbl16; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox15; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox7; + private System.Windows.Forms.Label lbl24; + private System.Windows.Forms.Label lbl17; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox14; + private System.Windows.Forms.Label lbl18; + private System.Windows.Forms.Label lbl23; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox9; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox12; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox10; + private System.Windows.Forms.Label lbl25; + private System.Windows.Forms.Label lbl21; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox11; + private System.Windows.Forms.Label lbl19; + private System.Windows.Forms.Label lbl22; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox8; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomTextBox winCustomTextBox13; + private System.Windows.Forms.TabPage tabPage2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox11_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox10_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox9_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox8_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox7_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox6_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox5_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox4_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox3_2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox2_2; + private System.Windows.Forms.Label lbl3c; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Label lbl43; + private System.Windows.Forms.Label lbl42; + private System.Windows.Forms.Label lbl41; + private System.Windows.Forms.Label lbl3b; + private System.Windows.Forms.Label lbl3a; + private System.Windows.Forms.Label lbl39; + private System.Windows.Forms.Label lbl38; + private System.Windows.Forms.Label lbl37; + private System.Windows.Forms.Label lbl36; + private System.Windows.Forms.Label lbl34; + private System.Windows.Forms.Label lbl33; + private System.Windows.Forms.Label lbl35; + private System.Windows.Forms.Label lbl31; + private System.Windows.Forms.Label lbl32; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox13; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox12; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox11; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox10; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox9; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox8; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox7; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox6; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox5; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox4; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox3; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox2; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox1; + private System.Windows.Forms.Label lbl44; + private Touryo.Infrastructure.CustomControl.RichClient.WinCustomMaskedTextBox winCustomMaskedTextBox14; + private System.Windows.Forms.Label lbl18_2; + private System.Windows.Forms.Label lbl2f_2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button4; + } +} + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.cs new file mode 100644 index 000000000..5faa6744b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.cs @@ -0,0 +1,666 @@ +//********************************************************************************** +//* カスタム コントロール・サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form1 +//* クラス日本語名 :Form1 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Text; +using System.Data; +using System.Collections; +using System.Collections.Generic; +using System.Windows.Forms; + +using Touryo.Infrastructure.CustomControl.RichClient; + +namespace CustCtrl_sample +{ + /// フォーム + public partial class Form1 : Form + { + /// コンストラクタ + public Form1() + { + InitializeComponent(); + + // 異常な設定状態をテスト + + //// 「HowToCut = null」では、数値と認識されないこと(例外も起きないこと)。 + //this.winCustomTextBox1.EditDigitsAfterDP = new EditDigitsAfterDP(); + //this.winCustomTextBox1.EditDigitsAfterDP.HowToCut = null; + //this.winCustomTextBox1.EditDigitsAfterDP.DigitsAfterDP = 100; + } + + /// データ・バインディングのテスト用(DataTable) + DataTable Dt = null; + + /// データ・バインディングのテスト用(Bean) + BindingSource BindingSource1 = null; + + /// ロード + private void Form1_Load(object sender, EventArgs e) + { + // ハンドラ + this.winCustomTextBox8.ValueChanged += new EventHandler(winCustomTextBox8_ValueChanged); + + #region コンボ初期化 + + // Webサービスでマスタをロード(などする) + ArrayList al = null; + CmnMasterDatasForList.ClearMasterData(); + + al = new ArrayList(); + al.Add(new ListItem("1", "aaa")); + al.Add(new ListItem("2", "bbb")); + al.Add(new ListItem("3", "ccc")); + CmnMasterDatasForList.SetMasterData("Test1", al); + + al = new ArrayList(); + al.Add(new ListItem("1", "AAA")); + al.Add(new ListItem("2", "BBB")); + al.Add(new ListItem("3", "CCC")); + CmnMasterDatasForList.SetMasterData("Test2", al); + + al = new ArrayList(); + al.Add(new ListItem("1", "あ")); + al.Add(new ListItem("2", "い")); + al.Add(new ListItem("3", "う")); + CmnMasterDatasForList.SetMasterData("Test3", al); + + //// InitItemsで初期化する。 + //this.winCustomDropDownList1.InitItems(); + //this.winCustomDropDownList2.InitItems(); + //this.winCustomDropDownList3.InitItems(); + + // InitDataSourceで初期化する。 + this.winCustomDropDownList1.InitDataSource(); + this.winCustomDropDownList2.InitDataSource(); + this.winCustomDropDownList3.InitDataSource(); + + #endregion + + #region データバインディングをテストする。 + + // DataBindingsのFormatString(桁区切り)はdecimalで無いと効かない。 + // また、DataBindingsでは初期設定時のTextのReEditも効かない。 + // 従って、DataBindings時の方式としてはdecimal&FormatStringに寄せる必要がある。 + + #region Bindingsource + + DataView dv = null; + this.Dt = this.CreateDataTable(); + + this.BindingSource1 = new BindingSource(); + this.BindingSource1.DataSource = new Bean(88888888, DateTime.Now, "88888888"); + + #endregion + + #region 単項目の入力コントロールとのデータバインディングをテストする。 + + // FormatStringとは相性が悪いので併用NGとした。 + + #region WinCustomTextBoxの場合 + + // データバインディングには、Valueプロパティを使用する。 + + // - Text : 通常のTextプロパティ(画面表示用) + // - Text2 : ユーザ入力のTextを取得するプロパティ + // - Text3 : 編集処理込のTextを取得するプロパティ + // - Value : 単位変換に対応したプロパティ + + #region winCustomTextBox1-7 + + #region .TextプロパティとDataView + + // バインド可能だが、単位変換に対応していない。 + + // 設定なし + dv = new DataView(this.Dt, "id = 1", "", DataViewRowState.Unchanged); + this.winCustomTextBox1.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, "hogehoge");//, "#,##0.########"); + + // 桁区切り3 + dv = new DataView(this.Dt, "id = 2", "", DataViewRowState.Unchanged); + this.winCustomTextBox2.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + // 桁区切り4 + dv = new DataView(this.Dt, "id = 3", "", DataViewRowState.Unchanged); + this.winCustomTextBox3.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + // 小数点以下2, 6 + dv = new DataView(this.Dt, "id = 4", "", DataViewRowState.Unchanged); + this.winCustomTextBox4.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + // 小数点以下4, 8 + dv = new DataView(this.Dt, "id = 5", "", DataViewRowState.Unchanged); + this.winCustomTextBox5.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + // パッド + dv = new DataView(this.Dt, "id = 6", "", DataViewRowState.Unchanged); + this.winCustomTextBox6.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + // パッド + dv = new DataView(this.Dt, "id = 7", "", DataViewRowState.Unchanged); + this.winCustomTextBox7.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + #endregion + + #region .Text2プロパティとDataView + + // ココにバインドしてばダメ(編集処理が動作しない)。 + + //// 設定なし + //dv = new DataView(this.Dt, "id = 1", "", DataViewRowState.Unchanged); + //this.winCustomTextBox1.DataBindings.Add("Text2", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, "hogehoge");//, "#,##0.########"); + + //// 桁区切り3 + //dv = new DataView(this.Dt, "id = 2", "", DataViewRowState.Unchanged); + //this.winCustomTextBox2.DataBindings.Add("Text2", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// 桁区切り4 + //dv = new DataView(this.Dt, "id = 3", "", DataViewRowState.Unchanged); + //this.winCustomTextBox3.DataBindings.Add("Text2", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// 小数点以下2, 6 + //dv = new DataView(this.Dt, "id = 4", "", DataViewRowState.Unchanged); + //this.winCustomTextBox4.DataBindings.Add("Text2", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// 小数点以下4, 8 + //dv = new DataView(this.Dt, "id = 5", "", DataViewRowState.Unchanged); + //this.winCustomTextBox5.DataBindings.Add("Text2", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// パッド + //dv = new DataView(this.Dt, "id = 6", "", DataViewRowState.Unchanged); + //this.winCustomTextBox6.DataBindings.Add("Text2", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// パッド + //dv = new DataView(this.Dt, "id = 7", "", DataViewRowState.Unchanged); + //this.winCustomTextBox7.DataBindings.Add("Text2", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + #endregion + + #region .Text3プロパティとDataView + + // バインド可能だが、単位変換に対応していない。 + + //// 設定なし + //dv = new DataView(this.Dt, "id = 1", "", DataViewRowState.Unchanged); + //this.winCustomTextBox1.DataBindings.Add("Text3", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, "hogehoge");//, "#,##0.########"); + + //// 桁区切り3 + //dv = new DataView(this.Dt, "id = 2", "", DataViewRowState.Unchanged); + //this.winCustomTextBox2.DataBindings.Add("Text3", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// 桁区切り4 + //dv = new DataView(this.Dt, "id = 3", "", DataViewRowState.Unchanged); + //this.winCustomTextBox3.DataBindings.Add("Text3", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// 小数点以下2, 6 + //dv = new DataView(this.Dt, "id = 4", "", DataViewRowState.Unchanged); + //this.winCustomTextBox4.DataBindings.Add("Text3", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// 小数点以下4, 8 + //dv = new DataView(this.Dt, "id = 5", "", DataViewRowState.Unchanged); + //this.winCustomTextBox5.DataBindings.Add("Text3", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// パッド + //dv = new DataView(this.Dt, "id = 6", "", DataViewRowState.Unchanged); + //this.winCustomTextBox6.DataBindings.Add("Text3", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// パッド + //dv = new DataView(this.Dt, "id = 7", "", DataViewRowState.Unchanged); + //this.winCustomTextBox7.DataBindings.Add("Text3", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + #endregion + + #region .ValueプロパティとDataView + + //// 設定なし + //dv = new DataView(this.Dt, "id = 1", "", DataViewRowState.Unchanged); + //this.winCustomTextBox1.DataBindings.Add("Value", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, "hogehoge");//, "#,##0.########"); + + //// 桁区切り3 + //dv = new DataView(this.Dt, "id = 2", "", DataViewRowState.Unchanged); + //this.winCustomTextBox2.DataBindings.Add("Value", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// 桁区切り4 + //dv = new DataView(this.Dt, "id = 3", "", DataViewRowState.Unchanged); + //this.winCustomTextBox3.DataBindings.Add("Value", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// 小数点以下2, 6 + //dv = new DataView(this.Dt, "id = 4", "", DataViewRowState.Unchanged); + //this.winCustomTextBox4.DataBindings.Add("Value", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// 小数点以下4, 8 + //dv = new DataView(this.Dt, "id = 5", "", DataViewRowState.Unchanged); + //this.winCustomTextBox5.DataBindings.Add("Value", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// パッド + //dv = new DataView(this.Dt, "id = 6", "", DataViewRowState.Unchanged); + //this.winCustomTextBox6.DataBindings.Add("Value", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// パッド + //dv = new DataView(this.Dt, "id = 7", "", DataViewRowState.Unchanged); + //this.winCustomTextBox7.DataBindings.Add("Value", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + #endregion + + #endregion + + #region winCustomTextBox8 複合(桁区切り3+小数点以下2、6+単位変換100万→10^6乗) + + //dv = new DataView(this.Dt, "id = 1", "", DataViewRowState.Unchanged); + //// 単位変換があるのでValueを使用しないと動作しない。 + ////this.winCustomTextBox8.DataBindings.Add("Text", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + ////this.winCustomTextBox8.DataBindings.Add("Text2", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + ////this.winCustomTextBox8.DataBindings.Add("Text3", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + this.winCustomTextBox8.DataBindings.Add("Value", dv, "aaa", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + //// DateTimeとは単位変換できないので連結不可 + //dv = new DataView(this.Dt, "id = 1", "", DataViewRowState.Unchanged); + //this.winCustomTextBox8.DataBindings.Add("Value", dv, "bbb", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + //this.winCustomTextBox8.DataBindings.Add("Value", this.BindingSource1, "BBB", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "#,##0.########"); + + #endregion + + #endregion + + #region WinCustomMaskedTextBoxの場合 + + // Text : 通常のTextプロパティ(画面表示用) + // Text2 : マスクを除いた値を設定・取得するプロパティ + // Text3 : 表示時マスク適用時の値を取得するプロパティ + + // TextとBBB(DateTime)のバインドはOK。 + this.winCustomMaskedTextBox9.DataBindings.Add("Text", this.BindingSource1, "BBB", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "yyyy/MM/dd"); + //// Text2とBBB(DateTime)をバインドするとロストフォーカスできなくなる。 + //this.winCustomMaskedTextBox9.DataBindings.Add("Text2", this.BindingSource1, "BBB", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "yyyy/MM/dd"); + //// Text3とBBB(DateTime)もダメ(取得専用のため)。 + //this.winCustomMaskedTextBox9.DataBindings.Add("Text3", this.BindingSource1, "BBB", true, DataSourceUpdateMode.OnPropertyChanged, null);//, "yyyy/MM/dd"); + + #endregion + + #endregion + + #region データグリッドとのデータバインディングをテストする。 + + #region WinCustomTextBoxの場合 + + // WinCustomTextBoxDgvColを作成 + WinCustomTextBoxDgvCol nomalColumn = new WinCustomTextBoxDgvCol(); + + nomalColumn.MaxLength = 15; + nomalColumn.IsNumeric = true; + + // EditInitialValue + //nomalColumn.EditInitialValue = EditInitialValue.Zero; + + // 編集中、小数点以下(Editingのみ実装) + nomalColumn.EditDigitsAfterDP_Editing= new EditDigitsAfterDP(CutMethod.Ceiling, 6); + + // パッド + //nomalColumn.EditPadding = new EditPadding(PadDirection.Right, '0'); + //nomalColumn.EditPadding = new EditPadding(PadDirection.Left, '0'); + + // 桁区切り(FormatStringで対応) + // DisplayUnits(処理で対応) + + nomalColumn.DataPropertyName = "aaa"; + nomalColumn.HeaderText = "aaa"; + + // FormatString(編集後、カンマ区切りで小数点2桁) + nomalColumn.DefaultCellStyle.Format = "#,##0.##"; + + this.dataGridView1.Columns.Add(nomalColumn); + + #endregion + + #region WinCustomMaskedTextBoxの場合 + + // WinCustomMaskedTextBoxDgvColを作成 + WinCustomMaskedTextBoxDgvCol maskedColumn = + new WinCustomMaskedTextBoxDgvCol(); + maskedColumn.DataPropertyName = "bbb"; + maskedColumn.HeaderText = "bbb"; + + // Maskと、Mask_Editingを逆にすると上手くいかない。 + // 初期表示時と、編集後で、セル(バインド先)のFormatが変わってしまうため。 + + maskedColumn.EditInitialValue = EditInitialValue.Blank; + + maskedColumn.Mask = "9999/99/99"; + maskedColumn.Mask_Editing = "9999年99月99日"; + + maskedColumn.EditToHankaku = true; + maskedColumn.EditToYYYYMMDD = true; + + // FormatString(編集後、カンマ区切りで小数点2桁) + maskedColumn.DefaultCellStyle.Format = "yyyy/MM/dd"; + + this.dataGridView1.Columns.Add(maskedColumn); + + #endregion + + #region WinCustomDropDownListの場合 + + // WinCustomDropDownListDgvColを作成 + DataGridViewComboBoxColumn comboColumn = + new DataGridViewComboBoxColumn(); + comboColumn.DataPropertyName = "ccc"; + comboColumn.HeaderText = "ccc"; + comboColumn.DataSource = CmnMasterDatasForList.GetMasterData("Test1"); // ↓どちらでも良い + //MasterDatasForList.GetMasterData("Test1", comboColumn.Items); // ↑どちらでも良い + comboColumn.ValueMember = "ID"; // 必須 + comboColumn.DisplayMember = "Name"; // 必須 + this.dataGridView1.Columns.Add(comboColumn); + + // --- + + // また、DataBindingsでは初期設定時のTextのReEditも効かない。 + // 従って、DataBindings時の方式としてはdecimal&FormatStringに寄せる必要がある。 + this.dataGridView1.DataSource = this.CreateDataTable(); + this.dataGridView1.Columns["id"].Visible = false; + this.dataGridView1.Columns["ddd"].Visible = false; // 変更通知を発生させる用途の列。 + + #endregion + + #endregion + + #endregion + } + + /// DataTable生成 + /// DataTable + private DataTable CreateDataTable() + { + DataTable dt = new DataTable(); + + dt.Columns.Add("id", typeof(int)); + dt.Columns.Add("aaa", typeof(decimal)); + dt.Columns.Add("bbb", typeof(DateTime)); + dt.Columns.Add("ccc"); + dt.Columns.Add("ddd"); + + DataRow dr = dt.NewRow(); + + dr["id"] = "1"; + dr["aaa"] = "11111111"; + dr["bbb"] = "2001/01/01"; + dr["ccc"] = "1"; + dt.Rows.Add(dr); + + dr = dt.NewRow(); + dr["id"] = "2"; + dr["aaa"] = "22222222"; + dr["bbb"] = "2002/02/02"; + dr["ccc"] = "2"; + dt.Rows.Add(dr); + + dr = dt.NewRow(); + dr["id"] = "3"; + dr["aaa"] = "33333333"; + dr["bbb"] = "2003/03/03"; + dr["ccc"] = "3"; + dt.Rows.Add(dr); + + dr = dt.NewRow(); + dr["id"] = "4"; + dr["aaa"] = "44444444"; + dr["bbb"] = "2004/04/04"; + dr["ccc"] = "1"; + dt.Rows.Add(dr); + + dr = dt.NewRow(); + dr["id"] = "5"; + dr["aaa"] = "55555555"; + dr["bbb"] = "2005/05/05"; + dr["ccc"] = "2"; + dt.Rows.Add(dr); + + dr = dt.NewRow(); + dr["id"] = "6"; + dr["aaa"] = "66666666"; + dr["bbb"] = "2006/06/06"; + dr["ccc"] = "3"; + dt.Rows.Add(dr); + + dr = dt.NewRow(); + dr["id"] = "7"; + dr["aaa"] = "77777777"; + dr["bbb"] = "2007/07/07"; + dr["ccc"] = "1"; + dt.Rows.Add(dr); + + dr = dt.NewRow(); + dr["id"] = "8"; + dr["aaa"] = "88888888"; + dr["bbb"] = "2008/08/08"; + dr["ccc"] = "1"; + dt.Rows.Add(dr); + + dt.AcceptChanges(); + + return dt; + } + + /// 一括チェックのテスト + private void button1_Click(object sender, EventArgs e) + { + string ret = ""; + + List lcr = new List(); + if (CmnCheckFunction.HasErrors(this, lcr)) + { + foreach (CheckResult cr in lcr) + { + ret += cr.CtrlName + "\r\n"; + foreach (string checkErrorInfo in cr.CheckErrorInfo) + { + ret += "・" + checkErrorInfo + "\r\n"; + } + ret += "\r\n"; + } + } + + MessageBox.Show(ret); + } + + /// 値取得プロパティ プロシージャのテスト(WinCustomTextBox) + private void button2_Click(object sender, EventArgs e) + { + //winCustomMaskedTextBox1.GetDateTime(); + StringBuilder sb = new StringBuilder(); + sb.AppendLine(this.GetValue(this.winCustomTextBox1)); + sb.AppendLine(this.GetValue(this.winCustomTextBox2)); + sb.AppendLine(this.GetValue(this.winCustomTextBox3)); + sb.AppendLine(this.GetValue(this.winCustomTextBox4)); + sb.AppendLine(this.GetValue(this.winCustomTextBox5)); + sb.AppendLine(this.GetValue(this.winCustomTextBox6)); + sb.AppendLine(this.GetValue(this.winCustomTextBox7)); + sb.AppendLine(this.GetValue(this.winCustomTextBox8)); + MessageBox.Show(sb.ToString()); + } + + /// 値取得プロパティ プロシージャのテスト(WinCustomMaskedTextBox) + private void button3_Click(object sender, EventArgs e) + { + //winCustomMaskedTextBox1.GetDateTime(); + StringBuilder sb = new StringBuilder(); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox1)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox2)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox3)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox4)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox5)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox6)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox7)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox8)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox9)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox10)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox11)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox12)); + sb.AppendLine(this.GetValue(this.winCustomMaskedTextBox13)); + MessageBox.Show(sb.ToString()); + } + + /// データソースからの変更通知を発生 + private void button4_Click(object sender, EventArgs e) + { + DataTable dt =this.Dt; + foreach (DataRow row in dt.Rows) + { + row["aaa"] = ((decimal)row["aaa"]) + 1; + row["bbb"] = ((DateTime)row["bbb"]).AddYears(1); + row["ccc"] = this.textBox1.Text; + } + dt.AcceptChanges(); + + dt = (DataTable)this.dataGridView1.DataSource; + foreach (DataRow row in dt.Rows) + { + row["aaa"] = ((decimal)row["aaa"]) + 1; + row["bbb"] = ((DateTime)row["bbb"]).AddYears(1); + row["ccc"] = this.textBox1.Text; + } + dt.AcceptChanges(); + + ((Bean)this.BindingSource1.DataSource).AAA = (((Bean)this.BindingSource1.DataSource).AAA) + 1; + ((Bean)this.BindingSource1.DataSource).BBB = ((Bean)this.BindingSource1.DataSource).BBB.AddYears(1); + ((Bean)this.BindingSource1.DataSource).CCC = this.textBox1.Text; + this.BindingSource1.ResetBindings(false); + } + + /// 値取得プロパティ プロシージャのテスト + private string GetValue(IGetValue igv) + { + StringBuilder sb = new StringBuilder(); + + sb.AppendLine(((Control)igv).Name); + try { sb.AppendLine("GetInt16:" + igv.GetInt16().ToString()); } catch { } + try { sb.AppendLine("GetInt32:" + igv.GetInt32().ToString()); } catch { } + try { sb.AppendLine("GetInt64:" + igv.GetInt64().ToString()); } catch { } + try { sb.AppendLine("GetFloat:" + igv.GetFloat().ToString()); } catch { } + try { sb.AppendLine("GetDouble:" + igv.GetDouble().ToString()); } catch { } + try { sb.AppendLine("GetDecimal:" + igv.GetDecimal().ToString()); } catch { } + try { sb.AppendLine("GetDateTime:" + igv.GetDateTime().ToString()); } catch { } + + if (igv is WinCustomTextBox) + { + WinCustomTextBox wctbx = (WinCustomTextBox)igv; + // 通常のTextプロパティ(可変) + sb.AppendLine("Text:" + wctbx.Text); + // ユーザの入力値だけ取得する + sb.AppendLine("Text2:" + wctbx.Text2); + // 編集処理を適用した値を取得する + sb.AppendLine("Text3:" + wctbx.Text3); + // データバインディング用プロパティ値を取得する + sb.AppendLine("Value:" + wctbx.Value); + } + else if (igv is WinCustomMaskedTextBox) + { + WinCustomMaskedTextBox wcmtbx = (WinCustomMaskedTextBox)igv; + // 通常のTextプロパティ(可変) + sb.AppendLine("Text:" + wcmtbx.Text); + // ユーザの入力値だけ取得する + sb.AppendLine("Text2:" + wcmtbx.Text2); + // 入力時マスクを適用した値を取得する + sb.AppendLine("Text3:" + wcmtbx.Text3); + } + + return sb.ToString(); + } + + /// winCustomTextBox_TextChanged + private void winCustomTextBox_TextChanged(object sender, EventArgs e) + { + string s = ((TextBox)sender).Name; + + switch (s.Substring(s.Length - 1, 1)) + { + // Text2(ユーザ入力のTextをバインド) + + case "2": + this.winCustomTextBox2_2.Text = this.winCustomTextBox2.Text2; + break; + case "3": + this.winCustomTextBox3_2.Text = this.winCustomTextBox3.Text2; + break; + case "4": + this.winCustomTextBox4_2.Text = this.winCustomTextBox4.Text2; + break; + case "5": + this.winCustomTextBox5_2.Text = this.winCustomTextBox5.Text2; + break; + case "6": + this.winCustomTextBox6_2.Text = this.winCustomTextBox6.Text2; + break; + case "7": + this.winCustomTextBox7_2.Text = this.winCustomTextBox7.Text2; + break; + default: + break; + } + } + + /// winCustomMaskedTextBox_TextChanged + private void winCustomMaskedTextBox_TextChanged(object sender, EventArgs e) + { + string s = ((MaskedTextBox)sender).Name; + + switch (s.Substring(s.Length - 1, 1)) + { + // Text2(ユーザ入力のTextをバインド) + + case "2": + this.winCustomMaskedTextBox2_2.Text = this.winCustomMaskedTextBox2.Text2; + break; + case "3": + this.winCustomMaskedTextBox3_2.Text = this.winCustomMaskedTextBox3.Text2; + break; + case "4": + this.winCustomMaskedTextBox4_2.Text = this.winCustomMaskedTextBox4.Text2; + break; + case "5": + this.winCustomMaskedTextBox5_2.Text = this.winCustomMaskedTextBox5.Text2; + break; + case "6": + this.winCustomMaskedTextBox6_2.Text = this.winCustomMaskedTextBox6.Text2; + break; + case "7": + this.winCustomMaskedTextBox7_2.Text = this.winCustomMaskedTextBox7.Text2; + break; + case "8": + this.winCustomMaskedTextBox8_2.Text = this.winCustomMaskedTextBox8.Text2; + break; + case "9": + this.winCustomMaskedTextBox9_2.Text = this.winCustomMaskedTextBox9.Text2; + break; + case "10": + this.winCustomMaskedTextBox10_2.Text = this.winCustomMaskedTextBox10.Text2; + break; + case "11": + this.winCustomMaskedTextBox11_2.Text = this.winCustomMaskedTextBox11.Text2; + break; + default: + break; + } + } + + /// デザイナで設定できなくした + private void winCustomTextBox8_ValueChanged(object sender, EventArgs e) + { + System.Diagnostics.Debug.WriteLine("ValueChanged:" + ((WinCustomTextBox)sender).Name); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.resx b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.resx new file mode 100644 index 000000000..d58980a38 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Program.cs new file mode 100644 index 000000000..187d76b04 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Program.cs @@ -0,0 +1,38 @@ +//********************************************************************************** +//* カスタム コントロール・サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :Program +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Windows.Forms; + +namespace CustCtrl_sample +{ + static class Program + { + /// + /// アプリケーションのメイン エントリ ポイントです。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..0f98f45a4 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Properties/AssemblyInfo.cs @@ -0,0 +1,54 @@ +//********************************************************************************** +//* カスタム コントロール・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("CustCtrl_sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("CustCtrl_sample")] +[assembly: AssemblyCopyright("Copyright (c) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です +[assembly: Guid("35644d0c-64cb-4ab8-a8ce-4987cd132bd5")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を +// 既定値にすることができます: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Readme.txt b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Readme.txt new file mode 100644 index 000000000..65a4d555e --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Readme.txt @@ -0,0 +1,217 @@ +Windows Formカスタム・コントロールの利用サンプル +デザインタイム・プロパティからチェック処理を変更可能。 + +以下のクラスの仕様を説明する。 + ・WinCustomTextBox.cs(.vb) + ・WinCustomMaskedTextBox.cs(.vb) + +プロパティ + ●は双方のクラス共通のプロパティ + t)はWinCustomTextBoxのみのプロパティ + m)はWinCustomMaskedTextBoxのみのプロパティ + +<拡張プロパティ(既存のプロパティのoverrideや追加のプロパティ)> + ●Text(override): + ・型:string(既定値:空文字列) + ・説明:元のTextプロパティ(表示されているTextと同じ値を返す) + + t)Value(追加): + ・型:object型 + ・説明:単位指定可能なValueプロパティ(使用する際はDisplayUnitsに0以上の値を設定) + ・Textプロパティに変換する際に単位変換を行う(例:実値=円、表示値=M円など)。 + ・また、EditDigitsAfterDPよりEditDigitsAfterDP_Editingの方が精度が高い場合、 + Valueを使用すると、EditDigitsAfterDP_Editingの精度でデータを取得できるようになる。 + + m)TextMaskFormat(override): + ・型:MaskFormat列挙体 + ・説明:読み取り専用に動作を変更してある(IncludeLiterals固定)。 + + ・MaskFormat列挙体: + ・IncludeLiterals: + ・型:int + ・説明:ユーザーによって入力されたテキストのほか、マスクで定義されたリテラル文字を返します。 + + m)Text2(追加): + ・型:string(既定値:空文字列) + ・説明:編集処理を施す前のユーザ入力のTextプロパティ(WinCustomMaskedTextBoxではマスクを除いた値) + + m)Text3(追加): + ・型:string(既定値:空文字列) + ・説明:編集処理を施した後のTextプロパティ(WinCustomMaskedTextBoxでは表示時マスク適用時の値) + +<デザインタイム・プロパティ(追加のプロパティ)> + + <チェック系> + ●CheckValidatingプロパティ: + ・型:bool(既定値:false) + ・説明:Validatingイベントでチェックするかどうか + + ●CheckTypeプロパティ: + ・型:CheckTypeクラス + ・説明:チェック・パターンを定義 + + ・CheckTypeクラス: + ・IsIndispensabile: + ・型:bool(既定値:false) + ・説明:必須入力チェックを有効にする。 + ・IsHankaku: + ・型:bool(既定値:false) + ・説明:半角チェックを有効にする。 + 空文字列はチェック対象外。 + ・IsZenkaku: + ・型:bool(既定値:false) + ・説明:全角チェックを有効にする。 + 空文字列はチェック対象外。 + ・IsNumeric: + ・型:bool(既定値:false) + ・説明:数値チェックを有効にする(Double型にTryParseできるかどうか)。 + 空文字列はチェック対象外。 + ・IsKatakana: + ・型:bool(既定値:false) + ・説明:片仮名チェックを有効にする。 + 空文字列はチェック対象外。 + ・IsHanKatakana: + ・型:bool(既定値:false) + ・説明:半角片仮名チェックを有効にする。 + 空文字列はチェック対象外。 + ・IsHiragana: + ・型:bool(既定値:false) + ・説明:平仮名チェックを有効にする。 + 空文字列はチェック対象外。 + ・IsDate: + ・型:bool(既定値:false) + ・説明:日付チェックを有効にする(DateTime型にTryParseできるかどうか)。 + 空文字列はチェック対象外。 + + ●CheckRegExpプロパティ: + ・型:string(既定値:空文字列) + ・説明:正規表現チェック・パターンを定義 + + ●CheckProhibitedCharプロパティ: + ・型:bool(既定値:false) + ・説明:禁則文字チェックを有効にする(禁則文字はライブラリの固定値)。 + + <編集系> + ●EditInitialValueプロパティ: + ・型:EditInitialValue列挙型 + ・説明:初期値を定義 + 空文字初期化時や空文字クリア時の初期値を指定する。 + デザイナ中では動作しない。Textプロパティを優先する。 + + ・EditInitialValue列挙型: + ・Blank(既定値): + ・型:int + ・説明:空文字列 + ・Zero: + ・型:int + ・説明:「0」 + + t)EditAddFigureプロパティ: + ・型:EditAddFigure列挙型 + ・説明:桁区切りを定義 + + ・EditAddFigure列挙型: + ・None(既定値): + ・型:int + ・説明:編集なし + ・Af3: + ・型:int + ・説明:三桁区切り + ・Af4: + ・型:int + ・説明:四桁区切り + + t)EditPaddingプロパティ: + ・型:EditPaddingクラス + ・説明:文字埋め編集を定義 + + ・EditPaddingクラス: + ・PadDirection: + ・型:PadDirection列挙型 + ・説明:パッド方向を指定 + ・PadChar: + ・型:char? + ・説明:パッド文字を指定(nullは半角スペースを意味する) + + ・PadDirection列挙型: + ・None(既定値): + ・型:int + ・説明:編集なし + ・Right: + ・型:int + ・説明:右側にパッド + ・Left: + ・型:int + ・説明:左側にパッド + + t)EditDigitsAfterDPプロパティ: + ・型:EditDigitsAfterDPクラス + ・説明:(編集後)小数点以下x桁編集を定義 + + ・EditDigitsAfterDPクラス: + ・HowToCut: + ・型:CutMethod?列挙型 + ・説明:切り方を指定 + ・DigitsAfterDP: + ・型:uint(既定値:0) + ・説明:小数点数以下x桁を指定 + + ・CutMethod列挙型: + ・None(既定値): + ・型:int + ・説明:編集なし + ・Banker: + ・型:int + ・説明:最近接偶数編集 + ・_4sya5nyu: + ・型:int + ・説明:四捨五入 + ・Floor: + ・型:int + ・説明:切り捨て + ・Ceiling: + ・型:int + ・説明:切り上げ + + t)EditDigitsAfterDP_Editingプロパティ: + ・型:EditDigitsAfterDPクラス + ・説明:(編集中)小数点以下x桁編集を定義 + + ・EditDigitsAfterDPクラス:同上 + ・CutMethod列挙型:同上 + + t)DisplayUnitsプロパティ: + ・型:uint? + ・説明: + ・単位編集を定義(10の^n乗のnを定義) + ・編集時は、Value値 / 10の^n乗で単位を変更する。 + ・ちなみに、10の^0乗は、1で単位変更無しとなる。 + + m)Mask_Editingプロパティ: + ・型:string(既定値:空文字列) + ・説明:編集中のマスク(このコントロールに許可される入力を管理する文字列を設定します。 + + m)HankakuOnlyプロパティ: + ・型:bool(既定値:false) + ・説明:編集中のマスクが半角制限できないので、別途半角編集を設定する。 + +・・・ + +<データバインディングの対象プロパティ> + - WinCustomTextBox + - Text : 通常のTextプロパティ(画面表示用) + バインド可能だが、単位変換に対応していない。 + - Text2 : ユーザ入力のTextを取得するプロパティ + ココにバインドしてばダメ(編集処理が動作しない)。 + - Text3 : 編集処理込のTextを取得するプロパティ + バインド可能だが、単位変換に対応していない。 + - Value : 単位変換に対応したプロパティ + 単位変換がある場合、Valueを使用しないと動作しない。 + + - WinCustomMaskedTextBox + - Text : 通常のTextプロパティ(画面表示用) + データバインディングで利用可能。 + - Text2 : マスクを除いた値を設定・取得するプロパティ + データバインディングで利用不可能。 + - Text3 : 表示時マスク適用時の値を取得するプロパティ + 取得専用のため入力単方向のデータバインディングのみ利用可能。 diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_BatUpd.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_BatUpd.cs new file mode 100644 index 000000000..877783929 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_BatUpd.cs @@ -0,0 +1,169 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(B層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :LayerB_BatUpd +//* クラス日本語名 :B層(静的SQLのCRUD:Productsテーブル) +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using GenDaoAndBatUpd_sample.Common; + +using System.Data; + +using Touryo.Infrastructure.Business.RichClient.Business; +using Touryo.Infrastructure.Framework.Common; + +namespace GenDaoAndBatUpd_sample.Business +{ + /// B層(静的SQLのCRUD:Productsテーブル) + class LayerB_BatUpd : MyFcBaseLogic2CS + { + /// 業務処理を実装 + /// 引数クラス + private void UOC_BatUpd(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoProducts daoProducts = new DaoProducts(this.GetDam()); + + // ROW毎に処理 + foreach (DataRow dr in testParameter.dt.Rows) + { + // パラメタをクリアする。 + daoProducts.ClearParametersFromHt(); + + switch (dr.RowState) + { + case DataRowState.Added: + + #region 1件挿入 + + // 設定(インサート値) + daoProducts.PK_ProductID = dr["ProductID"].ToString(); + daoProducts.ProductName = dr["ProductName"].ToString(); + daoProducts.SupplierID = dr["SupplierID"].ToString(); + daoProducts.CategoryID = dr["CategoryID"].ToString(); + daoProducts.QuantityPerUnit = dr["QuantityPerUnit"].ToString(); + daoProducts.UnitPrice = dr["UnitPrice"].ToString(); + daoProducts.UnitsInStock = dr["UnitsInStock"].ToString(); + daoProducts.UnitsOnOrder = dr["UnitsOnOrder"].ToString(); + daoProducts.ReorderLevel = dr["ReorderLevel"].ToString(); + daoProducts.Discontinued = dr["Discontinued"].ToString(); + + // インサート(S1でよい) + testReturn.obj = daoProducts.S1_Insert(); + + #endregion + + break; + + case DataRowState.Deleted: + + #region 1件削除 + + // 設定(主キー) + daoProducts.PK_ProductID = dr["ProductID", DataRowVersion.Original].ToString(); + // ★ 楽観排他をする場合は、ここにタイムスタンプを追加する。 + + // デリート(タイムスタンプを指定する場合は、D4_Delete) + testReturn.obj = daoProducts.D4_Delete(); + + #endregion + + break; + + case DataRowState.Modified: + + #region 1件更新 + + // 設定(主キー) + daoProducts.PK_ProductID = dr["ProductID"].ToString(); + + // ★ 楽観排他をする場合は、ここにタイムスタンプを追加する。 + // ↓は、DataRowVersion.Originalを使用した楽観排他の例 + daoProducts.ProductName = dr["ProductName", DataRowVersion.Original].ToString(); + daoProducts.SupplierID = dr["SupplierID", DataRowVersion.Original].ToString(); + daoProducts.CategoryID = dr["CategoryID", DataRowVersion.Original].ToString(); + daoProducts.QuantityPerUnit = dr["QuantityPerUnit", DataRowVersion.Original].ToString(); + daoProducts.UnitPrice = dr["UnitPrice", DataRowVersion.Original].ToString(); + daoProducts.UnitsInStock = dr["UnitsInStock", DataRowVersion.Original].ToString(); + daoProducts.UnitsOnOrder = dr["UnitsOnOrder", DataRowVersion.Original].ToString(); + daoProducts.ReorderLevel = dr["ReorderLevel", DataRowVersion.Original].ToString(); + daoProducts.Discontinued = dr["Discontinued", DataRowVersion.Original].ToString(); + + // 更新値設定 + daoProducts.Set_ProductName_forUPD = dr["ProductName"].ToString(); + daoProducts.Set_SupplierID_forUPD = dr["SupplierID"].ToString(); + daoProducts.Set_CategoryID_forUPD = dr["CategoryID"].ToString(); + daoProducts.Set_QuantityPerUnit_forUPD = dr["QuantityPerUnit"].ToString(); + daoProducts.Set_UnitPrice_forUPD = dr["UnitPrice"].ToString(); + daoProducts.Set_UnitsInStock_forUPD = dr["UnitsInStock"].ToString(); + daoProducts.Set_UnitsOnOrder_forUPD = dr["UnitsOnOrder"].ToString(); + daoProducts.Set_ReorderLevel_forUPD = dr["ReorderLevel"].ToString(); + daoProducts.Set_Discontinued_forUPD = dr["Discontinued"].ToString(); + + // アップデート(タイムスタンプを指定する場合は、D3_Update) + testReturn.obj = daoProducts.D3_Update(); + + #endregion + + break; + + default: + break; + } + } + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoProducts daoProducts = new DaoProducts(this.GetDam()); + + // 全件取得 + DataTable dt = new DataTable(); + daoProducts.D2_Select(dt); + + // 戻り値を戻す + testReturn.dt = dt; + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_Dynamic.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_Dynamic.cs new file mode 100644 index 000000000..6bd390af3 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_Dynamic.cs @@ -0,0 +1,206 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(B層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :LayerB_Dynamic +//* クラス日本語名 :B層(動的SQLのCRUD:Categoryテーブル) +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using GenDaoAndBatUpd_sample.Common; + +using System.Data; + +using Touryo.Infrastructure.Business.RichClient.Business; +using Touryo.Infrastructure.Framework.Common; + +namespace GenDaoAndBatUpd_sample.Business +{ + /// B層(動的SQLのCRUD:Categoryテーブル) + class LayerB_Dynamic : MyFcBaseLogic2CS + { + /// 業務処理を実装 + /// 引数クラス + private void UOC_Insert(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoCategories daoCategories = new DaoCategories(this.GetDam()); + + // 1件挿入 + //daoCategories.PK_CategoryID = testParameter.field1; + daoCategories.CategoryName = testParameter.field2; + daoCategories.Description = testParameter.field3; + //daoCategories.Picture = testParameter.field4; + + // インサート + testReturn.obj = daoCategories.D1_Insert(); + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Select(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoCategories daoCategories = new DaoCategories(this.GetDam()); + + // n件参照 + if (testParameter.field1_ForSearch.ToString().Trim() == "") { } + else + { daoCategories.PK_CategoryID = testParameter.field1_ForSearch; } + + if (testParameter.field2_ForSearch.ToString().Trim() == "") { } + else + { daoCategories.CategoryName = testParameter.field2_ForSearch; } + + DataTable dt = new DataTable(); + daoCategories.D2_Select(dt); + + testReturn.dt = dt; + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Update(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoCategories daoCategories = new DaoCategories(this.GetDam()); + + // n件更新 + + // 更新値設定 + if (testParameter.field2_ForUpd.ToString().Trim() == "") { } + else + { daoCategories.Set_CategoryName_forUPD = testParameter.field2_ForUpd; } + + if (testParameter.field3_ForUpd.ToString().Trim() == "") { } + else + { daoCategories.Set_Description_forUPD = testParameter.field3_ForUpd; } + + // 検索条件設定 + if (testParameter.field1_ForSearch.ToString().Trim() == "") { } + else + { daoCategories.PK_CategoryID = testParameter.field1_ForSearch; } + + if (testParameter.field2_ForSearch.ToString().Trim() == "") { } + else + { daoCategories.CategoryName = testParameter.field2_ForSearch; } + + // アップデート + testReturn.obj = daoCategories.D3_Update(); + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Delete(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoCategories daoCategories = new DaoCategories(this.GetDam()); + + // n件削除 + + // 検索条件設定 + if (testParameter.field1_ForSearch.ToString().Trim() == "") { } + else + { daoCategories.PK_CategoryID = testParameter.field1_ForSearch; } + + if (testParameter.field2_ForSearch.ToString().Trim() == "") { } + else + { daoCategories.CategoryName = testParameter.field2_ForSearch; } + + // デリート + testReturn.obj = daoCategories.D4_Delete(); + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoCategories daoCategories = new DaoCategories(this.GetDam()); + + // 全件取得 + + // 実行 + DataTable dt = new DataTable(); + daoCategories.D2_Select(dt); + + // 戻り値を戻す + testReturn.dt = dt; + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_Static.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_Static.cs new file mode 100644 index 000000000..0695de367 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Business/LayerB_Static.cs @@ -0,0 +1,233 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(B層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :LayerB_Static +//* クラス日本語名 :B層(静的SQLのCRUD:Suppliersテーブル) +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using GenDaoAndBatUpd_sample.Common; + +using System.Data; + +using Touryo.Infrastructure.Business.RichClient.Business; +using Touryo.Infrastructure.Framework.Common; + +namespace GenDaoAndBatUpd_sample.Business +{ + /// B層(静的SQLのCRUD:Suppliersテーブル) + class LayerB_Static : MyFcBaseLogic2CS + { + /// 業務処理を実装 + /// 引数クラス + private void UOC_Insert(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoSuppliers daoSuppliers = new DaoSuppliers(this.GetDam()); + + // 1件挿入 + //daoSuppliers.PK_SupplierID = testParameter.field1; + daoSuppliers.CompanyName = testParameter.field2; + daoSuppliers.ContactName = testParameter.field3; + daoSuppliers.ContactTitle = testParameter.field4; + daoSuppliers.Address = testParameter.field5; + daoSuppliers.City = testParameter.field6; + daoSuppliers.Region = testParameter.field7; + daoSuppliers.PostalCode = testParameter.field8; + daoSuppliers.Country = testParameter.field9; + daoSuppliers.Phone = testParameter.field10; + daoSuppliers.Fax = testParameter.field11; + daoSuppliers.HomePage = testParameter.field12; + + testReturn.obj = daoSuppliers.S1_Insert(); + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Select(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoSuppliers daoSuppliers = new DaoSuppliers(this.GetDam()); + + // 1件参照 + daoSuppliers.PK_SupplierID = testParameter.field1; + + DataTable dt = new DataTable(); + daoSuppliers.S2_Select(dt); + + testReturn.field1 = dt.Rows[0][0]; + testReturn.field2 = dt.Rows[0][1]; + testReturn.field3 = dt.Rows[0][2]; + testReturn.field4 = dt.Rows[0][3]; + testReturn.field5 = dt.Rows[0][4]; + testReturn.field6 = dt.Rows[0][5]; + testReturn.field7 = dt.Rows[0][6]; + testReturn.field8 = dt.Rows[0][7]; + testReturn.field9 = dt.Rows[0][8]; + testReturn.field10 = dt.Rows[0][9]; + testReturn.field11 = dt.Rows[0][10]; + testReturn.field12 = dt.Rows[0][11]; + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Update(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoSuppliers daoSuppliers = new DaoSuppliers(this.GetDam()); + + // 1件更新 + daoSuppliers.PK_SupplierID = testParameter.field1; + + if (testParameter.field2_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_CompanyName_forUPD = testParameter.field2_ForUpd; } + + if (testParameter.field3_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_ContactName_forUPD = testParameter.field3_ForUpd; } + + if (testParameter.field4_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_ContactTitle_forUPD = testParameter.field4_ForUpd; } + + if (testParameter.field5_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_Address_forUPD = testParameter.field5_ForUpd; } + + if (testParameter.field6_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_City_forUPD = testParameter.field6_ForUpd; } + + if (testParameter.field7_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_Region_forUPD = testParameter.field7_ForUpd; } + + if (testParameter.field8_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_PostalCode_forUPD = testParameter.field8_ForUpd; } + + if (testParameter.field9_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_Country_forUPD = testParameter.field9_ForUpd; } + + if (testParameter.field10_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_Phone_forUPD = testParameter.field10_ForUpd; } + + if (testParameter.field11_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_Fax_forUPD = testParameter.field11_ForUpd; } + + if (testParameter.field12_ForUpd.ToString().Trim() == "") { } + else + { daoSuppliers.Set_HomePage_forUPD = testParameter.field12_ForUpd; } + + testReturn.obj = daoSuppliers.S3_Update(); + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + + /// 業務処理を実装 + /// 引数クラス + private void UOC_Delete(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoSuppliers daoSuppliers = new DaoSuppliers(this.GetDam()); + + // 1件削除 + daoSuppliers.PK_SupplierID = testParameter.field1; + + testReturn.obj = daoSuppliers.S4_Delete(); + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + + /// 業務処理を実装 + /// 引数クラス + private void UOC_SelectAll(BaseParameterValue parameterValue) + { + // 引数クラスをアップキャスト + TestParameterValue testParameter = (TestParameterValue)parameterValue; + + // 戻り値クラスを生成 + TestReturnValue testReturn = new TestReturnValue(); + + // ↓業務処理----------------------------------------------------- + + // データアクセス クラスを生成する + DaoSuppliers daoSuppliers = new DaoSuppliers(this.GetDam()); + + // 全件参照 + DataTable dt = new DataTable(); + daoSuppliers.D2_Select(dt); + + // 戻り値を戻す + testReturn.dt = dt; + + // ↑業務処理----------------------------------------------------- + + // 戻り値クラスをダウンキャストして戻す + this.ReturnValue = (BaseReturnValue)testReturn; + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Common/TestParameterValue.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Common/TestParameterValue.cs new file mode 100644 index 000000000..38604113c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Common/TestParameterValue.cs @@ -0,0 +1,114 @@ +//********************************************************************************** +//* バッチ更新処理・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :TestParameterValue +//* クラス日本語名 :テスト用の引数クラス +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Data; +using Touryo.Infrastructure.Business.Common; +using Touryo.Infrastructure.Business.Util; + +namespace GenDaoAndBatUpd_sample.Common +{ + /// + /// TestParameterValue の概要の説明です + /// + public class TestParameterValue : MyParameterValue + { + #region コンストラクタ + + public TestParameterValue(string screenId, string controlId, string methodName, string actionType, MyUserInfo user) + : base(screenId, controlId, methodName, actionType, user) + { + // Baseのコンストラクタに引数を渡すために必要。 + } + + #endregion + + #region フィールド + + // 値(インサート、主キー値など) + public object field1; + public object field2; + public object field3; + public object field4; + public object field5; + public object field6; + public object field7; + public object field8; + public object field9; + public object field10; + public object field11; + public object field12; + public object field13; + public object field14; + public object field15; + public object field16; + public object field17; + public object field18; + public object field19; + public object field20; + + // 更新時 + public object field1_ForUpd; + public object field2_ForUpd; + public object field3_ForUpd; + public object field4_ForUpd; + public object field5_ForUpd; + public object field6_ForUpd; + public object field7_ForUpd; + public object field8_ForUpd; + public object field9_ForUpd; + public object field10_ForUpd; + public object field11_ForUpd; + public object field12_ForUpd; + public object field13_ForUpd; + public object field14_ForUpd; + public object field15_ForUpd; + public object field16_ForUpd; + public object field17_ForUpd; + public object field18_ForUpd; + public object field19_ForUpd; + public object field20_ForUpd; + + // 検索条件 + public object field1_ForSearch; + public object field2_ForSearch; + public object field3_ForSearch; + public object field4_ForSearch; + public object field5_ForSearch; + public object field6_ForSearch; + public object field7_ForSearch; + public object field8_ForSearch; + public object field9_ForSearch; + public object field10_ForSearch; + public object field11_ForSearch; + public object field12_ForSearch; + public object field13_ForSearch; + public object field14_ForSearch; + public object field15_ForSearch; + public object field16_ForSearch; + public object field17_ForSearch; + public object field18_ForSearch; + public object field19_ForSearch; + public object field20_ForSearch; + + #endregion + + public DataTable dt; + public object obj; + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Common/TestReturnValue.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Common/TestReturnValue.cs new file mode 100644 index 000000000..276bd6810 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Common/TestReturnValue.cs @@ -0,0 +1,58 @@ +//********************************************************************************** +//* バッチ更新処理・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :TestReturnValue +//* クラス日本語名 :テスト用の戻り値クラス +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Data; +using Touryo.Infrastructure.Business.Common; + +namespace GenDaoAndBatUpd_sample.Common +{ + /// + /// TestReturnValueの概要の説明です + /// + public class TestReturnValue : MyReturnValue + { + #region フィールド + + public object field1; + public object field2; + public object field3; + public object field4; + public object field5; + public object field6; + public object field7; + public object field8; + public object field9; + public object field10; + public object field11; + public object field12; + public object field13; + public object field14; + public object field15; + public object field16; + public object field17; + public object field18; + public object field19; + public object field20; + + #endregion + + public DataTable dt; + public object obj; + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories.cs new file mode 100644 index 000000000..08d9fb528 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories.cs @@ -0,0 +1,450 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :DaoCategories +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class DaoCategories : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public DaoCategories(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// CategoryID列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_CategoryID + { + set + { + this.HtParameter["CategoryID"] = value; + } + get + { + return this.HtParameter["CategoryID"]; + } + } + + + + /// CategoryName列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object CategoryName + { + set + { + this.HtParameter["CategoryName"] = value; + } + get + { + return this.HtParameter["CategoryName"]; + } + } + + /// Description列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Description + { + set + { + this.HtParameter["Description"] = value; + } + get + { + return this.HtParameter["Description"]; + } + } + + /// Picture列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Picture + { + set + { + this.HtParameter["Picture"] = value; + } + get + { + return this.HtParameter["Picture"]; + } + } + + + /// Set_CategoryID_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_CategoryID_forUPD + { + set + { + this.HtParameter["Set_CategoryID_forUPD"] = value; + } + get + { + return this.HtParameter["Set_CategoryID_forUPD"]; + } + } + + + /// Set_CategoryName_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_CategoryName_forUPD + { + set + { + this.HtParameter["Set_CategoryName_forUPD"] = value; + } + get + { + return this.HtParameter["Set_CategoryName_forUPD"]; + } + } + + + /// Set_Description_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Description_forUPD + { + set + { + this.HtParameter["Set_Description_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Description_forUPD"]; + } + } + + + /// Set_Picture_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Picture_forUPD + { + set + { + this.HtParameter["Set_Picture_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Picture_forUPD"]; + } + } + + + + /// CategoryID_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object CategoryID_Like + { + set + { + this.HtParameter["CategoryID_Like"] = value; + } + get + { + return this.HtParameter["CategoryID_Like"]; + } + } + + + /// CategoryName_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object CategoryName_Like + { + set + { + this.HtParameter["CategoryName_Like"] = value; + } + get + { + return this.HtParameter["CategoryName_Like"]; + } + } + + + /// Description_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Description_Like + { + set + { + this.HtParameter["Description_Like"] = value; + } + get + { + return this.HtParameter["Description_Like"]; + } + } + + + /// Picture_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Picture_Like + { + set + { + this.HtParameter["Picture_Like"] = value; + } + get + { + return this.HtParameter["Picture_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("DaoCategories_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("DaoCategories_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("DaoCategories_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("DaoCategories_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("DaoCategories_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("DaoCategories_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("DaoCategories_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("DaoCategories_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("DaoCategories_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D1_Insert.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D1_Insert.xml new file mode 100644 index 000000000..01c4fe4a0 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D1_Insert.xml @@ -0,0 +1,27 @@ + + + -- DaoCategories_D1_Insert + -- 2014/2/9 日立 太郎 + INSERT INTO + [Categories] + ( + + [CategoryID], + [CategoryName], + [Description], + [Picture], + + ) + VALUES + ( + + @CategoryID, + @CategoryName, + @Description, + @Picture, + + ) + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D2_Select.xml new file mode 100644 index 000000000..f016b896d --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D2_Select.xml @@ -0,0 +1,23 @@ + + + -- DaoCategories_D2_Select + -- 2014/2/9 日立 太郎 + SELECT + [CategoryID], + [CategoryName], + [Description], + [Picture] + FROM + [Categories] + + WHERE + AND [CategoryID] = @CategoryIDAND [CategoryID] IS NULL + AND [CategoryID] LIKE @CategoryID_Like + AND [CategoryName] = @CategoryNameAND [CategoryName] IS NULL + AND [CategoryName] LIKE @CategoryName_Like + AND [Description] = @DescriptionAND [Description] IS NULL + AND [Description] LIKE @Description_Like + AND [Picture] = @PictureAND [Picture] IS NULL + AND [Picture] LIKE @Picture_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D3_Update.xml new file mode 100644 index 000000000..5bf09fbc0 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D3_Update.xml @@ -0,0 +1,21 @@ + + + -- DaoCategories_D3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [Categories] + SET + + [CategoryID] = @Set_CategoryID_forUPD, + [CategoryName] = @Set_CategoryName_forUPD, + [Description] = @Set_Description_forUPD, + [Picture] = @Set_Picture_forUPD, + + + WHERE + AND [CategoryID] = @CategoryIDAND [CategoryID] IS NULL + AND [CategoryName] = @CategoryNameAND [CategoryName] IS NULL + AND [Description] = @DescriptionAND [Description] IS NULL + AND [Picture] = @PictureAND [Picture] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D4_Delete.xml new file mode 100644 index 000000000..f16df1a84 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D4_Delete.xml @@ -0,0 +1,14 @@ + + + -- DaoCategories_D4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [Categories] + + WHERE + AND [CategoryID] = @CategoryIDAND [CategoryID] IS NULL + AND [CategoryName] = @CategoryNameAND [CategoryName] IS NULL + AND [Description] = @DescriptionAND [Description] IS NULL + AND [Picture] = @PictureAND [Picture] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D5_SelCnt.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D5_SelCnt.xml new file mode 100644 index 000000000..8ca79b45a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_D5_SelCnt.xml @@ -0,0 +1,20 @@ + + + -- DaoCategories_D5_SelCnt + -- 2014/2/9 日立 太郎 + SELECT + COUNT(*) + FROM + [Categories] + + WHERE + AND [CategoryID] = @CategoryIDAND [CategoryID] IS NULL + AND [CategoryID] LIKE @CategoryID_Like + AND [CategoryName] = @CategoryNameAND [CategoryName] IS NULL + AND [CategoryName] LIKE @CategoryName_Like + AND [Description] = @DescriptionAND [Description] IS NULL + AND [Description] LIKE @Description_Like + AND [Picture] = @PictureAND [Picture] IS NULL + AND [Picture] LIKE @Picture_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S1_Insert.sql b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S1_Insert.sql new file mode 100644 index 000000000..629b90267 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S1_Insert.sql @@ -0,0 +1,17 @@ +-- DaoCategories_S1_Insert +-- 2014/2/9 日立 太郎 +INSERT INTO + [Categories] + ( + [CategoryID], + [CategoryName], + [Description], + [Picture] + ) +VALUES + ( + @CategoryID, + @CategoryName, + @Description, + @Picture + ) diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S2_Select.xml new file mode 100644 index 000000000..0ba98eb35 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S2_Select.xml @@ -0,0 +1,16 @@ + + + -- DaoCategories_S2_Select + -- 2014/2/9 日立 太郎 + SELECT + [CategoryID], + [CategoryName], + [Description], + [Picture] + FROM + [Categories] + + WHERE + [CategoryID] = @CategoryID + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S3_Update.xml new file mode 100644 index 000000000..fb541c09e --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S3_Update.xml @@ -0,0 +1,16 @@ + + + -- DaoCategories_S3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [Categories] + SET + + [CategoryID] = @Set_CategoryID_forUPD, + [CategoryName] = @Set_CategoryName_forUPD, + [Description] = @Set_Description_forUPD, + [Picture] = @Set_Picture_forUPD, + + WHERE + [CategoryID] = @CategoryID + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S4_Delete.xml new file mode 100644 index 000000000..4eebb5453 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoCategories_S4_Delete.xml @@ -0,0 +1,11 @@ + + + -- DaoCategories_S4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [Categories] + + WHERE + [CategoryID] = @CategoryID + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts.cs new file mode 100644 index 000000000..499b0e629 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts.cs @@ -0,0 +1,714 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :DaoProducts +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class DaoProducts : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public DaoProducts(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// ProductID列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_ProductID + { + set + { + this.HtParameter["ProductID"] = value; + } + get + { + return this.HtParameter["ProductID"]; + } + } + + + + /// ProductName列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ProductName + { + set + { + this.HtParameter["ProductName"] = value; + } + get + { + return this.HtParameter["ProductName"]; + } + } + + /// SupplierID列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object SupplierID + { + set + { + this.HtParameter["SupplierID"] = value; + } + get + { + return this.HtParameter["SupplierID"]; + } + } + + /// CategoryID列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object CategoryID + { + set + { + this.HtParameter["CategoryID"] = value; + } + get + { + return this.HtParameter["CategoryID"]; + } + } + + /// QuantityPerUnit列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object QuantityPerUnit + { + set + { + this.HtParameter["QuantityPerUnit"] = value; + } + get + { + return this.HtParameter["QuantityPerUnit"]; + } + } + + /// UnitPrice列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object UnitPrice + { + set + { + this.HtParameter["UnitPrice"] = value; + } + get + { + return this.HtParameter["UnitPrice"]; + } + } + + /// UnitsInStock列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object UnitsInStock + { + set + { + this.HtParameter["UnitsInStock"] = value; + } + get + { + return this.HtParameter["UnitsInStock"]; + } + } + + /// UnitsOnOrder列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object UnitsOnOrder + { + set + { + this.HtParameter["UnitsOnOrder"] = value; + } + get + { + return this.HtParameter["UnitsOnOrder"]; + } + } + + /// ReorderLevel列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ReorderLevel + { + set + { + this.HtParameter["ReorderLevel"] = value; + } + get + { + return this.HtParameter["ReorderLevel"]; + } + } + + /// Discontinued列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Discontinued + { + set + { + this.HtParameter["Discontinued"] = value; + } + get + { + return this.HtParameter["Discontinued"]; + } + } + + + /// Set_ProductID_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ProductID_forUPD + { + set + { + this.HtParameter["Set_ProductID_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ProductID_forUPD"]; + } + } + + + /// Set_ProductName_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ProductName_forUPD + { + set + { + this.HtParameter["Set_ProductName_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ProductName_forUPD"]; + } + } + + + /// Set_SupplierID_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_SupplierID_forUPD + { + set + { + this.HtParameter["Set_SupplierID_forUPD"] = value; + } + get + { + return this.HtParameter["Set_SupplierID_forUPD"]; + } + } + + + /// Set_CategoryID_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_CategoryID_forUPD + { + set + { + this.HtParameter["Set_CategoryID_forUPD"] = value; + } + get + { + return this.HtParameter["Set_CategoryID_forUPD"]; + } + } + + + /// Set_QuantityPerUnit_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_QuantityPerUnit_forUPD + { + set + { + this.HtParameter["Set_QuantityPerUnit_forUPD"] = value; + } + get + { + return this.HtParameter["Set_QuantityPerUnit_forUPD"]; + } + } + + + /// Set_UnitPrice_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_UnitPrice_forUPD + { + set + { + this.HtParameter["Set_UnitPrice_forUPD"] = value; + } + get + { + return this.HtParameter["Set_UnitPrice_forUPD"]; + } + } + + + /// Set_UnitsInStock_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_UnitsInStock_forUPD + { + set + { + this.HtParameter["Set_UnitsInStock_forUPD"] = value; + } + get + { + return this.HtParameter["Set_UnitsInStock_forUPD"]; + } + } + + + /// Set_UnitsOnOrder_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_UnitsOnOrder_forUPD + { + set + { + this.HtParameter["Set_UnitsOnOrder_forUPD"] = value; + } + get + { + return this.HtParameter["Set_UnitsOnOrder_forUPD"]; + } + } + + + /// Set_ReorderLevel_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ReorderLevel_forUPD + { + set + { + this.HtParameter["Set_ReorderLevel_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ReorderLevel_forUPD"]; + } + } + + + /// Set_Discontinued_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Discontinued_forUPD + { + set + { + this.HtParameter["Set_Discontinued_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Discontinued_forUPD"]; + } + } + + + + /// ProductID_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ProductID_Like + { + set + { + this.HtParameter["ProductID_Like"] = value; + } + get + { + return this.HtParameter["ProductID_Like"]; + } + } + + + /// ProductName_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ProductName_Like + { + set + { + this.HtParameter["ProductName_Like"] = value; + } + get + { + return this.HtParameter["ProductName_Like"]; + } + } + + + /// SupplierID_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object SupplierID_Like + { + set + { + this.HtParameter["SupplierID_Like"] = value; + } + get + { + return this.HtParameter["SupplierID_Like"]; + } + } + + + /// CategoryID_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object CategoryID_Like + { + set + { + this.HtParameter["CategoryID_Like"] = value; + } + get + { + return this.HtParameter["CategoryID_Like"]; + } + } + + + /// QuantityPerUnit_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object QuantityPerUnit_Like + { + set + { + this.HtParameter["QuantityPerUnit_Like"] = value; + } + get + { + return this.HtParameter["QuantityPerUnit_Like"]; + } + } + + + /// UnitPrice_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object UnitPrice_Like + { + set + { + this.HtParameter["UnitPrice_Like"] = value; + } + get + { + return this.HtParameter["UnitPrice_Like"]; + } + } + + + /// UnitsInStock_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object UnitsInStock_Like + { + set + { + this.HtParameter["UnitsInStock_Like"] = value; + } + get + { + return this.HtParameter["UnitsInStock_Like"]; + } + } + + + /// UnitsOnOrder_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object UnitsOnOrder_Like + { + set + { + this.HtParameter["UnitsOnOrder_Like"] = value; + } + get + { + return this.HtParameter["UnitsOnOrder_Like"]; + } + } + + + /// ReorderLevel_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ReorderLevel_Like + { + set + { + this.HtParameter["ReorderLevel_Like"] = value; + } + get + { + return this.HtParameter["ReorderLevel_Like"]; + } + } + + + /// Discontinued_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Discontinued_Like + { + set + { + this.HtParameter["Discontinued_Like"] = value; + } + get + { + return this.HtParameter["Discontinued_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("DaoProducts_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("DaoProducts_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("DaoProducts_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("DaoProducts_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("DaoProducts_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("DaoProducts_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("DaoProducts_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("DaoProducts_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("DaoProducts_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D1_Insert.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D1_Insert.xml new file mode 100644 index 000000000..38a9bcad0 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D1_Insert.xml @@ -0,0 +1,39 @@ + + + -- DaoProducts_D1_Insert + -- 2014/2/9 日立 太郎 + INSERT INTO + [Products] + ( + + [ProductID], + [ProductName], + [SupplierID], + [CategoryID], + [QuantityPerUnit], + [UnitPrice], + [UnitsInStock], + [UnitsOnOrder], + [ReorderLevel], + [Discontinued], + + ) + VALUES + ( + + @ProductID, + @ProductName, + @SupplierID, + @CategoryID, + @QuantityPerUnit, + @UnitPrice, + @UnitsInStock, + @UnitsOnOrder, + @ReorderLevel, + @Discontinued, + + ) + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D2_Select.xml new file mode 100644 index 000000000..0c7fbb6cf --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D2_Select.xml @@ -0,0 +1,41 @@ + + + -- DaoProducts_D2_Select + -- 2014/2/9 日立 太郎 + SELECT + [ProductID], + [ProductName], + [SupplierID], + [CategoryID], + [QuantityPerUnit], + [UnitPrice], + [UnitsInStock], + [UnitsOnOrder], + [ReorderLevel], + [Discontinued] + FROM + [Products] + + WHERE + AND [ProductID] = @ProductIDAND [ProductID] IS NULL + AND [ProductID] LIKE @ProductID_Like + AND [ProductName] = @ProductNameAND [ProductName] IS NULL + AND [ProductName] LIKE @ProductName_Like + AND [SupplierID] = @SupplierIDAND [SupplierID] IS NULL + AND [SupplierID] LIKE @SupplierID_Like + AND [CategoryID] = @CategoryIDAND [CategoryID] IS NULL + AND [CategoryID] LIKE @CategoryID_Like + AND [QuantityPerUnit] = @QuantityPerUnitAND [QuantityPerUnit] IS NULL + AND [QuantityPerUnit] LIKE @QuantityPerUnit_Like + AND [UnitPrice] = @UnitPriceAND [UnitPrice] IS NULL + AND [UnitPrice] LIKE @UnitPrice_Like + AND [UnitsInStock] = @UnitsInStockAND [UnitsInStock] IS NULL + AND [UnitsInStock] LIKE @UnitsInStock_Like + AND [UnitsOnOrder] = @UnitsOnOrderAND [UnitsOnOrder] IS NULL + AND [UnitsOnOrder] LIKE @UnitsOnOrder_Like + AND [ReorderLevel] = @ReorderLevelAND [ReorderLevel] IS NULL + AND [ReorderLevel] LIKE @ReorderLevel_Like + AND [Discontinued] = @DiscontinuedAND [Discontinued] IS NULL + AND [Discontinued] LIKE @Discontinued_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D3_Update.xml new file mode 100644 index 000000000..d942f4b6e --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D3_Update.xml @@ -0,0 +1,33 @@ + + + -- DaoProducts_D3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [Products] + SET + + [ProductID] = @Set_ProductID_forUPD, + [ProductName] = @Set_ProductName_forUPD, + [SupplierID] = @Set_SupplierID_forUPD, + [CategoryID] = @Set_CategoryID_forUPD, + [QuantityPerUnit] = @Set_QuantityPerUnit_forUPD, + [UnitPrice] = @Set_UnitPrice_forUPD, + [UnitsInStock] = @Set_UnitsInStock_forUPD, + [UnitsOnOrder] = @Set_UnitsOnOrder_forUPD, + [ReorderLevel] = @Set_ReorderLevel_forUPD, + [Discontinued] = @Set_Discontinued_forUPD, + + + WHERE + AND [ProductID] = @ProductIDAND [ProductID] IS NULL + AND [ProductName] = @ProductNameAND [ProductName] IS NULL + AND [SupplierID] = @SupplierIDAND [SupplierID] IS NULL + AND [CategoryID] = @CategoryIDAND [CategoryID] IS NULL + AND [QuantityPerUnit] = @QuantityPerUnitAND [QuantityPerUnit] IS NULL + AND [UnitPrice] = @UnitPriceAND [UnitPrice] IS NULL + AND [UnitsInStock] = @UnitsInStockAND [UnitsInStock] IS NULL + AND [UnitsOnOrder] = @UnitsOnOrderAND [UnitsOnOrder] IS NULL + AND [ReorderLevel] = @ReorderLevelAND [ReorderLevel] IS NULL + AND [Discontinued] = @DiscontinuedAND [Discontinued] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D4_Delete.xml new file mode 100644 index 000000000..116ade54c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D4_Delete.xml @@ -0,0 +1,20 @@ + + + -- DaoProducts_D4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [Products] + + WHERE + AND [ProductID] = @ProductIDAND [ProductID] IS NULL + AND [ProductName] = @ProductNameAND [ProductName] IS NULL + AND [SupplierID] = @SupplierIDAND [SupplierID] IS NULL + AND [CategoryID] = @CategoryIDAND [CategoryID] IS NULL + AND [QuantityPerUnit] = @QuantityPerUnitAND [QuantityPerUnit] IS NULL + AND [UnitPrice] = @UnitPriceAND [UnitPrice] IS NULL + AND [UnitsInStock] = @UnitsInStockAND [UnitsInStock] IS NULL + AND [UnitsOnOrder] = @UnitsOnOrderAND [UnitsOnOrder] IS NULL + AND [ReorderLevel] = @ReorderLevelAND [ReorderLevel] IS NULL + AND [Discontinued] = @DiscontinuedAND [Discontinued] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D5_SelCnt.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D5_SelCnt.xml new file mode 100644 index 000000000..d25f849fb --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_D5_SelCnt.xml @@ -0,0 +1,32 @@ + + + -- DaoProducts_D5_SelCnt + -- 2014/2/9 日立 太郎 + SELECT + COUNT(*) + FROM + [Products] + + WHERE + AND [ProductID] = @ProductIDAND [ProductID] IS NULL + AND [ProductID] LIKE @ProductID_Like + AND [ProductName] = @ProductNameAND [ProductName] IS NULL + AND [ProductName] LIKE @ProductName_Like + AND [SupplierID] = @SupplierIDAND [SupplierID] IS NULL + AND [SupplierID] LIKE @SupplierID_Like + AND [CategoryID] = @CategoryIDAND [CategoryID] IS NULL + AND [CategoryID] LIKE @CategoryID_Like + AND [QuantityPerUnit] = @QuantityPerUnitAND [QuantityPerUnit] IS NULL + AND [QuantityPerUnit] LIKE @QuantityPerUnit_Like + AND [UnitPrice] = @UnitPriceAND [UnitPrice] IS NULL + AND [UnitPrice] LIKE @UnitPrice_Like + AND [UnitsInStock] = @UnitsInStockAND [UnitsInStock] IS NULL + AND [UnitsInStock] LIKE @UnitsInStock_Like + AND [UnitsOnOrder] = @UnitsOnOrderAND [UnitsOnOrder] IS NULL + AND [UnitsOnOrder] LIKE @UnitsOnOrder_Like + AND [ReorderLevel] = @ReorderLevelAND [ReorderLevel] IS NULL + AND [ReorderLevel] LIKE @ReorderLevel_Like + AND [Discontinued] = @DiscontinuedAND [Discontinued] IS NULL + AND [Discontinued] LIKE @Discontinued_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S1_Insert.sql b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S1_Insert.sql new file mode 100644 index 000000000..4b4eb3dad --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S1_Insert.sql @@ -0,0 +1,27 @@ +-- DaoProducts_S1_Insert +-- 2014/2/9 日立 太郎 +INSERT INTO + [Products] + ( + [ProductName], + [SupplierID], + [CategoryID], + [QuantityPerUnit], + [UnitPrice], + [UnitsInStock], + [UnitsOnOrder], + [ReorderLevel], + [Discontinued] + ) +VALUES + ( + @ProductName, + @SupplierID, + @CategoryID, + @QuantityPerUnit, + @UnitPrice, + @UnitsInStock, + @UnitsOnOrder, + @ReorderLevel, + @Discontinued + ) diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S2_Select.xml new file mode 100644 index 000000000..9ea3f49ce --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S2_Select.xml @@ -0,0 +1,22 @@ + + + -- DaoProducts_S2_Select + -- 2014/2/9 日立 太郎 + SELECT + [ProductID], + [ProductName], + [SupplierID], + [CategoryID], + [QuantityPerUnit], + [UnitPrice], + [UnitsInStock], + [UnitsOnOrder], + [ReorderLevel], + [Discontinued] + FROM + [Products] + + WHERE + [ProductID] = @ProductID + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S3_Update.xml new file mode 100644 index 000000000..1892bb6c8 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S3_Update.xml @@ -0,0 +1,22 @@ + + + -- DaoProducts_S3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [Products] + SET + + [ProductID] = @Set_ProductID_forUPD, + [ProductName] = @Set_ProductName_forUPD, + [SupplierID] = @Set_SupplierID_forUPD, + [CategoryID] = @Set_CategoryID_forUPD, + [QuantityPerUnit] = @Set_QuantityPerUnit_forUPD, + [UnitPrice] = @Set_UnitPrice_forUPD, + [UnitsInStock] = @Set_UnitsInStock_forUPD, + [UnitsOnOrder] = @Set_UnitsOnOrder_forUPD, + [ReorderLevel] = @Set_ReorderLevel_forUPD, + [Discontinued] = @Set_Discontinued_forUPD, + + WHERE + [ProductID] = @ProductID + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S4_Delete.xml new file mode 100644 index 000000000..d48b8ae0b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoProducts_S4_Delete.xml @@ -0,0 +1,11 @@ + + + -- DaoProducts_S4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [Products] + + WHERE + [ProductID] = @ProductID + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers.cs new file mode 100644 index 000000000..8775d4036 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers.cs @@ -0,0 +1,802 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :DaoSuppliers +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class DaoSuppliers : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public DaoSuppliers(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// SupplierID列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_SupplierID + { + set + { + this.HtParameter["SupplierID"] = value; + } + get + { + return this.HtParameter["SupplierID"]; + } + } + + + + /// CompanyName列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object CompanyName + { + set + { + this.HtParameter["CompanyName"] = value; + } + get + { + return this.HtParameter["CompanyName"]; + } + } + + /// ContactName列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ContactName + { + set + { + this.HtParameter["ContactName"] = value; + } + get + { + return this.HtParameter["ContactName"]; + } + } + + /// ContactTitle列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ContactTitle + { + set + { + this.HtParameter["ContactTitle"] = value; + } + get + { + return this.HtParameter["ContactTitle"]; + } + } + + /// Address列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Address + { + set + { + this.HtParameter["Address"] = value; + } + get + { + return this.HtParameter["Address"]; + } + } + + /// City列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object City + { + set + { + this.HtParameter["City"] = value; + } + get + { + return this.HtParameter["City"]; + } + } + + /// Region列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Region + { + set + { + this.HtParameter["Region"] = value; + } + get + { + return this.HtParameter["Region"]; + } + } + + /// PostalCode列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PostalCode + { + set + { + this.HtParameter["PostalCode"] = value; + } + get + { + return this.HtParameter["PostalCode"]; + } + } + + /// Country列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Country + { + set + { + this.HtParameter["Country"] = value; + } + get + { + return this.HtParameter["Country"]; + } + } + + /// Phone列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Phone + { + set + { + this.HtParameter["Phone"] = value; + } + get + { + return this.HtParameter["Phone"]; + } + } + + /// Fax列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object Fax + { + set + { + this.HtParameter["Fax"] = value; + } + get + { + return this.HtParameter["Fax"]; + } + } + + /// HomePage列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object HomePage + { + set + { + this.HtParameter["HomePage"] = value; + } + get + { + return this.HtParameter["HomePage"]; + } + } + + + /// Set_SupplierID_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_SupplierID_forUPD + { + set + { + this.HtParameter["Set_SupplierID_forUPD"] = value; + } + get + { + return this.HtParameter["Set_SupplierID_forUPD"]; + } + } + + + /// Set_CompanyName_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_CompanyName_forUPD + { + set + { + this.HtParameter["Set_CompanyName_forUPD"] = value; + } + get + { + return this.HtParameter["Set_CompanyName_forUPD"]; + } + } + + + /// Set_ContactName_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ContactName_forUPD + { + set + { + this.HtParameter["Set_ContactName_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ContactName_forUPD"]; + } + } + + + /// Set_ContactTitle_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ContactTitle_forUPD + { + set + { + this.HtParameter["Set_ContactTitle_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ContactTitle_forUPD"]; + } + } + + + /// Set_Address_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Address_forUPD + { + set + { + this.HtParameter["Set_Address_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Address_forUPD"]; + } + } + + + /// Set_City_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_City_forUPD + { + set + { + this.HtParameter["Set_City_forUPD"] = value; + } + get + { + return this.HtParameter["Set_City_forUPD"]; + } + } + + + /// Set_Region_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Region_forUPD + { + set + { + this.HtParameter["Set_Region_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Region_forUPD"]; + } + } + + + /// Set_PostalCode_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_PostalCode_forUPD + { + set + { + this.HtParameter["Set_PostalCode_forUPD"] = value; + } + get + { + return this.HtParameter["Set_PostalCode_forUPD"]; + } + } + + + /// Set_Country_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Country_forUPD + { + set + { + this.HtParameter["Set_Country_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Country_forUPD"]; + } + } + + + /// Set_Phone_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Phone_forUPD + { + set + { + this.HtParameter["Set_Phone_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Phone_forUPD"]; + } + } + + + /// Set_Fax_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_Fax_forUPD + { + set + { + this.HtParameter["Set_Fax_forUPD"] = value; + } + get + { + return this.HtParameter["Set_Fax_forUPD"]; + } + } + + + /// Set_HomePage_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_HomePage_forUPD + { + set + { + this.HtParameter["Set_HomePage_forUPD"] = value; + } + get + { + return this.HtParameter["Set_HomePage_forUPD"]; + } + } + + + + /// SupplierID_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object SupplierID_Like + { + set + { + this.HtParameter["SupplierID_Like"] = value; + } + get + { + return this.HtParameter["SupplierID_Like"]; + } + } + + + /// CompanyName_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object CompanyName_Like + { + set + { + this.HtParameter["CompanyName_Like"] = value; + } + get + { + return this.HtParameter["CompanyName_Like"]; + } + } + + + /// ContactName_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ContactName_Like + { + set + { + this.HtParameter["ContactName_Like"] = value; + } + get + { + return this.HtParameter["ContactName_Like"]; + } + } + + + /// ContactTitle_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ContactTitle_Like + { + set + { + this.HtParameter["ContactTitle_Like"] = value; + } + get + { + return this.HtParameter["ContactTitle_Like"]; + } + } + + + /// Address_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Address_Like + { + set + { + this.HtParameter["Address_Like"] = value; + } + get + { + return this.HtParameter["Address_Like"]; + } + } + + + /// City_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object City_Like + { + set + { + this.HtParameter["City_Like"] = value; + } + get + { + return this.HtParameter["City_Like"]; + } + } + + + /// Region_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Region_Like + { + set + { + this.HtParameter["Region_Like"] = value; + } + get + { + return this.HtParameter["Region_Like"]; + } + } + + + /// PostalCode_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object PostalCode_Like + { + set + { + this.HtParameter["PostalCode_Like"] = value; + } + get + { + return this.HtParameter["PostalCode_Like"]; + } + } + + + /// Country_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Country_Like + { + set + { + this.HtParameter["Country_Like"] = value; + } + get + { + return this.HtParameter["Country_Like"]; + } + } + + + /// Phone_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Phone_Like + { + set + { + this.HtParameter["Phone_Like"] = value; + } + get + { + return this.HtParameter["Phone_Like"]; + } + } + + + /// Fax_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object Fax_Like + { + set + { + this.HtParameter["Fax_Like"] = value; + } + get + { + return this.HtParameter["Fax_Like"]; + } + } + + + /// HomePage_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object HomePage_Like + { + set + { + this.HtParameter["HomePage_Like"] = value; + } + get + { + return this.HtParameter["HomePage_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("DaoSuppliers_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("DaoSuppliers_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("DaoSuppliers_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("DaoSuppliers_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("DaoSuppliers_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("DaoSuppliers_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("DaoSuppliers_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("DaoSuppliers_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("DaoSuppliers_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D1_Insert.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D1_Insert.xml new file mode 100644 index 000000000..ad1b79ecc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D1_Insert.xml @@ -0,0 +1,43 @@ + + + -- DaoSuppliers_D1_Insert + -- 2014/2/9 日立 太郎 + INSERT INTO + [Suppliers] + ( + + [SupplierID], + [CompanyName], + [ContactName], + [ContactTitle], + [Address], + [City], + [Region], + [PostalCode], + [Country], + [Phone], + [Fax], + [HomePage], + + ) + VALUES + ( + + @SupplierID, + @CompanyName, + @ContactName, + @ContactTitle, + @Address, + @City, + @Region, + @PostalCode, + @Country, + @Phone, + @Fax, + @HomePage, + + ) + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D2_Select.xml new file mode 100644 index 000000000..0858fa65f --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D2_Select.xml @@ -0,0 +1,47 @@ + + + -- DaoSuppliers_D2_Select + -- 2014/2/9 日立 太郎 + SELECT + [SupplierID], + [CompanyName], + [ContactName], + [ContactTitle], + [Address], + [City], + [Region], + [PostalCode], + [Country], + [Phone], + [Fax], + [HomePage] + FROM + [Suppliers] + + WHERE + AND [SupplierID] = @SupplierIDAND [SupplierID] IS NULL + AND [SupplierID] LIKE @SupplierID_Like + AND [CompanyName] = @CompanyNameAND [CompanyName] IS NULL + AND [CompanyName] LIKE @CompanyName_Like + AND [ContactName] = @ContactNameAND [ContactName] IS NULL + AND [ContactName] LIKE @ContactName_Like + AND [ContactTitle] = @ContactTitleAND [ContactTitle] IS NULL + AND [ContactTitle] LIKE @ContactTitle_Like + AND [Address] = @AddressAND [Address] IS NULL + AND [Address] LIKE @Address_Like + AND [City] = @CityAND [City] IS NULL + AND [City] LIKE @City_Like + AND [Region] = @RegionAND [Region] IS NULL + AND [Region] LIKE @Region_Like + AND [PostalCode] = @PostalCodeAND [PostalCode] IS NULL + AND [PostalCode] LIKE @PostalCode_Like + AND [Country] = @CountryAND [Country] IS NULL + AND [Country] LIKE @Country_Like + AND [Phone] = @PhoneAND [Phone] IS NULL + AND [Phone] LIKE @Phone_Like + AND [Fax] = @FaxAND [Fax] IS NULL + AND [Fax] LIKE @Fax_Like + AND [HomePage] = @HomePageAND [HomePage] IS NULL + AND [HomePage] LIKE @HomePage_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D3_Update.xml new file mode 100644 index 000000000..dd08a95d0 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D3_Update.xml @@ -0,0 +1,37 @@ + + + -- DaoSuppliers_D3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [Suppliers] + SET + + [SupplierID] = @Set_SupplierID_forUPD, + [CompanyName] = @Set_CompanyName_forUPD, + [ContactName] = @Set_ContactName_forUPD, + [ContactTitle] = @Set_ContactTitle_forUPD, + [Address] = @Set_Address_forUPD, + [City] = @Set_City_forUPD, + [Region] = @Set_Region_forUPD, + [PostalCode] = @Set_PostalCode_forUPD, + [Country] = @Set_Country_forUPD, + [Phone] = @Set_Phone_forUPD, + [Fax] = @Set_Fax_forUPD, + [HomePage] = @Set_HomePage_forUPD, + + + WHERE + AND [SupplierID] = @SupplierIDAND [SupplierID] IS NULL + AND [CompanyName] = @CompanyNameAND [CompanyName] IS NULL + AND [ContactName] = @ContactNameAND [ContactName] IS NULL + AND [ContactTitle] = @ContactTitleAND [ContactTitle] IS NULL + AND [Address] = @AddressAND [Address] IS NULL + AND [City] = @CityAND [City] IS NULL + AND [Region] = @RegionAND [Region] IS NULL + AND [PostalCode] = @PostalCodeAND [PostalCode] IS NULL + AND [Country] = @CountryAND [Country] IS NULL + AND [Phone] = @PhoneAND [Phone] IS NULL + AND [Fax] = @FaxAND [Fax] IS NULL + AND [HomePage] = @HomePageAND [HomePage] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D4_Delete.xml new file mode 100644 index 000000000..22df9e99e --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D4_Delete.xml @@ -0,0 +1,22 @@ + + + -- DaoSuppliers_D4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [Suppliers] + + WHERE + AND [SupplierID] = @SupplierIDAND [SupplierID] IS NULL + AND [CompanyName] = @CompanyNameAND [CompanyName] IS NULL + AND [ContactName] = @ContactNameAND [ContactName] IS NULL + AND [ContactTitle] = @ContactTitleAND [ContactTitle] IS NULL + AND [Address] = @AddressAND [Address] IS NULL + AND [City] = @CityAND [City] IS NULL + AND [Region] = @RegionAND [Region] IS NULL + AND [PostalCode] = @PostalCodeAND [PostalCode] IS NULL + AND [Country] = @CountryAND [Country] IS NULL + AND [Phone] = @PhoneAND [Phone] IS NULL + AND [Fax] = @FaxAND [Fax] IS NULL + AND [HomePage] = @HomePageAND [HomePage] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D5_SelCnt.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D5_SelCnt.xml new file mode 100644 index 000000000..ff767cc32 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_D5_SelCnt.xml @@ -0,0 +1,36 @@ + + + -- DaoSuppliers_D5_SelCnt + -- 2014/2/9 日立 太郎 + SELECT + COUNT(*) + FROM + [Suppliers] + + WHERE + AND [SupplierID] = @SupplierIDAND [SupplierID] IS NULL + AND [SupplierID] LIKE @SupplierID_Like + AND [CompanyName] = @CompanyNameAND [CompanyName] IS NULL + AND [CompanyName] LIKE @CompanyName_Like + AND [ContactName] = @ContactNameAND [ContactName] IS NULL + AND [ContactName] LIKE @ContactName_Like + AND [ContactTitle] = @ContactTitleAND [ContactTitle] IS NULL + AND [ContactTitle] LIKE @ContactTitle_Like + AND [Address] = @AddressAND [Address] IS NULL + AND [Address] LIKE @Address_Like + AND [City] = @CityAND [City] IS NULL + AND [City] LIKE @City_Like + AND [Region] = @RegionAND [Region] IS NULL + AND [Region] LIKE @Region_Like + AND [PostalCode] = @PostalCodeAND [PostalCode] IS NULL + AND [PostalCode] LIKE @PostalCode_Like + AND [Country] = @CountryAND [Country] IS NULL + AND [Country] LIKE @Country_Like + AND [Phone] = @PhoneAND [Phone] IS NULL + AND [Phone] LIKE @Phone_Like + AND [Fax] = @FaxAND [Fax] IS NULL + AND [Fax] LIKE @Fax_Like + AND [HomePage] = @HomePageAND [HomePage] IS NULL + AND [HomePage] LIKE @HomePage_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S1_Insert.sql b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S1_Insert.sql new file mode 100644 index 000000000..d66b85544 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S1_Insert.sql @@ -0,0 +1,31 @@ +-- DaoSuppliers_S1_Insert +-- 2014/2/9 日立 太郎 +INSERT INTO + [Suppliers] + ( + [CompanyName], + [ContactName], + [ContactTitle], + [Address], + [City], + [Region], + [PostalCode], + [Country], + [Phone], + [Fax], + [HomePage] + ) +VALUES + ( + @CompanyName, + @ContactName, + @ContactTitle, + @Address, + @City, + @Region, + @PostalCode, + @Country, + @Phone, + @Fax, + @HomePage + ) diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S2_Select.xml new file mode 100644 index 000000000..c66adabcc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S2_Select.xml @@ -0,0 +1,24 @@ + + + -- DaoSuppliers_S2_Select + -- 2014/2/9 日立 太郎 + SELECT + [SupplierID], + [CompanyName], + [ContactName], + [ContactTitle], + [Address], + [City], + [Region], + [PostalCode], + [Country], + [Phone], + [Fax], + [HomePage] + FROM + [Suppliers] + + WHERE + [SupplierID] = @SupplierID + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S3_Update.xml new file mode 100644 index 000000000..8564ee366 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S3_Update.xml @@ -0,0 +1,24 @@ + + + -- DaoSuppliers_S3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [Suppliers] + SET + + [SupplierID] = @Set_SupplierID_forUPD, + [CompanyName] = @Set_CompanyName_forUPD, + [ContactName] = @Set_ContactName_forUPD, + [ContactTitle] = @Set_ContactTitle_forUPD, + [Address] = @Set_Address_forUPD, + [City] = @Set_City_forUPD, + [Region] = @Set_Region_forUPD, + [PostalCode] = @Set_PostalCode_forUPD, + [Country] = @Set_Country_forUPD, + [Phone] = @Set_Phone_forUPD, + [Fax] = @Set_Fax_forUPD, + [HomePage] = @Set_HomePage_forUPD, + + WHERE + [SupplierID] = @SupplierID + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S4_Delete.xml new file mode 100644 index 000000000..e99148887 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Dao/DaoSuppliers_S4_Delete.xml @@ -0,0 +1,11 @@ + + + -- DaoSuppliers_S4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [Suppliers] + + WHERE + [SupplierID] = @SupplierID + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Diagram.bmp b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Diagram.bmp new file mode 100644 index 0000000000000000000000000000000000000000..840ebb973fc944641198d50e95d66a0390fd995e GIT binary patch literal 377414 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 + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.btnBatUpd = new System.Windows.Forms.Button(); + this.btnClear3 = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.btnSelectAll3 = new System.Windows.Forms.Button(); + this.dataGridView3 = new System.Windows.Forms.DataGridView(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.txtPicture_where = new System.Windows.Forms.TextBox(); + this.txtDescription_where = new System.Windows.Forms.TextBox(); + this.txtCategoryName_where = new System.Windows.Forms.TextBox(); + this.txtCategoryID_where = new System.Windows.Forms.TextBox(); + this.txtPicture = new System.Windows.Forms.TextBox(); + this.txtCategoryName = new System.Windows.Forms.TextBox(); + this.txtDescription = new System.Windows.Forms.TextBox(); + this.txtCategoryID = new System.Windows.Forms.TextBox(); + this.lblPicture_where = new System.Windows.Forms.Label(); + this.lblDescription_where = new System.Windows.Forms.Label(); + this.lblCategoryName_where = new System.Windows.Forms.Label(); + this.lblCategoryID_where = new System.Windows.Forms.Label(); + this.lblPicture = new System.Windows.Forms.Label(); + this.lblDescription = new System.Windows.Forms.Label(); + this.lblCategoryName = new System.Windows.Forms.Label(); + this.lblCategoryID = new System.Windows.Forms.Label(); + this.btnDelete2 = new System.Windows.Forms.Button(); + this.btnUpdate2 = new System.Windows.Forms.Button(); + this.btnInsert2 = new System.Windows.Forms.Button(); + this.btnSelect2 = new System.Windows.Forms.Button(); + this.btnClear2 = new System.Windows.Forms.Button(); + this.btnSelectAll2 = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.dataGridView2 = new System.Windows.Forms.DataGridView(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.lblHomePage = new System.Windows.Forms.Label(); + this.txtHomePage = new System.Windows.Forms.TextBox(); + this.txtFax = new System.Windows.Forms.TextBox(); + this.txtPhone = new System.Windows.Forms.TextBox(); + this.txtCountry = new System.Windows.Forms.TextBox(); + this.txtPostalCode = new System.Windows.Forms.TextBox(); + this.txtRegion = new System.Windows.Forms.TextBox(); + this.txtCity = new System.Windows.Forms.TextBox(); + this.txtAddress = new System.Windows.Forms.TextBox(); + this.txtContactTitle = new System.Windows.Forms.TextBox(); + this.txtCompanyName = new System.Windows.Forms.TextBox(); + this.txtContactName = new System.Windows.Forms.TextBox(); + this.txtSupplierID = new System.Windows.Forms.TextBox(); + this.lblFax = new System.Windows.Forms.Label(); + this.lblPhone = new System.Windows.Forms.Label(); + this.lblCountry = new System.Windows.Forms.Label(); + this.lblPostalCode = new System.Windows.Forms.Label(); + this.lblRegion = new System.Windows.Forms.Label(); + this.lblCity = new System.Windows.Forms.Label(); + this.lblAddress = new System.Windows.Forms.Label(); + this.lblContactTitle = new System.Windows.Forms.Label(); + this.lblContactName = new System.Windows.Forms.Label(); + this.lblCompanyName = new System.Windows.Forms.Label(); + this.lblSupplierID = new System.Windows.Forms.Label(); + this.btnDelete1 = new System.Windows.Forms.Button(); + this.btnUpdate1 = new System.Windows.Forms.Button(); + this.btnInsert1 = new System.Windows.Forms.Button(); + this.btnSelect1 = new System.Windows.Forms.Button(); + this.btnClear1 = new System.Windows.Forms.Button(); + this.btnSelectAll1 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.tabPage3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView3)).BeginInit(); + this.tabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).BeginInit(); + this.tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.tabControl1.SuspendLayout(); + this.tabPage4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.btnBatUpd); + this.tabPage3.Controls.Add(this.btnClear3); + this.tabPage3.Controls.Add(this.label5); + this.tabPage3.Controls.Add(this.btnSelectAll3); + this.tabPage3.Controls.Add(this.dataGridView3); + this.tabPage3.Location = new System.Drawing.Point(4, 21); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(693, 558); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "バッチ更新"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // btnBatUpd + // + this.btnBatUpd.Location = new System.Drawing.Point(12, 501); + this.btnBatUpd.Name = "btnBatUpd"; + this.btnBatUpd.Size = new System.Drawing.Size(666, 23); + this.btnBatUpd.TabIndex = 38; + this.btnBatUpd.Text = "バッチ更新"; + this.btnBatUpd.UseVisualStyleBackColor = true; + this.btnBatUpd.Click += new System.EventHandler(this.btnBatUpd_Click); + // + // btnClear3 + // + this.btnClear3.Location = new System.Drawing.Point(12, 530); + this.btnClear3.Name = "btnClear3"; + this.btnClear3.Size = new System.Drawing.Size(666, 23); + this.btnClear3.TabIndex = 37; + this.btnClear3.Text = "クリア"; + this.btnClear3.UseVisualStyleBackColor = true; + this.btnClear3.Click += new System.EventHandler(this.btnClear3_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(10, 19); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(88, 12); + this.label5.TabIndex = 36; + this.label5.Text = "Productsテーブル"; + // + // btnSelectAll3 + // + this.btnSelectAll3.Location = new System.Drawing.Point(12, 472); + this.btnSelectAll3.Name = "btnSelectAll3"; + this.btnSelectAll3.Size = new System.Drawing.Size(666, 23); + this.btnSelectAll3.TabIndex = 1; + this.btnSelectAll3.Text = "全件取得"; + this.btnSelectAll3.UseVisualStyleBackColor = true; + this.btnSelectAll3.Click += new System.EventHandler(this.btnSelectAll3_Click); + // + // dataGridView3 + // + this.dataGridView3.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView3.Location = new System.Drawing.Point(12, 34); + this.dataGridView3.Name = "dataGridView3"; + this.dataGridView3.RowTemplate.Height = 21; + this.dataGridView3.Size = new System.Drawing.Size(666, 432); + this.dataGridView3.TabIndex = 0; + this.dataGridView3.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.dataGridView3_DataError); + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.label4); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Controls.Add(this.txtPicture_where); + this.tabPage2.Controls.Add(this.txtDescription_where); + this.tabPage2.Controls.Add(this.txtCategoryName_where); + this.tabPage2.Controls.Add(this.txtCategoryID_where); + this.tabPage2.Controls.Add(this.txtPicture); + this.tabPage2.Controls.Add(this.txtCategoryName); + this.tabPage2.Controls.Add(this.txtDescription); + this.tabPage2.Controls.Add(this.txtCategoryID); + this.tabPage2.Controls.Add(this.lblPicture_where); + this.tabPage2.Controls.Add(this.lblDescription_where); + this.tabPage2.Controls.Add(this.lblCategoryName_where); + this.tabPage2.Controls.Add(this.lblCategoryID_where); + this.tabPage2.Controls.Add(this.lblPicture); + this.tabPage2.Controls.Add(this.lblDescription); + this.tabPage2.Controls.Add(this.lblCategoryName); + this.tabPage2.Controls.Add(this.lblCategoryID); + this.tabPage2.Controls.Add(this.btnDelete2); + this.tabPage2.Controls.Add(this.btnUpdate2); + this.tabPage2.Controls.Add(this.btnInsert2); + this.tabPage2.Controls.Add(this.btnSelect2); + this.tabPage2.Controls.Add(this.btnClear2); + this.tabPage2.Controls.Add(this.btnSelectAll2); + this.tabPage2.Controls.Add(this.label2); + this.tabPage2.Controls.Add(this.dataGridView2); + this.tabPage2.Location = new System.Drawing.Point(4, 21); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(693, 558); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "動的SQLのCRUD"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(144, 192); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(53, 12); + this.label4.TabIndex = 65; + this.label4.Text = "検索条件"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(144, 42); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(29, 12); + this.label3.TabIndex = 64; + this.label3.Text = "実値"; + // + // txtPicture_where + // + this.txtPicture_where.Enabled = false; + this.txtPicture_where.Location = new System.Drawing.Point(146, 282); + this.txtPicture_where.Name = "txtPicture_where"; + this.txtPicture_where.Size = new System.Drawing.Size(122, 19); + this.txtPicture_where.TabIndex = 62; + // + // txtDescription_where + // + this.txtDescription_where.Enabled = false; + this.txtDescription_where.Location = new System.Drawing.Point(146, 257); + this.txtDescription_where.Name = "txtDescription_where"; + this.txtDescription_where.Size = new System.Drawing.Size(122, 19); + this.txtDescription_where.TabIndex = 60; + // + // txtCategoryName_where + // + this.txtCategoryName_where.Location = new System.Drawing.Point(146, 232); + this.txtCategoryName_where.Name = "txtCategoryName_where"; + this.txtCategoryName_where.Size = new System.Drawing.Size(122, 19); + this.txtCategoryName_where.TabIndex = 58; + // + // txtCategoryID_where + // + this.txtCategoryID_where.Location = new System.Drawing.Point(146, 207); + this.txtCategoryID_where.Name = "txtCategoryID_where"; + this.txtCategoryID_where.Size = new System.Drawing.Size(122, 19); + this.txtCategoryID_where.TabIndex = 56; + // + // txtPicture + // + this.txtPicture.Enabled = false; + this.txtPicture.Location = new System.Drawing.Point(146, 132); + this.txtPicture.Name = "txtPicture"; + this.txtPicture.Size = new System.Drawing.Size(122, 19); + this.txtPicture.TabIndex = 48; + // + // txtCategoryName + // + this.txtCategoryName.Location = new System.Drawing.Point(146, 82); + this.txtCategoryName.Name = "txtCategoryName"; + this.txtCategoryName.Size = new System.Drawing.Size(122, 19); + this.txtCategoryName.TabIndex = 46; + // + // txtDescription + // + this.txtDescription.Location = new System.Drawing.Point(146, 107); + this.txtDescription.Name = "txtDescription"; + this.txtDescription.Size = new System.Drawing.Size(122, 19); + this.txtDescription.TabIndex = 43; + // + // txtCategoryID + // + this.txtCategoryID.Enabled = false; + this.txtCategoryID.Location = new System.Drawing.Point(146, 57); + this.txtCategoryID.Name = "txtCategoryID"; + this.txtCategoryID.Size = new System.Drawing.Size(122, 19); + this.txtCategoryID.TabIndex = 42; + // + // lblPicture_where + // + this.lblPicture_where.AutoSize = true; + this.lblPicture_where.Location = new System.Drawing.Point(65, 285); + this.lblPicture_where.Name = "lblPicture_where"; + this.lblPicture_where.Size = new System.Drawing.Size(75, 12); + this.lblPicture_where.TabIndex = 63; + this.lblPicture_where.Text = "Picture_where"; + // + // lblDescription_where + // + this.lblDescription_where.AutoSize = true; + this.lblDescription_where.Location = new System.Drawing.Point(43, 260); + this.lblDescription_where.Name = "lblDescription_where"; + this.lblDescription_where.Size = new System.Drawing.Size(97, 12); + this.lblDescription_where.TabIndex = 61; + this.lblDescription_where.Text = "Description_where"; + // + // lblCategoryName_where + // + this.lblCategoryName_where.AutoSize = true; + this.lblCategoryName_where.Location = new System.Drawing.Point(26, 235); + this.lblCategoryName_where.Name = "lblCategoryName_where"; + this.lblCategoryName_where.Size = new System.Drawing.Size(114, 12); + this.lblCategoryName_where.TabIndex = 59; + this.lblCategoryName_where.Text = "CategoryName_where"; + // + // lblCategoryID_where + // + this.lblCategoryID_where.AutoSize = true; + this.lblCategoryID_where.Location = new System.Drawing.Point(44, 210); + this.lblCategoryID_where.Name = "lblCategoryID_where"; + this.lblCategoryID_where.Size = new System.Drawing.Size(96, 12); + this.lblCategoryID_where.TabIndex = 57; + this.lblCategoryID_where.Text = "CategoryID_where"; + // + // lblPicture + // + this.lblPicture.AutoSize = true; + this.lblPicture.Location = new System.Drawing.Point(99, 135); + this.lblPicture.Name = "lblPicture"; + this.lblPicture.Size = new System.Drawing.Size(41, 12); + this.lblPicture.TabIndex = 49; + this.lblPicture.Text = "Picture"; + // + // lblDescription + // + this.lblDescription.AutoSize = true; + this.lblDescription.Location = new System.Drawing.Point(77, 110); + this.lblDescription.Name = "lblDescription"; + this.lblDescription.Size = new System.Drawing.Size(63, 12); + this.lblDescription.TabIndex = 47; + this.lblDescription.Text = "Description"; + // + // lblCategoryName + // + this.lblCategoryName.AutoSize = true; + this.lblCategoryName.Location = new System.Drawing.Point(60, 85); + this.lblCategoryName.Name = "lblCategoryName"; + this.lblCategoryName.Size = new System.Drawing.Size(80, 12); + this.lblCategoryName.TabIndex = 45; + this.lblCategoryName.Text = "CategoryName"; + // + // lblCategoryID + // + this.lblCategoryID.AutoSize = true; + this.lblCategoryID.Location = new System.Drawing.Point(78, 60); + this.lblCategoryID.Name = "lblCategoryID"; + this.lblCategoryID.Size = new System.Drawing.Size(62, 12); + this.lblCategoryID.TabIndex = 44; + this.lblCategoryID.Text = "CategoryID"; + // + // btnDelete2 + // + this.btnDelete2.Location = new System.Drawing.Point(6, 530); + this.btnDelete2.Name = "btnDelete2"; + this.btnDelete2.Size = new System.Drawing.Size(262, 23); + this.btnDelete2.TabIndex = 41; + this.btnDelete2.Text = "デリート"; + this.btnDelete2.UseVisualStyleBackColor = true; + this.btnDelete2.Click += new System.EventHandler(this.btnDelete2_Click); + // + // btnUpdate2 + // + this.btnUpdate2.Location = new System.Drawing.Point(6, 501); + this.btnUpdate2.Name = "btnUpdate2"; + this.btnUpdate2.Size = new System.Drawing.Size(262, 23); + this.btnUpdate2.TabIndex = 40; + this.btnUpdate2.Text = "アップデート"; + this.btnUpdate2.UseVisualStyleBackColor = true; + this.btnUpdate2.Click += new System.EventHandler(this.btnUpdate2_Click); + // + // btnInsert2 + // + this.btnInsert2.Location = new System.Drawing.Point(6, 443); + this.btnInsert2.Name = "btnInsert2"; + this.btnInsert2.Size = new System.Drawing.Size(262, 23); + this.btnInsert2.TabIndex = 39; + this.btnInsert2.Text = "インサート"; + this.btnInsert2.UseVisualStyleBackColor = true; + this.btnInsert2.Click += new System.EventHandler(this.btnInsert2_Click); + // + // btnSelect2 + // + this.btnSelect2.Location = new System.Drawing.Point(6, 472); + this.btnSelect2.Name = "btnSelect2"; + this.btnSelect2.Size = new System.Drawing.Size(262, 23); + this.btnSelect2.TabIndex = 38; + this.btnSelect2.Text = "セレクト"; + this.btnSelect2.UseVisualStyleBackColor = true; + this.btnSelect2.Click += new System.EventHandler(this.btnSelect2_Click); + // + // btnClear2 + // + this.btnClear2.Location = new System.Drawing.Point(274, 530); + this.btnClear2.Name = "btnClear2"; + this.btnClear2.Size = new System.Drawing.Size(413, 23); + this.btnClear2.TabIndex = 37; + this.btnClear2.Text = "クリア"; + this.btnClear2.UseVisualStyleBackColor = true; + this.btnClear2.Click += new System.EventHandler(this.btnClear2_Click); + // + // btnSelectAll2 + // + this.btnSelectAll2.Location = new System.Drawing.Point(274, 501); + this.btnSelectAll2.Name = "btnSelectAll2"; + this.btnSelectAll2.Size = new System.Drawing.Size(413, 23); + this.btnSelectAll2.TabIndex = 36; + this.btnSelectAll2.Text = "全件取得"; + this.btnSelectAll2.UseVisualStyleBackColor = true; + this.btnSelectAll2.Click += new System.EventHandler(this.btnSelectAll2_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(272, 19); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(89, 12); + this.label2.TabIndex = 35; + this.label2.Text = "Categoryテーブル"; + // + // dataGridView2 + // + this.dataGridView2.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView2.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.dataGridView2.Location = new System.Drawing.Point(274, 34); + this.dataGridView2.Name = "dataGridView2"; + this.dataGridView2.RowTemplate.Height = 21; + this.dataGridView2.Size = new System.Drawing.Size(413, 461); + this.dataGridView2.TabIndex = 34; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.lblHomePage); + this.tabPage1.Controls.Add(this.txtHomePage); + this.tabPage1.Controls.Add(this.txtFax); + this.tabPage1.Controls.Add(this.txtPhone); + this.tabPage1.Controls.Add(this.txtCountry); + this.tabPage1.Controls.Add(this.txtPostalCode); + this.tabPage1.Controls.Add(this.txtRegion); + this.tabPage1.Controls.Add(this.txtCity); + this.tabPage1.Controls.Add(this.txtAddress); + this.tabPage1.Controls.Add(this.txtContactTitle); + this.tabPage1.Controls.Add(this.txtCompanyName); + this.tabPage1.Controls.Add(this.txtContactName); + this.tabPage1.Controls.Add(this.txtSupplierID); + this.tabPage1.Controls.Add(this.lblFax); + this.tabPage1.Controls.Add(this.lblPhone); + this.tabPage1.Controls.Add(this.lblCountry); + this.tabPage1.Controls.Add(this.lblPostalCode); + this.tabPage1.Controls.Add(this.lblRegion); + this.tabPage1.Controls.Add(this.lblCity); + this.tabPage1.Controls.Add(this.lblAddress); + this.tabPage1.Controls.Add(this.lblContactTitle); + this.tabPage1.Controls.Add(this.lblContactName); + this.tabPage1.Controls.Add(this.lblCompanyName); + this.tabPage1.Controls.Add(this.lblSupplierID); + this.tabPage1.Controls.Add(this.btnDelete1); + this.tabPage1.Controls.Add(this.btnUpdate1); + this.tabPage1.Controls.Add(this.btnInsert1); + this.tabPage1.Controls.Add(this.btnSelect1); + this.tabPage1.Controls.Add(this.btnClear1); + this.tabPage1.Controls.Add(this.btnSelectAll1); + this.tabPage1.Controls.Add(this.label1); + this.tabPage1.Controls.Add(this.dataGridView1); + this.tabPage1.Location = new System.Drawing.Point(4, 21); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(693, 558); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "静的SQLのCRUD"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // lblHomePage + // + this.lblHomePage.AutoSize = true; + this.lblHomePage.Location = new System.Drawing.Point(36, 310); + this.lblHomePage.Name = "lblHomePage"; + this.lblHomePage.Size = new System.Drawing.Size(59, 12); + this.lblHomePage.TabIndex = 33; + this.lblHomePage.Text = "HomePage"; + // + // txtHomePage + // + this.txtHomePage.Location = new System.Drawing.Point(101, 307); + this.txtHomePage.Name = "txtHomePage"; + this.txtHomePage.Size = new System.Drawing.Size(122, 19); + this.txtHomePage.TabIndex = 32; + // + // txtFax + // + this.txtFax.Location = new System.Drawing.Point(101, 282); + this.txtFax.Name = "txtFax"; + this.txtFax.Size = new System.Drawing.Size(122, 19); + this.txtFax.TabIndex = 30; + // + // txtPhone + // + this.txtPhone.Location = new System.Drawing.Point(101, 257); + this.txtPhone.Name = "txtPhone"; + this.txtPhone.Size = new System.Drawing.Size(122, 19); + this.txtPhone.TabIndex = 28; + // + // txtCountry + // + this.txtCountry.Location = new System.Drawing.Point(101, 232); + this.txtCountry.Name = "txtCountry"; + this.txtCountry.Size = new System.Drawing.Size(122, 19); + this.txtCountry.TabIndex = 26; + // + // txtPostalCode + // + this.txtPostalCode.Location = new System.Drawing.Point(101, 207); + this.txtPostalCode.Name = "txtPostalCode"; + this.txtPostalCode.Size = new System.Drawing.Size(122, 19); + this.txtPostalCode.TabIndex = 24; + // + // txtRegion + // + this.txtRegion.Location = new System.Drawing.Point(101, 182); + this.txtRegion.Name = "txtRegion"; + this.txtRegion.Size = new System.Drawing.Size(122, 19); + this.txtRegion.TabIndex = 22; + // + // txtCity + // + this.txtCity.Location = new System.Drawing.Point(101, 157); + this.txtCity.Name = "txtCity"; + this.txtCity.Size = new System.Drawing.Size(122, 19); + this.txtCity.TabIndex = 20; + // + // txtAddress + // + this.txtAddress.Location = new System.Drawing.Point(101, 132); + this.txtAddress.Name = "txtAddress"; + this.txtAddress.Size = new System.Drawing.Size(122, 19); + this.txtAddress.TabIndex = 18; + // + // txtContactTitle + // + this.txtContactTitle.Location = new System.Drawing.Point(101, 107); + this.txtContactTitle.Name = "txtContactTitle"; + this.txtContactTitle.Size = new System.Drawing.Size(122, 19); + this.txtContactTitle.TabIndex = 16; + // + // txtCompanyName + // + this.txtCompanyName.Location = new System.Drawing.Point(101, 57); + this.txtCompanyName.Name = "txtCompanyName"; + this.txtCompanyName.Size = new System.Drawing.Size(122, 19); + this.txtCompanyName.TabIndex = 14; + // + // txtContactName + // + this.txtContactName.Location = new System.Drawing.Point(101, 82); + this.txtContactName.Name = "txtContactName"; + this.txtContactName.Size = new System.Drawing.Size(122, 19); + this.txtContactName.TabIndex = 9; + // + // txtSupplierID + // + this.txtSupplierID.Location = new System.Drawing.Point(101, 32); + this.txtSupplierID.Name = "txtSupplierID"; + this.txtSupplierID.Size = new System.Drawing.Size(122, 19); + this.txtSupplierID.TabIndex = 8; + // + // lblFax + // + this.lblFax.AutoSize = true; + this.lblFax.Location = new System.Drawing.Point(71, 285); + this.lblFax.Name = "lblFax"; + this.lblFax.Size = new System.Drawing.Size(24, 12); + this.lblFax.TabIndex = 31; + this.lblFax.Text = "Fax"; + // + // lblPhone + // + this.lblPhone.AutoSize = true; + this.lblPhone.Location = new System.Drawing.Point(59, 260); + this.lblPhone.Name = "lblPhone"; + this.lblPhone.Size = new System.Drawing.Size(36, 12); + this.lblPhone.TabIndex = 29; + this.lblPhone.Text = "Phone"; + // + // lblCountry + // + this.lblCountry.AutoSize = true; + this.lblCountry.Location = new System.Drawing.Point(50, 235); + this.lblCountry.Name = "lblCountry"; + this.lblCountry.Size = new System.Drawing.Size(45, 12); + this.lblCountry.TabIndex = 27; + this.lblCountry.Text = "Country"; + // + // lblPostalCode + // + this.lblPostalCode.AutoSize = true; + this.lblPostalCode.Location = new System.Drawing.Point(32, 210); + this.lblPostalCode.Name = "lblPostalCode"; + this.lblPostalCode.Size = new System.Drawing.Size(63, 12); + this.lblPostalCode.TabIndex = 25; + this.lblPostalCode.Text = "PostalCode"; + // + // lblRegion + // + this.lblRegion.AutoSize = true; + this.lblRegion.Location = new System.Drawing.Point(55, 185); + this.lblRegion.Name = "lblRegion"; + this.lblRegion.Size = new System.Drawing.Size(40, 12); + this.lblRegion.TabIndex = 23; + this.lblRegion.Text = "Region"; + // + // lblCity + // + this.lblCity.AutoSize = true; + this.lblCity.Location = new System.Drawing.Point(69, 160); + this.lblCity.Name = "lblCity"; + this.lblCity.Size = new System.Drawing.Size(26, 12); + this.lblCity.TabIndex = 21; + this.lblCity.Text = "City"; + // + // lblAddress + // + this.lblAddress.AutoSize = true; + this.lblAddress.Location = new System.Drawing.Point(48, 135); + this.lblAddress.Name = "lblAddress"; + this.lblAddress.Size = new System.Drawing.Size(47, 12); + this.lblAddress.TabIndex = 19; + this.lblAddress.Text = "Address"; + // + // lblContactTitle + // + this.lblContactTitle.AutoSize = true; + this.lblContactTitle.Location = new System.Drawing.Point(27, 110); + this.lblContactTitle.Name = "lblContactTitle"; + this.lblContactTitle.Size = new System.Drawing.Size(68, 12); + this.lblContactTitle.TabIndex = 17; + this.lblContactTitle.Text = "ContactTitle"; + // + // lblContactName + // + this.lblContactName.AutoSize = true; + this.lblContactName.Location = new System.Drawing.Point(21, 85); + this.lblContactName.Name = "lblContactName"; + this.lblContactName.Size = new System.Drawing.Size(74, 12); + this.lblContactName.TabIndex = 15; + this.lblContactName.Text = "ContactName"; + // + // lblCompanyName + // + this.lblCompanyName.AutoSize = true; + this.lblCompanyName.Location = new System.Drawing.Point(14, 60); + this.lblCompanyName.Name = "lblCompanyName"; + this.lblCompanyName.Size = new System.Drawing.Size(81, 12); + this.lblCompanyName.TabIndex = 13; + this.lblCompanyName.Text = "CompanyName"; + // + // lblSupplierID + // + this.lblSupplierID.AutoSize = true; + this.lblSupplierID.Location = new System.Drawing.Point(38, 35); + this.lblSupplierID.Name = "lblSupplierID"; + this.lblSupplierID.Size = new System.Drawing.Size(57, 12); + this.lblSupplierID.TabIndex = 12; + this.lblSupplierID.Text = "SupplierID"; + // + // btnDelete1 + // + this.btnDelete1.Location = new System.Drawing.Point(6, 530); + this.btnDelete1.Name = "btnDelete1"; + this.btnDelete1.Size = new System.Drawing.Size(217, 23); + this.btnDelete1.TabIndex = 7; + this.btnDelete1.Text = "デリート"; + this.btnDelete1.UseVisualStyleBackColor = true; + this.btnDelete1.Click += new System.EventHandler(this.btnDelete1_Click); + // + // btnUpdate1 + // + this.btnUpdate1.Location = new System.Drawing.Point(6, 501); + this.btnUpdate1.Name = "btnUpdate1"; + this.btnUpdate1.Size = new System.Drawing.Size(217, 23); + this.btnUpdate1.TabIndex = 6; + this.btnUpdate1.Text = "アップデート"; + this.btnUpdate1.UseVisualStyleBackColor = true; + this.btnUpdate1.Click += new System.EventHandler(this.btnUpdate1_Click); + // + // btnInsert1 + // + this.btnInsert1.Location = new System.Drawing.Point(6, 443); + this.btnInsert1.Name = "btnInsert1"; + this.btnInsert1.Size = new System.Drawing.Size(217, 23); + this.btnInsert1.TabIndex = 5; + this.btnInsert1.Text = "インサート"; + this.btnInsert1.UseVisualStyleBackColor = true; + this.btnInsert1.Click += new System.EventHandler(this.btnInsert1_Click); + // + // btnSelect1 + // + this.btnSelect1.Location = new System.Drawing.Point(6, 472); + this.btnSelect1.Name = "btnSelect1"; + this.btnSelect1.Size = new System.Drawing.Size(217, 23); + this.btnSelect1.TabIndex = 4; + this.btnSelect1.Text = "セレクト"; + this.btnSelect1.UseVisualStyleBackColor = true; + this.btnSelect1.Click += new System.EventHandler(this.btnSelect1_Click); + // + // btnClear1 + // + this.btnClear1.Location = new System.Drawing.Point(229, 530); + this.btnClear1.Name = "btnClear1"; + this.btnClear1.Size = new System.Drawing.Size(458, 23); + this.btnClear1.TabIndex = 3; + this.btnClear1.Text = "クリア"; + this.btnClear1.UseVisualStyleBackColor = true; + this.btnClear1.Click += new System.EventHandler(this.btnClear1_Click); + // + // btnSelectAll1 + // + this.btnSelectAll1.Location = new System.Drawing.Point(229, 501); + this.btnSelectAll1.Name = "btnSelectAll1"; + this.btnSelectAll1.Size = new System.Drawing.Size(458, 23); + this.btnSelectAll1.TabIndex = 2; + this.btnSelectAll1.Text = "全件取得"; + this.btnSelectAll1.UseVisualStyleBackColor = true; + this.btnSelectAll1.Click += new System.EventHandler(this.btnSelectAll1_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(229, 19); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(90, 12); + this.label1.TabIndex = 1; + this.label1.Text = "Suppliersテーブル"; + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.dataGridView1.Location = new System.Drawing.Point(229, 34); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.RowTemplate.Height = 21; + this.dataGridView1.Size = new System.Drawing.Size(458, 461); + this.dataGridView1.TabIndex = 0; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Controls.Add(this.tabPage4); + this.tabControl1.Location = new System.Drawing.Point(12, 12); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(701, 583); + this.tabControl1.TabIndex = 0; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.pictureBox1); + this.tabPage4.Location = new System.Drawing.Point(4, 21); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(693, 558); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = "ダイアグラム"; + this.tabPage4.UseVisualStyleBackColor = true; + // + // pictureBox1 + // + this.pictureBox1.Image = global::GenDaoAndBatUpd_sample.Properties.Resources.Diagram; + this.pictureBox1.InitialImage = global::GenDaoAndBatUpd_sample.Properties.Resources.Diagram; + this.pictureBox1.Location = new System.Drawing.Point(3, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(708, 552); + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(725, 600); + this.Controls.Add(this.tabControl1); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView3)).EndInit(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).EndInit(); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.tabControl1.ResumeLayout(false); + this.tabPage4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TextBox txtPicture_where; + private System.Windows.Forms.TextBox txtDescription_where; + private System.Windows.Forms.TextBox txtCategoryName_where; + private System.Windows.Forms.TextBox txtCategoryID_where; + private System.Windows.Forms.TextBox txtPicture; + private System.Windows.Forms.TextBox txtCategoryName; + private System.Windows.Forms.TextBox txtDescription; + private System.Windows.Forms.TextBox txtCategoryID; + private System.Windows.Forms.Label lblPicture_where; + private System.Windows.Forms.Label lblDescription_where; + private System.Windows.Forms.Label lblCategoryName_where; + private System.Windows.Forms.Label lblCategoryID_where; + private System.Windows.Forms.Label lblPicture; + private System.Windows.Forms.Label lblDescription; + private System.Windows.Forms.Label lblCategoryName; + private System.Windows.Forms.Label lblCategoryID; + private System.Windows.Forms.Button btnDelete2; + private System.Windows.Forms.Button btnUpdate2; + private System.Windows.Forms.Button btnInsert2; + private System.Windows.Forms.Button btnSelect2; + private System.Windows.Forms.Button btnClear2; + private System.Windows.Forms.Button btnSelectAll2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.DataGridView dataGridView2; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Label lblHomePage; + private System.Windows.Forms.TextBox txtHomePage; + private System.Windows.Forms.TextBox txtFax; + private System.Windows.Forms.TextBox txtPhone; + private System.Windows.Forms.TextBox txtCountry; + private System.Windows.Forms.TextBox txtPostalCode; + private System.Windows.Forms.TextBox txtRegion; + private System.Windows.Forms.TextBox txtCity; + private System.Windows.Forms.TextBox txtAddress; + private System.Windows.Forms.TextBox txtContactTitle; + private System.Windows.Forms.TextBox txtCompanyName; + private System.Windows.Forms.TextBox txtContactName; + private System.Windows.Forms.TextBox txtSupplierID; + private System.Windows.Forms.Label lblFax; + private System.Windows.Forms.Label lblPhone; + private System.Windows.Forms.Label lblCountry; + private System.Windows.Forms.Label lblPostalCode; + private System.Windows.Forms.Label lblRegion; + private System.Windows.Forms.Label lblCity; + private System.Windows.Forms.Label lblAddress; + private System.Windows.Forms.Label lblContactTitle; + private System.Windows.Forms.Label lblContactName; + private System.Windows.Forms.Label lblCompanyName; + private System.Windows.Forms.Label lblSupplierID; + private System.Windows.Forms.Button btnDelete1; + private System.Windows.Forms.Button btnUpdate1; + private System.Windows.Forms.Button btnInsert1; + private System.Windows.Forms.Button btnSelect1; + private System.Windows.Forms.Button btnClear1; + private System.Windows.Forms.Button btnSelectAll1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button btnSelectAll3; + private System.Windows.Forms.DataGridView dataGridView3; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Button btnBatUpd; + private System.Windows.Forms.Button btnClear3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.PictureBox pictureBox1; + } +} + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.cs new file mode 100644 index 000000000..9d0d28596 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.cs @@ -0,0 +1,821 @@ +//********************************************************************************** +//* バッチ更新処理・サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form1 +//* クラス日本語名 :自動生成したDaoの利用サンプル +//* + データテーブルを使用したバッチ更新サンプル +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using GenDaoAndBatUpd_sample.Business; +using GenDaoAndBatUpd_sample.Common; + +using System; +using System.Data; +using System.Drawing; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Business.Util; +using Touryo.Infrastructure.Framework.RichClient.Business; +using Touryo.Infrastructure.Public.Db; + +namespace GenDaoAndBatUpd_sample +{ + /// 自動生成したDaoの利用サンプル+データテーブルを使用したバッチ更新サンプル + public partial class Form1 : Form + { + /// ユーザ情報 + MyUserInfo myUserInfo; + + #region 初期処理 + + /// コンストラクタ + public Form1() + { + InitializeComponent(); + + // 埋め込まれたリソースモード + MyBaseDao.UseEmbeddedResource = true; + } + + /// ロード イベント + private void Form1_Load(object sender, EventArgs e) + { + #region フローレイアウト風にする。 + + // タブ + this.tabControl1.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + + // グリッド + this.dataGridView1.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + this.dataGridView2.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + this.dataGridView3.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + + // ピクチャ + this.pictureBox1.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + + // ボタンA + this.btnInsert1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left); + this.btnInsert2.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left); + + this.btnSelect1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left); + this.btnSelect2.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left); + + this.btnUpdate1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left); + this.btnUpdate2.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left); + + this.btnDelete1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left); + this.btnDelete2.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left); + + // ボタンB + this.btnSelectAll1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + this.btnSelectAll2.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + this.btnSelectAll3.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + + this.btnClear1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + this.btnClear2.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + this.btnClear3.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + + this.btnBatUpd.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); + + #endregion + + // ユーザ情報 + this.myUserInfo = new MyUserInfo("userName", Environment.MachineName); + } + + #endregion + + #region データのロード + + /// Suppliersテーブルの取得 + private DataTable GetSuppliers(string controlId) + { + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, controlId, "SelectAll", "SQL", this.myUserInfo); + + // B層呼び出し + LayerB_Static lb = new LayerB_Static(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // 戻り値 + return (DataTable)testReturnValue.dt; + } + + /// Categoryテーブルの取得 + private DataTable GetCategory(string controlId) + { + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, controlId, "SelectAll", "SQL", this.myUserInfo); + + // B層呼び出し + LayerB_Dynamic lb = new LayerB_Dynamic(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // 戻り値 + return (DataTable)testReturnValue.dt; + } + + #endregion + + #region タブ1 + + #region 色をクリア + + /// 色をクリア + private void ClearColor1() + { + txtSupplierID.BackColor = Color.White; + txtCompanyName.BackColor = Color.White; + txtContactName.BackColor = Color.White; + txtContactTitle.BackColor = Color.White; + txtAddress.BackColor = Color.White; + txtCity.BackColor = Color.White; + txtRegion.BackColor = Color.White; + txtPostalCode.BackColor = Color.White; + txtCountry.BackColor = Color.White; + txtPhone.BackColor = Color.White; + txtFax.BackColor = Color.White; + txtHomePage.BackColor = Color.White; + } + + #endregion + + #region データグリッド1 + + /// グリッド1にデータをロード + private void btnSelectAll1_Click(object sender, EventArgs e) + { + // データをロード + this.dataGridView1.DataSource = this.GetSuppliers(((Button)sender).Name); + } + + /// グリッド1をクリア + private void btnClear1_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor1(); + + // クリア + this.dataGridView1.DataSource = null; + } + + #endregion + + # region 静的SQLのCRUD + + /// インサート + private void btnInsert1_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor1(); + + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "Insert", "SQL", this.myUserInfo); + + testParameterValue.field1 = ""; // SupplierID + + testParameterValue.field2 = txtCompanyName.Text; // CompanyName + txtCompanyName.BackColor = Color.LightYellow; + + testParameterValue.field3 = txtContactName.Text; // ContactName + txtContactName.BackColor = Color.LightYellow; + + testParameterValue.field4 = txtContactTitle.Text; // ContactTitle + txtContactTitle.BackColor = Color.LightYellow; + + testParameterValue.field5 = txtAddress.Text; // Address + txtAddress.BackColor = Color.LightYellow; + + testParameterValue.field6 = txtCity.Text; // City + txtCity.BackColor = Color.LightYellow; + + testParameterValue.field7 = txtRegion.Text; // Region + txtRegion.BackColor = Color.LightYellow; + + testParameterValue.field8 = txtPostalCode.Text; // PostalCode + txtPostalCode.BackColor = Color.LightYellow; + + testParameterValue.field9 = txtCountry.Text; // Country + txtCountry.BackColor = Color.LightYellow; + + testParameterValue.field10 = txtPhone.Text; // Phone + txtPhone.BackColor = Color.LightYellow; + + testParameterValue.field11 = txtFax.Text; // Fax + txtFax.BackColor = Color.LightYellow; + + testParameterValue.field12 = txtHomePage.Text; // HomePage + txtHomePage.BackColor = Color.LightYellow; + + // B層呼び出し + LayerB_Static lb = new LayerB_Static(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // データグリッドを更新 + this.btnSelectAll1_Click(sender,e); + } + + /// セレクト + private void btnSelect1_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor1(); + + // 主キーが無ければ、何もしない。 + if (txtSupplierID.Text == "") + { + MessageBox.Show("主キー(SupplierID)を入力してください。"); + return; + } + + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "Select", "SQL", this.myUserInfo); + + testParameterValue.field1 = txtSupplierID.Text; // SupplierID + txtSupplierID.BackColor = Color.LightYellow; + + // B層呼び出し + LayerB_Static lb = new LayerB_Static(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // 戻り値 + txtCompanyName.Text = testReturnValue.field2.ToString(); // CompanyName + txtContactName.Text = testReturnValue.field3.ToString(); // ContactName + txtContactTitle.Text = testReturnValue.field4.ToString(); // ContactTitle + txtAddress.Text = testReturnValue.field5.ToString(); // Address + txtCity.Text = testReturnValue.field6.ToString(); // City + txtRegion.Text = testReturnValue.field7.ToString(); // Region + txtPostalCode.Text = testReturnValue.field8.ToString(); // PostalCode + txtCountry.Text = testReturnValue.field9.ToString(); // Country + txtPhone.Text = testReturnValue.field10.ToString(); // Phone + txtFax.Text = testReturnValue.field11.ToString(); // Fax + txtHomePage.Text = testReturnValue.field12.ToString(); // HomePage + } + + /// アップデート + private void btnUpdate1_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor1(); + + // 主キーが無ければ、何もしない。 + if (txtSupplierID.Text == "") + { + MessageBox.Show("主キー(SupplierID)を入力してください。"); + return; + } + + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "Update", "SQL", this.myUserInfo); + + testParameterValue.field1 = txtSupplierID.Text; // SupplierID + txtSupplierID.BackColor = Color.LightYellow; + + testParameterValue.field2_ForUpd = txtCompanyName.Text; // CompanyName + txtCompanyName.BackColor = Color.LightYellow; + + testParameterValue.field3_ForUpd = txtContactName.Text; // ContactName + txtContactName.BackColor = Color.LightYellow; + + testParameterValue.field4_ForUpd = txtContactTitle.Text; // ContactTitle + txtContactTitle.BackColor = Color.LightYellow; + + testParameterValue.field5_ForUpd = txtAddress.Text; // Address + txtAddress.BackColor = Color.LightYellow; + + testParameterValue.field6_ForUpd = txtCity.Text; // City + txtCity.BackColor = Color.LightYellow; + + testParameterValue.field7_ForUpd = txtRegion.Text; // Region + txtRegion.BackColor = Color.LightYellow; + + testParameterValue.field8_ForUpd = txtPostalCode.Text; // PostalCode + txtPostalCode.BackColor = Color.LightYellow; + + testParameterValue.field9_ForUpd = txtCountry.Text; // Country + txtCountry.BackColor = Color.LightYellow; + + testParameterValue.field10_ForUpd = txtPhone.Text; // Phone + txtPhone.BackColor = Color.LightYellow; + + testParameterValue.field11_ForUpd = txtFax.Text; // Fax + txtFax.BackColor = Color.LightYellow; + + testParameterValue.field12_ForUpd = txtHomePage.Text; // HomePage + txtHomePage.BackColor = Color.LightYellow; + + // B層呼び出し + LayerB_Static lb = new LayerB_Static(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // データグリッドを更新 + this.btnSelectAll1_Click(sender, e); + } + + /// デリート + private void btnDelete1_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor1(); + + // 主キーが無ければ、何もしない。 + if (txtSupplierID.Text == "") + { + MessageBox.Show("主キー(SupplierID)を入力してください。"); + return; + } + + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "Delete", "SQL", this.myUserInfo); + + testParameterValue.field1 = txtSupplierID.Text; // SupplierID + txtSupplierID.BackColor = Color.LightYellow; + + // B層呼び出し + LayerB_Static lb = new LayerB_Static(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // データグリッドを更新 + this.btnSelectAll1_Click(sender, e); + } + + #endregion + + #endregion + + #region タブ2 + + #region 色をクリア + + /// 色をクリア + private void ClearColor2() + { + txtCategoryID.BackColor = Color.White; + txtCategoryName.BackColor = Color.White; + txtDescription.BackColor = Color.White; + //txtPicture.BackColor = Color.White; + + txtCategoryID_where.BackColor = Color.White; + txtCategoryName_where.BackColor = Color.White; + //txtDescription_where.BackColor = Color.White; + //txtPicture_where.BackColor = Color.White; + } + + #endregion + + #region データグリッド2 + + /// グリッド2にデータをロード + private void btnSelectAll2_Click(object sender, EventArgs e) + { + // データをロード + this.dataGridView2.DataSource = this.GetCategory(((Button)sender).Name); + } + + /// グリッド2をクリア + private void btnClear2_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor2(); + + // クリア + this.dataGridView2.DataSource = null; + } + + #endregion + + #region 動的SQLのCRUD + + /// インサート + private void btnInsert2_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor2(); + + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "Insert", "SQL", this.myUserInfo); + + // データを入力できないのでパス + //testParameterValue.field1 = this.txtCategoryID; // CategoryID + //this.txtCategoryID.BackColor = Color.LightYellow; + + testParameterValue.field2 = this.txtCategoryName.Text; // CategoryName + this.txtCategoryName.BackColor = Color.LightYellow; + + testParameterValue.field3 = this.txtDescription.Text; // Description + this.txtDescription.BackColor = Color.LightYellow; + + // データを入力できないのでパス + //testParameterValue.field4 = this.txtPicture.Text; // Picture + //this.txtPicture.BackColor = Color.LightYellow; + + // B層呼び出し + LayerB_Dynamic lb = new LayerB_Dynamic(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // データグリッドを更新 + this.btnSelectAll2_Click(sender, e); + } + + /// セレクト + private void btnSelect2_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor2(); + + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "Select", "SQL", this.myUserInfo); + + testParameterValue.field1_ForSearch = txtCategoryID_where.Text; // CategoryID_where + txtCategoryID_where.BackColor = Color.LightYellow; + + testParameterValue.field2_ForSearch = txtCategoryName_where.Text; // CategoryName_where + txtCategoryName_where.BackColor = Color.LightYellow; + + // 検索条件に使えない↓ + + //testParameterValue.field3_ForSearch = txtDescription_where.Text; // Description_where + //txtDescription_where.BackColor = Color.LightYellow; + + //testParameterValue.field4_ForSearch = txtPicture_where.Text; // Picture + //txtPicture_where.BackColor = Color.LightYellow; + + // B層呼び出し + LayerB_Dynamic lb = new LayerB_Dynamic(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // 戻り値を設定 + this.dataGridView2.DataSource = testReturnValue.dt; + } + + /// アップデート + private void btnUpdate2_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor2(); + + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "Update", "SQL", this.myUserInfo); + + // 更新値 + //testParameterValue.field1_ForUpd = txtCategoryID.Text; // CategoryID + //txtCategoryID.BackColor = Color.LightYellow; + + testParameterValue.field2_ForUpd = txtCategoryName.Text; // CategoryName + txtCategoryName.BackColor = Color.LightYellow; + + testParameterValue.field3_ForUpd = txtDescription.Text; // Description + txtDescription.BackColor = Color.LightYellow; + + // 検索条件 + testParameterValue.field1_ForSearch = txtCategoryID_where.Text; // CategoryID_where + txtCategoryID_where.BackColor = Color.LightYellow; + + testParameterValue.field2_ForSearch = txtCategoryName_where.Text; // CategoryName_where + txtCategoryName_where.BackColor = Color.LightYellow; + + // 検索条件に使えない↓ + + //testParameterValue.field3_ForSearch = txtDescription_where.Text; // Description_where + //txtDescription_where.BackColor = Color.LightYellow; + + //testParameterValue.field4_ForSearch = txtPicture_where.Text; // Picture + //txtPicture_where.BackColor = Color.LightYellow; + + // B層呼び出し + LayerB_Dynamic lb = new LayerB_Dynamic(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // データグリッドを更新 + this.btnSelectAll2_Click(sender, e); + } + + /// デリート + private void btnDelete2_Click(object sender, EventArgs e) + { + // 色のクリア + this.ClearColor2(); + + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "Delete", "SQL", this.myUserInfo); + + // 検索条件 + testParameterValue.field1_ForSearch = txtCategoryID_where.Text; // CategoryID_where + txtCategoryID_where.BackColor = Color.LightYellow; + + testParameterValue.field2_ForSearch = txtCategoryName_where.Text; // CategoryName_where + txtCategoryName_where.BackColor = Color.LightYellow; + + // 検索条件に使えない↓ + + //testParameterValue.field3_ForSearch = txtDescription_where.Text; // Description_where + //txtDescription_where.BackColor = Color.LightYellow; + + //testParameterValue.field4_ForSearch = txtPicture_where.Text; // Picture + //txtPicture_where.BackColor = Color.LightYellow; + + // B層呼び出し + LayerB_Dynamic lb = new LayerB_Dynamic(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // データグリッドを更新 + this.btnSelectAll2_Click(sender, e); + } + + #endregion + + #endregion + + #region タブ3 + + /// グリッド3にデータをロード + private void btnSelectAll3_Click(object sender, EventArgs e) + { + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectAll", "SQL", this.myUserInfo); + + // B層呼び出し + LayerB_BatUpd lb = new LayerB_BatUpd(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // 戻り値を設定(列が自動的に作成されないようにする) + this.dataGridView3.Columns.Clear(); + this.dataGridView3.AutoGenerateColumns = false; + this.dataGridView3.DataSource = testReturnValue.dt; + + #region マスタのコンボ生成 + + #region SupplierID - ComboBox + + DataTable dtSuppliers = this.GetSuppliers(((Button)sender).Name); + + // DataGridViewComboBoxColumnを作成 + DataGridViewComboBoxColumn cmbColSuppliers = new DataGridViewComboBoxColumn(); + this.InitDataGridViewComboBoxColumn(cmbColSuppliers); + + // "SupplierID"列にバインドされているデータと関連付け、 + cmbColSuppliers.DataPropertyName = "SupplierID"; + // ヘッダーのテキストを変更 + cmbColSuppliers.HeaderText = "Supplier"; + + //DataGridViewComboBoxColumnのDataSourceを設定 + cmbColSuppliers.DataSource = dtSuppliers; + + // 実際の値が"SupplierID"列 + // 表示するテキストが"CompanyName"列 + cmbColSuppliers.ValueMember = "SupplierID"; + cmbColSuppliers.DisplayMember = "CompanyName"; + + #endregion + + #region CategoryID - ComboBox + + DataTable dtCategory = this.GetCategory("btnSelectAll3"); + + // DataGridViewComboBoxColumnを作成 + DataGridViewComboBoxColumn cmbColCategory = new DataGridViewComboBoxColumn(); + this.InitDataGridViewComboBoxColumn(cmbColCategory); + + // "SupplierID"列にバインドされているデータと関連付け、 + cmbColCategory.DataPropertyName = "CategoryID"; + // ヘッダーのテキストを変更 + cmbColCategory.HeaderText = "Category"; + + // DataGridViewComboBoxColumnのDataSourceを設定 + cmbColCategory.DataSource = dtCategory; + + // 実際の値が"CategoryID"列 + // 表示するテキストが"CategoryName"列 + cmbColCategory.ValueMember = "CategoryID"; + cmbColCategory.DisplayMember = "CategoryName"; + + #endregion + + #endregion + + #region 手動でデータバインド + + // はじめにクリア + + // DataGridViewTextBoxColumn + DataGridViewTextBoxColumn textColumn; + + DataGridViewCheckBoxColumn checkColumn; + + //データソースの"ProductID"列をバインドする + textColumn = new DataGridViewTextBoxColumn(); + textColumn.DataPropertyName = "ProductID"; + textColumn.Name = "ProductID"; + textColumn.HeaderText = "ProductID"; + + // 主キーは読み取り専用 + textColumn.ReadOnly = true; + + this.dataGridView3.Columns.Add(textColumn); + + //データソースの"ProductName"列をバインドする + textColumn = new DataGridViewTextBoxColumn(); + textColumn.DataPropertyName = "ProductName"; + textColumn.Name = "ProductName"; + textColumn.HeaderText = "ProductName"; + this.dataGridView3.Columns.Add(textColumn); + + //データソースの"SupplierID"列をバインドする + textColumn = new DataGridViewTextBoxColumn(); + textColumn.DataPropertyName = "SupplierID"; + textColumn.Name = "SupplierID"; + textColumn.HeaderText = "SupplierID"; + this.dataGridView3.Columns.Add(textColumn); + + // 見えなくしてマスタをコンボを追加 + this.dataGridView3.Columns["SupplierID"].Visible = false; + this.dataGridView3.Columns.Add(cmbColSuppliers); + + //データソースの"CategoryID"列をバインドする + textColumn = new DataGridViewTextBoxColumn(); + textColumn.DataPropertyName = "CategoryID"; + textColumn.Name = "CategoryID"; + textColumn.HeaderText = "CategoryID"; + this.dataGridView3.Columns.Add(textColumn); + + // 見えなくしてマスタをコンボを追加 + this.dataGridView3.Columns["CategoryID"].Visible = false; + this.dataGridView3.Columns.Add(cmbColCategory); + + //データソースの"QuantityPerUnit"列をバインドする + textColumn = new DataGridViewTextBoxColumn(); + textColumn.DataPropertyName = "QuantityPerUnit"; + textColumn.Name = "QuantityPerUnit"; + textColumn.HeaderText = "QuantityPerUnit"; + this.dataGridView3.Columns.Add(textColumn); + + //データソースの"UnitPrice"列をバインドする + textColumn = new DataGridViewTextBoxColumn(); + textColumn.DataPropertyName = "UnitPrice"; + textColumn.Name = "UnitPrice"; + textColumn.HeaderText = "UnitPrice"; + this.dataGridView3.Columns.Add(textColumn); + + //データソースの"UnitsInStock"列をバインドする + textColumn = new DataGridViewTextBoxColumn(); + textColumn.DataPropertyName = "UnitsInStock"; + textColumn.Name = "UnitsInStock"; + textColumn.HeaderText = "UnitsInStock"; + this.dataGridView3.Columns.Add(textColumn); + + //データソースの"UnitsOnOrder"列をバインドする + textColumn = new DataGridViewTextBoxColumn(); + textColumn.DataPropertyName = "UnitsOnOrder"; + textColumn.Name = "UnitsOnOrder"; + textColumn.HeaderText = "UnitsOnOrder"; + this.dataGridView3.Columns.Add(textColumn); + + //データソースの"ReorderLevel"列をバインドする + textColumn = new DataGridViewTextBoxColumn(); + textColumn.DataPropertyName = "ReorderLevel"; + textColumn.Name = "ReorderLevel"; + textColumn.HeaderText = "ReorderLevel"; + this.dataGridView3.Columns.Add(textColumn); + + //データソースの"Discontinued"列をバインドする + checkColumn = new DataGridViewCheckBoxColumn(); + checkColumn.DataPropertyName = "Discontinued"; + checkColumn.Name = "Discontinued"; + checkColumn.HeaderText = "Discontinued"; + this.dataGridView3.Columns.Add(checkColumn); + + #endregion + } + + /// DataGridViewComboBoxColumnのスタイルを初期化する。 + private void InitDataGridViewComboBoxColumn(DataGridViewComboBoxColumn cmbCol) + { + // 現在のセルしかコンボボックスが表示されないようにする。 + cmbCol.DisplayStyleForCurrentCellOnly = true; + // 編集モードの時だけコンボボックスを表示する。 + cmbCol.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; + + // マウスポインタ下のセルが強調表示されるようにする。 + cmbCol.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox; + // マウスポインタ下のセルにポップアップが表示されるようにする。 + cmbCol.FlatStyle = FlatStyle.Popup; + } + + /// バッチ更新 + private void btnBatUpd_Click(object sender, EventArgs e) + { + // 引数 + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "BatUpd", "SQL", this.myUserInfo); + + // 編集済みのDataTableを設定 + testParameterValue.dt = (DataTable)this.dataGridView3.DataSource; + + // B層呼び出し + LayerB_BatUpd lb = new LayerB_BatUpd(); + + TestReturnValue testReturnValue = + (TestReturnValue)lb.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); + + // コミット + BaseLogic2CS.CommitAndClose(); + + // データグリッドを更新 + this.btnSelectAll3_Click(sender, e); + } + + /// データエラー時のイベントハンドラ + private void dataGridView3_DataError(object sender, DataGridViewDataErrorEventArgs e) + { + MessageBox.Show(e.Exception.Message); + } + + /// クリア + private void btnClear3_Click(object sender, EventArgs e) + { + // クリア + this.dataGridView3.DataSource = null; + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.resx b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.csproj new file mode 100644 index 000000000..e3f456541 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.csproj @@ -0,0 +1,207 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {D40BC756-8E12-4020-8486-99F482E35DCD} + WinExe + Properties + GenDaoAndBatUpd_sample + GenDaoAndBatUpd_sample + v4.6 + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + + Always + + + Always + + + Always + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.sln new file mode 100644 index 000000000..161cf10e5 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenDaoAndBatUpd_sample", "GenDaoAndBatUpd_sample.csproj", "{D40BC756-8E12-4020-8486-99F482E35DCD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D40BC756-8E12-4020-8486-99F482E35DCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D40BC756-8E12-4020-8486-99F482E35DCD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D40BC756-8E12-4020-8486-99F482E35DCD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D40BC756-8E12-4020-8486-99F482E35DCD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/MSGDefinition.xml new file mode 100644 index 000000000..f2283b409 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/MSGDefinition.xml @@ -0,0 +1,23 @@ + + + + +]> + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Program.cs new file mode 100644 index 000000000..16b1c5001 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Program.cs @@ -0,0 +1,38 @@ +//********************************************************************************** +//* バッチ更新処理・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :アプリケーションのメイン エントリ ポイント +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* +//********************************************************************************** + +using System; +using System.Windows.Forms; + +namespace GenDaoAndBatUpd_sample +{ + /// アプリケーションのメイン エントリ ポイント + static class Program + { + /// アプリケーションのメイン エントリ ポイントです。 + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..3232cb51c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/AssemblyInfo.cs @@ -0,0 +1,51 @@ +//********************************************************************************** +//* バッチ更新処理・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("GenDaoAndBatUpd_sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("GenDaoAndBatUpd_sample")] +[assembly: AssemblyCopyright("Copyright (C) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です +[assembly: Guid("7492259c-e778-4c4c-af6e-cb1c500a175f")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.Designer.cs new file mode 100644 index 000000000..c63bb41ed --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace GenDaoAndBatUpd_sample.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GenDaoAndBatUpd_sample.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Diagram { + get { + object obj = ResourceManager.GetObject("Diagram", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.resx b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.resx new file mode 100644 index 000000000..5cf564b18 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Diagram.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Readme.txt b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Readme.txt new file mode 100644 index 000000000..a5606b99f --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Readme.txt @@ -0,0 +1 @@ +自動生成Daoの利用サンプル \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/SPDefinition.xml new file mode 100644 index 000000000..6baf634bc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/SPDefinition.xml @@ -0,0 +1,15 @@ + + + + +]> + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/SampleLogConf2CS.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/SampleLogConf2CS.xml new file mode 100644 index 000000000..e39f2b3fe --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/SampleLogConf2CS.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/app.config new file mode 100644 index 000000000..b712a7713 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/app.config @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1.cs new file mode 100644 index 000000000..a539f0542 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1.cs @@ -0,0 +1,406 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Daots_test_table1 +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class Daots_test_table1 : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public Daots_test_table1(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// id列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_id + { + set + { + this.HtParameter["id"] = value; + } + get + { + return this.HtParameter["id"]; + } + } + + + + /// val列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object val + { + set + { + this.HtParameter["val"] = value; + } + get + { + return this.HtParameter["val"]; + } + } + + /// ts列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ts + { + set + { + this.HtParameter["ts"] = value; + } + get + { + return this.HtParameter["ts"]; + } + } + + + /// Set_id_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_id_forUPD + { + set + { + this.HtParameter["Set_id_forUPD"] = value; + } + get + { + return this.HtParameter["Set_id_forUPD"]; + } + } + + + /// Set_val_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_val_forUPD + { + set + { + this.HtParameter["Set_val_forUPD"] = value; + } + get + { + return this.HtParameter["Set_val_forUPD"]; + } + } + + + /// Set_ts_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ts_forUPD + { + set + { + this.HtParameter["Set_ts_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ts_forUPD"]; + } + } + + + + /// id_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object id_Like + { + set + { + this.HtParameter["id_Like"] = value; + } + get + { + return this.HtParameter["id_Like"]; + } + } + + + /// val_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object val_Like + { + set + { + this.HtParameter["val_Like"] = value; + } + get + { + return this.HtParameter["val_Like"]; + } + } + + + /// ts_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ts_Like + { + set + { + this.HtParameter["ts_Like"] = value; + } + get + { + return this.HtParameter["ts_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("Daots_test_table1_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("Daots_test_table1_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("Daots_test_table1_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("Daots_test_table1_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("Daots_test_table1_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("Daots_test_table1_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("Daots_test_table1_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("Daots_test_table1_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("Daots_test_table1_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D1_Insert.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D1_Insert.xml new file mode 100644 index 000000000..6b0ba38ec --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D1_Insert.xml @@ -0,0 +1,25 @@ + + + -- Daots_test_table1_D1_Insert + -- 2014/2/9 日立 太郎 + INSERT INTO + [ts_test_table1] + ( + + [id], + [val], + [ts], + + ) + VALUES + ( + + @id, + @val, + RAND(), + + ) + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D2_Select.xml new file mode 100644 index 000000000..56ba3da57 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D2_Select.xml @@ -0,0 +1,20 @@ + + + -- Daots_test_table1_D2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [val], + [ts] + FROM + [ts_test_table1] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D3_Update.xml new file mode 100644 index 000000000..956f494cf --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D3_Update.xml @@ -0,0 +1,19 @@ + + + -- Daots_test_table1_D3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_table1] + SET + + [id] = @Set_id_forUPD, + [val] = @Set_val_forUPD, + [ts] = RAND(), + + + WHERE + AND [id] = @idAND [id] IS NULL + AND [val] = @valAND [val] IS NULL + AND [ts] = @tsAND [ts] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D4_Delete.xml new file mode 100644 index 000000000..45d245f80 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D4_Delete.xml @@ -0,0 +1,13 @@ + + + -- Daots_test_table1_D4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_table1] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [val] = @valAND [val] IS NULL + AND [ts] = @tsAND [ts] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D5_SelCnt.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D5_SelCnt.xml new file mode 100644 index 000000000..f41b68bd9 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_D5_SelCnt.xml @@ -0,0 +1,18 @@ + + + -- Daots_test_table1_D5_SelCnt + -- 2014/2/9 日立 太郎 + SELECT + COUNT(*) + FROM + [ts_test_table1] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S1_Insert.sql b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S1_Insert.sql new file mode 100644 index 000000000..2c7f621db --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S1_Insert.sql @@ -0,0 +1,13 @@ +-- Daots_test_table1_S1_Insert +-- 2014/2/9 日立 太郎 +INSERT INTO + [ts_test_table1] + ( + [val], + [ts] + ) +VALUES + ( + @val, + RAND() + ) diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S2_Select.xml new file mode 100644 index 000000000..e40c9368a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S2_Select.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_table1_S2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [val], + [ts] + FROM + [ts_test_table1] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S3_Update.xml new file mode 100644 index 000000000..ff6df1527 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S3_Update.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_table1_S3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_table1] + SET + + [id] = @Set_id_forUPD, + [val] = @Set_val_forUPD, + [ts] = RAND(), + + WHERE + [id] = @id + AND [ts] = @ts + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S4_Delete.xml new file mode 100644 index 000000000..6d507adeb --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table1_S4_Delete.xml @@ -0,0 +1,12 @@ + + + -- Daots_test_table1_S4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_table1] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2.cs new file mode 100644 index 000000000..94beccb84 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2.cs @@ -0,0 +1,406 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Daots_test_table2 +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class Daots_test_table2 : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public Daots_test_table2(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// id列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_id + { + set + { + this.HtParameter["id"] = value; + } + get + { + return this.HtParameter["id"]; + } + } + + + + /// ts列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ts + { + set + { + this.HtParameter["ts"] = value; + } + get + { + return this.HtParameter["ts"]; + } + } + + /// val列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object val + { + set + { + this.HtParameter["val"] = value; + } + get + { + return this.HtParameter["val"]; + } + } + + + /// Set_id_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_id_forUPD + { + set + { + this.HtParameter["Set_id_forUPD"] = value; + } + get + { + return this.HtParameter["Set_id_forUPD"]; + } + } + + + /// Set_ts_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ts_forUPD + { + set + { + this.HtParameter["Set_ts_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ts_forUPD"]; + } + } + + + /// Set_val_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_val_forUPD + { + set + { + this.HtParameter["Set_val_forUPD"] = value; + } + get + { + return this.HtParameter["Set_val_forUPD"]; + } + } + + + + /// id_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object id_Like + { + set + { + this.HtParameter["id_Like"] = value; + } + get + { + return this.HtParameter["id_Like"]; + } + } + + + /// ts_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ts_Like + { + set + { + this.HtParameter["ts_Like"] = value; + } + get + { + return this.HtParameter["ts_Like"]; + } + } + + + /// val_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object val_Like + { + set + { + this.HtParameter["val_Like"] = value; + } + get + { + return this.HtParameter["val_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("Daots_test_table2_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("Daots_test_table2_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("Daots_test_table2_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("Daots_test_table2_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("Daots_test_table2_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("Daots_test_table2_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("Daots_test_table2_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("Daots_test_table2_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("Daots_test_table2_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D1_Insert.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D1_Insert.xml new file mode 100644 index 000000000..5ccf03a9a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D1_Insert.xml @@ -0,0 +1,25 @@ + + + -- Daots_test_table2_D1_Insert + -- 2014/2/9 日立 太郎 + INSERT INTO + [ts_test_table2] + ( + + [id], + [ts], + [val], + + ) + VALUES + ( + + @id, + RAND(), + @val, + + ) + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D2_Select.xml new file mode 100644 index 000000000..8edaedb83 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D2_Select.xml @@ -0,0 +1,20 @@ + + + -- Daots_test_table2_D2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [ts], + [val] + FROM + [ts_test_table2] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D3_Update.xml new file mode 100644 index 000000000..b953ae55f --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D3_Update.xml @@ -0,0 +1,19 @@ + + + -- Daots_test_table2_D3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_table2] + SET + + [id] = @Set_id_forUPD, + [ts] = RAND(), + [val] = @Set_val_forUPD, + + + WHERE + AND [id] = @idAND [id] IS NULL + AND [ts] = @tsAND [ts] IS NULL + AND [val] = @valAND [val] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D4_Delete.xml new file mode 100644 index 000000000..58693fa28 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D4_Delete.xml @@ -0,0 +1,13 @@ + + + -- Daots_test_table2_D4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_table2] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [ts] = @tsAND [ts] IS NULL + AND [val] = @valAND [val] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D5_SelCnt.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D5_SelCnt.xml new file mode 100644 index 000000000..0c3482c90 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_D5_SelCnt.xml @@ -0,0 +1,18 @@ + + + -- Daots_test_table2_D5_SelCnt + -- 2014/2/9 日立 太郎 + SELECT + COUNT(*) + FROM + [ts_test_table2] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S1_Insert.sql b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S1_Insert.sql new file mode 100644 index 000000000..182037b11 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S1_Insert.sql @@ -0,0 +1,13 @@ +-- Daots_test_table2_S1_Insert +-- 2014/2/9 日立 太郎 +INSERT INTO + [ts_test_table2] + ( + [ts], + [val] + ) +VALUES + ( + RAND(), + @val + ) diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S2_Select.xml new file mode 100644 index 000000000..4ebf70b86 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S2_Select.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_table2_S2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [ts], + [val] + FROM + [ts_test_table2] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S3_Update.xml new file mode 100644 index 000000000..b5a6dd55d --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S3_Update.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_table2_S3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_table2] + SET + + [id] = @Set_id_forUPD, + [ts] = RAND(), + [val] = @Set_val_forUPD, + + WHERE + [id] = @id + AND [ts] = @ts + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S4_Delete.xml new file mode 100644 index 000000000..01c4641c8 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table2_S4_Delete.xml @@ -0,0 +1,12 @@ + + + -- Daots_test_table2_S4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_table2] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3.cs new file mode 100644 index 000000000..26721943a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3.cs @@ -0,0 +1,406 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Daots_test_table3 +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class Daots_test_table3 : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public Daots_test_table3(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// id列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_id + { + set + { + this.HtParameter["id"] = value; + } + get + { + return this.HtParameter["id"]; + } + } + + + + /// ts列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ts + { + set + { + this.HtParameter["ts"] = value; + } + get + { + return this.HtParameter["ts"]; + } + } + + /// val列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object val + { + set + { + this.HtParameter["val"] = value; + } + get + { + return this.HtParameter["val"]; + } + } + + + /// Set_id_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_id_forUPD + { + set + { + this.HtParameter["Set_id_forUPD"] = value; + } + get + { + return this.HtParameter["Set_id_forUPD"]; + } + } + + + /// Set_ts_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ts_forUPD + { + set + { + this.HtParameter["Set_ts_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ts_forUPD"]; + } + } + + + /// Set_val_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_val_forUPD + { + set + { + this.HtParameter["Set_val_forUPD"] = value; + } + get + { + return this.HtParameter["Set_val_forUPD"]; + } + } + + + + /// id_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object id_Like + { + set + { + this.HtParameter["id_Like"] = value; + } + get + { + return this.HtParameter["id_Like"]; + } + } + + + /// ts_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ts_Like + { + set + { + this.HtParameter["ts_Like"] = value; + } + get + { + return this.HtParameter["ts_Like"]; + } + } + + + /// val_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object val_Like + { + set + { + this.HtParameter["val_Like"] = value; + } + get + { + return this.HtParameter["val_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("Daots_test_table3_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("Daots_test_table3_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("Daots_test_table3_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("Daots_test_table3_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("Daots_test_table3_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("Daots_test_table3_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("Daots_test_table3_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("Daots_test_table3_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("Daots_test_table3_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D1_Insert.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D1_Insert.xml new file mode 100644 index 000000000..0e7f4f501 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D1_Insert.xml @@ -0,0 +1,25 @@ + + + -- Daots_test_table3_D1_Insert + -- 2014/2/9 日立 太郎 + INSERT INTO + [ts_test_table3] + ( + + [id], + [ts], + [val], + + ) + VALUES + ( + + @id, + RAND(), + @val, + + ) + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D2_Select.xml new file mode 100644 index 000000000..5c1a820a9 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D2_Select.xml @@ -0,0 +1,20 @@ + + + -- Daots_test_table3_D2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [ts], + [val] + FROM + [ts_test_table3] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D3_Update.xml new file mode 100644 index 000000000..f35d71248 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D3_Update.xml @@ -0,0 +1,19 @@ + + + -- Daots_test_table3_D3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_table3] + SET + + [id] = @Set_id_forUPD, + [ts] = RAND(), + [val] = @Set_val_forUPD, + + + WHERE + AND [id] = @idAND [id] IS NULL + AND [ts] = @tsAND [ts] IS NULL + AND [val] = @valAND [val] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D4_Delete.xml new file mode 100644 index 000000000..f5aacee14 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D4_Delete.xml @@ -0,0 +1,13 @@ + + + -- Daots_test_table3_D4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_table3] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [ts] = @tsAND [ts] IS NULL + AND [val] = @valAND [val] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D5_SelCnt.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D5_SelCnt.xml new file mode 100644 index 000000000..dd60ea250 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_D5_SelCnt.xml @@ -0,0 +1,18 @@ + + + -- Daots_test_table3_D5_SelCnt + -- 2014/2/9 日立 太郎 + SELECT + COUNT(*) + FROM + [ts_test_table3] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S1_Insert.sql b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S1_Insert.sql new file mode 100644 index 000000000..44031d0b4 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S1_Insert.sql @@ -0,0 +1,13 @@ +-- Daots_test_table3_S1_Insert +-- 2014/2/9 日立 太郎 +INSERT INTO + [ts_test_table3] + ( + [ts], + [val] + ) +VALUES + ( + RAND(), + @val + ) diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S2_Select.xml new file mode 100644 index 000000000..b4944a314 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S2_Select.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_table3_S2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [ts], + [val] + FROM + [ts_test_table3] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S3_Update.xml new file mode 100644 index 000000000..8958a170f --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S3_Update.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_table3_S3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_table3] + SET + + [id] = @Set_id_forUPD, + [ts] = RAND(), + [val] = @Set_val_forUPD, + + WHERE + [id] = @id + AND [ts] = @ts + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S4_Delete.xml new file mode 100644 index 000000000..84030cef6 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_table3_S4_Delete.xml @@ -0,0 +1,12 @@ + + + -- Daots_test_table3_S4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_table3] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA.cs new file mode 100644 index 000000000..e7d479385 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA.cs @@ -0,0 +1,406 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Daots_test_tableA +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class Daots_test_tableA : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public Daots_test_tableA(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// id列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_id + { + set + { + this.HtParameter["id"] = value; + } + get + { + return this.HtParameter["id"]; + } + } + + + + /// val列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object val + { + set + { + this.HtParameter["val"] = value; + } + get + { + return this.HtParameter["val"]; + } + } + + /// ts列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ts + { + set + { + this.HtParameter["ts"] = value; + } + get + { + return this.HtParameter["ts"]; + } + } + + + /// Set_id_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_id_forUPD + { + set + { + this.HtParameter["Set_id_forUPD"] = value; + } + get + { + return this.HtParameter["Set_id_forUPD"]; + } + } + + + /// Set_val_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_val_forUPD + { + set + { + this.HtParameter["Set_val_forUPD"] = value; + } + get + { + return this.HtParameter["Set_val_forUPD"]; + } + } + + + /// Set_ts_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ts_forUPD + { + set + { + this.HtParameter["Set_ts_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ts_forUPD"]; + } + } + + + + /// id_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object id_Like + { + set + { + this.HtParameter["id_Like"] = value; + } + get + { + return this.HtParameter["id_Like"]; + } + } + + + /// val_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object val_Like + { + set + { + this.HtParameter["val_Like"] = value; + } + get + { + return this.HtParameter["val_Like"]; + } + } + + + /// ts_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ts_Like + { + set + { + this.HtParameter["ts_Like"] = value; + } + get + { + return this.HtParameter["ts_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("Daots_test_tableA_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("Daots_test_tableA_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("Daots_test_tableA_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("Daots_test_tableA_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("Daots_test_tableA_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("Daots_test_tableA_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("Daots_test_tableA_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("Daots_test_tableA_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("Daots_test_tableA_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D1_Insert.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D1_Insert.xml new file mode 100644 index 000000000..cb90a9e27 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D1_Insert.xml @@ -0,0 +1,25 @@ + + + -- Daots_test_tableA_D1_Insert + -- 2014/2/9 日立 太郎 + INSERT INTO + [ts_test_tableA] + ( + + [id], + [val], + [ts], + + ) + VALUES + ( + + @id, + @val, + @ts, + + ) + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D2_Select.xml new file mode 100644 index 000000000..dc742072f --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D2_Select.xml @@ -0,0 +1,20 @@ + + + -- Daots_test_tableA_D2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [val], + [ts] + FROM + [ts_test_tableA] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D3_Update.xml new file mode 100644 index 000000000..4773458e9 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D3_Update.xml @@ -0,0 +1,19 @@ + + + -- Daots_test_tableA_D3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_tableA] + SET + + [id] = @Set_id_forUPD, + [val] = @Set_val_forUPD, + [ts] = @Set_ts_forUPD, + + + WHERE + AND [id] = @idAND [id] IS NULL + AND [val] = @valAND [val] IS NULL + AND [ts] = @tsAND [ts] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D4_Delete.xml new file mode 100644 index 000000000..89eb72fcd --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D4_Delete.xml @@ -0,0 +1,13 @@ + + + -- Daots_test_tableA_D4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_tableA] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [val] = @valAND [val] IS NULL + AND [ts] = @tsAND [ts] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D5_SelCnt.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D5_SelCnt.xml new file mode 100644 index 000000000..74b6dc42f --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_D5_SelCnt.xml @@ -0,0 +1,18 @@ + + + -- Daots_test_tableA_D5_SelCnt + -- 2014/2/9 日立 太郎 + SELECT + COUNT(*) + FROM + [ts_test_tableA] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S1_Insert.sql b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S1_Insert.sql new file mode 100644 index 000000000..0e64a34f7 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S1_Insert.sql @@ -0,0 +1,12 @@ +-- Daots_test_tableA_S1_Insert +-- 2014/2/9 日立 太郎 +-- id, tsを消してます。 +INSERT INTO + [ts_test_tableA] + ( + [val] + ) +VALUES + ( + @val + ) diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S2_Select.xml new file mode 100644 index 000000000..861acef05 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S2_Select.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_tableA_S2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [val], + [ts] + FROM + [ts_test_tableA] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S3_Update.xml new file mode 100644 index 000000000..35f16f535 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S3_Update.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_tableA_S3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_tableA] + SET + + [id] = @Set_id_forUPD, + [val] = @Set_val_forUPD, + [ts] = @Set_ts_forUPD, + + WHERE + [id] = @id + AND [ts] = @ts + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S4_Delete.xml new file mode 100644 index 000000000..c25cda971 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableA_S4_Delete.xml @@ -0,0 +1,12 @@ + + + -- Daots_test_tableA_S4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_tableA] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB.cs new file mode 100644 index 000000000..46de1e90a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB.cs @@ -0,0 +1,406 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Daots_test_tableB +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class Daots_test_tableB : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public Daots_test_tableB(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// id列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_id + { + set + { + this.HtParameter["id"] = value; + } + get + { + return this.HtParameter["id"]; + } + } + + + + /// ts列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ts + { + set + { + this.HtParameter["ts"] = value; + } + get + { + return this.HtParameter["ts"]; + } + } + + /// val列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object val + { + set + { + this.HtParameter["val"] = value; + } + get + { + return this.HtParameter["val"]; + } + } + + + /// Set_id_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_id_forUPD + { + set + { + this.HtParameter["Set_id_forUPD"] = value; + } + get + { + return this.HtParameter["Set_id_forUPD"]; + } + } + + + /// Set_ts_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ts_forUPD + { + set + { + this.HtParameter["Set_ts_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ts_forUPD"]; + } + } + + + /// Set_val_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_val_forUPD + { + set + { + this.HtParameter["Set_val_forUPD"] = value; + } + get + { + return this.HtParameter["Set_val_forUPD"]; + } + } + + + + /// id_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object id_Like + { + set + { + this.HtParameter["id_Like"] = value; + } + get + { + return this.HtParameter["id_Like"]; + } + } + + + /// ts_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ts_Like + { + set + { + this.HtParameter["ts_Like"] = value; + } + get + { + return this.HtParameter["ts_Like"]; + } + } + + + /// val_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object val_Like + { + set + { + this.HtParameter["val_Like"] = value; + } + get + { + return this.HtParameter["val_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("Daots_test_tableB_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("Daots_test_tableB_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("Daots_test_tableB_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("Daots_test_tableB_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("Daots_test_tableB_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("Daots_test_tableB_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("Daots_test_tableB_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("Daots_test_tableB_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("Daots_test_tableB_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D1_Insert.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D1_Insert.xml new file mode 100644 index 000000000..13be4c1af --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D1_Insert.xml @@ -0,0 +1,25 @@ + + + -- Daots_test_tableB_D1_Insert + -- 2014/2/9 日立 太郎 + INSERT INTO + [ts_test_tableB] + ( + + [id], + [ts], + [val], + + ) + VALUES + ( + + @id, + @ts, + @val, + + ) + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D2_Select.xml new file mode 100644 index 000000000..07093d80f --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D2_Select.xml @@ -0,0 +1,20 @@ + + + -- Daots_test_tableB_D2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [ts], + [val] + FROM + [ts_test_tableB] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D3_Update.xml new file mode 100644 index 000000000..bffd6261e --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D3_Update.xml @@ -0,0 +1,19 @@ + + + -- Daots_test_tableB_D3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_tableB] + SET + + [id] = @Set_id_forUPD, + [ts] = @Set_ts_forUPD, + [val] = @Set_val_forUPD, + + + WHERE + AND [id] = @idAND [id] IS NULL + AND [ts] = @tsAND [ts] IS NULL + AND [val] = @valAND [val] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D4_Delete.xml new file mode 100644 index 000000000..2a3376c08 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D4_Delete.xml @@ -0,0 +1,13 @@ + + + -- Daots_test_tableB_D4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_tableB] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [ts] = @tsAND [ts] IS NULL + AND [val] = @valAND [val] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D5_SelCnt.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D5_SelCnt.xml new file mode 100644 index 000000000..1d9130216 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_D5_SelCnt.xml @@ -0,0 +1,18 @@ + + + -- Daots_test_tableB_D5_SelCnt + -- 2014/2/9 日立 太郎 + SELECT + COUNT(*) + FROM + [ts_test_tableB] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S1_Insert.sql b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S1_Insert.sql new file mode 100644 index 000000000..cf6b84b4a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S1_Insert.sql @@ -0,0 +1,12 @@ +-- Daots_test_tableB_S1_Insert +-- 2014/2/9 日立 太郎 +-- id, tsを消してます。 +INSERT INTO + [ts_test_tableB] + ( + [val] + ) +VALUES + ( + @val + ) diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S2_Select.xml new file mode 100644 index 000000000..fa0fd2dd2 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S2_Select.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_tableB_S2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [ts], + [val] + FROM + [ts_test_tableB] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S3_Update.xml new file mode 100644 index 000000000..af54151c3 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S3_Update.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_tableB_S3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_tableB] + SET + + [id] = @Set_id_forUPD, + [ts] = @Set_ts_forUPD, + [val] = @Set_val_forUPD, + + WHERE + [id] = @id + AND [ts] = @ts + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S4_Delete.xml new file mode 100644 index 000000000..891e8632c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableB_S4_Delete.xml @@ -0,0 +1,12 @@ + + + -- Daots_test_tableB_S4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_tableB] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC.cs new file mode 100644 index 000000000..6b1a8eedf --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC.cs @@ -0,0 +1,406 @@ +//********************************************************************************** +//* フレームワーク・テストクラス(D層) +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Daots_test_tableC +//* クラス日本語名 :自動生成Daoクラス +//* +//* 作成日時 :2014/2/9 +//* 作成者 :棟梁 D層自動生成ツール(墨壺), 日立 太郎 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* 2012/06/14 西野 大介 ResourceLoaderに加え、EmbeddedResourceLoaderに対応 +//* 2013/09/09 西野 大介 ExecGenerateSQLメソッドを追加した(バッチ更新用)。 +//********************************************************************************** + +using System.Data; +using System.Collections; + +using Touryo.Infrastructure.Business.Dao; +using Touryo.Infrastructure.Public.Db; + +/// 自動生成Daoクラス +public class Daots_test_tableC : MyBaseDao +{ + #region インスタンス変数 + + /// ユーザ パラメタ(文字列置換)用ハッシュ テーブル + protected Hashtable HtUserParameter = new Hashtable(); + /// パラメタ ライズド クエリのパラメタ用ハッシュ テーブル + protected Hashtable HtParameter = new Hashtable(); + + #endregion + + #region コンストラクタ + + /// コンストラクタ + public Daots_test_tableC(BaseDam dam) : base(dam) { } + + #endregion + + #region 共通関数(パラメタの制御) + + /// ユーザ パラメタ(文字列置換)をハッシュ テーブルに設定する。 + /// ユーザ パラメタ名 + /// ユーザ パラメタ値 + public void SetUserParameteToHt(string userParamName, string userParamValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtUserParameter[userParamName] = userParamValue; + } + + /// パラメタ ライズド クエリのパラメタをハッシュ テーブルに設定する。 + /// パラメタ名 + /// パラメタ値 + public void SetParameteToHt(string paramName, object paramValue) + { + // ユーザ パラメタをハッシュ テーブルに設定 + this.HtParameter[paramName] = paramValue; + } + + /// + /// ・ユーザ パラメタ(文字列置換) + /// ・パラメタ ライズド クエリのパラメタ + /// を格納するハッシュ テーブルをクリアする。 + /// + public void ClearParametersFromHt() + { + // ユーザ パラメタ(文字列置換)用ハッシュ テーブルを初期化 + this.HtUserParameter = new Hashtable(); + // パラメタ ライズド クエリのパラメタ用ハッシュ テーブルを初期化 + this.HtParameter = new Hashtable(); + } + + /// パラメタの設定(内部用) + protected void SetParametersFromHt() + { + // ユーザ パラメタ(文字列置換)を設定する。 + foreach (string userParamName in this.HtUserParameter.Keys) + { + this.SetUserParameter(userParamName, this.HtUserParameter[userParamName].ToString()); + } + + // パラメタ ライズド クエリのパラメタを設定する。 + foreach (string paramName in this.HtParameter.Keys) + { + this.SetParameter(paramName, this.HtParameter[paramName]); + } + } + + #endregion + + #region プロパティ プロシージャ(setter、getter) + + + /// id列(主キー列)に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object PK_id + { + set + { + this.HtParameter["id"] = value; + } + get + { + return this.HtParameter["id"]; + } + } + + + + /// ts列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object ts + { + set + { + this.HtParameter["ts"] = value; + } + get + { + return this.HtParameter["ts"]; + } + } + + /// val列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタを除く + public object val + { + set + { + this.HtParameter["val"] = value; + } + get + { + return this.HtParameter["val"]; + } + } + + + /// Set_id_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_id_forUPD + { + set + { + this.HtParameter["Set_id_forUPD"] = value; + } + get + { + return this.HtParameter["Set_id_forUPD"]; + } + } + + + /// Set_ts_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_ts_forUPD + { + set + { + this.HtParameter["Set_ts_forUPD"] = value; + } + get + { + return this.HtParameter["Set_ts_forUPD"]; + } + } + + + /// Set_val_forUPD列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 更新処理時のSET句で使用するパラメタ専用 + public object Set_val_forUPD + { + set + { + this.HtParameter["Set_val_forUPD"] = value; + } + get + { + return this.HtParameter["Set_val_forUPD"]; + } + } + + + + /// id_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object id_Like + { + set + { + this.HtParameter["id_Like"] = value; + } + get + { + return this.HtParameter["id_Like"]; + } + } + + + /// ts_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object ts_Like + { + set + { + this.HtParameter["ts_Like"] = value; + } + get + { + return this.HtParameter["ts_Like"]; + } + } + + + /// val_Like列に対するパラメタ ライズド クエリのパラメタを設定する。 + /// 動的参照処理時のLIKE検索で使用するパラメタ専用 + public object val_Like + { + set + { + this.HtParameter["val_Like"] = value; + } + get + { + return this.HtParameter["val_Like"]; + } + } + + + #endregion + + #region クエリ メソッド + + #region Insert + + /// 1レコード挿入する。 + /// 挿入された行の数 + public int S1_Insert() + { + // ファイルからSQL(Insert)を設定する。 + this.SetSqlByFile2("Daots_test_tableC_S1_Insert.sql"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Insert)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 1レコード挿入する。 + /// 挿入された行の数 + /// パラメタで指定した列のみ挿入値が有効になる。 + public int D1_Insert() + { + // ファイルからSQL(DynIns)を設定する。 + this.SetSqlByFile2("Daots_test_tableC_D1_Insert.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynIns)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Select + + /// 主キーを指定し、1レコード参照する。 + /// 結果を格納するDataTable + public void S2_Select(DataTable dt) + { + // ファイルからSQL(Select)を設定する。 + this.SetSqlByFile2("Daots_test_tableC_S2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Select)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + /// 検索条件を指定し、結果セットを参照する。 + /// 結果を格納するDataTable + public void D2_Select(DataTable dt) + { + // ファイルからSQL(DynSel)を設定する。 + this.SetSqlByFile2("Daots_test_tableC_D2_Select.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynSel)を実行し、戻り値を戻す。 + this.ExecSelectFill_DT(dt); + } + + #endregion + + #region Update + + /// 主キーを指定し、1レコード更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int S3_Update() + { + // ファイルからSQL(Update)を設定する。 + this.SetSqlByFile2("Daots_test_tableC_S3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Update)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを更新する。 + /// 更新された行の数 + /// パラメタで指定した列のみ更新値が有効になる。 + public int D3_Update() + { + // ファイルからSQL(DynUpd)を設定する。 + this.SetSqlByFile2("Daots_test_tableC_D3_Update.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynUpd)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region Delete + + /// 主キーを指定し、1レコード削除する。 + /// 削除された行の数 + public int S4_Delete() + { + // ファイルからSQL(Delete)を設定する。 + this.SetSqlByFile2("Daots_test_tableC_S4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(Delete)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + /// 任意の検索条件でデータを削除する。 + /// 削除された行の数 + public int D4_Delete() + { + // ファイルからSQL(DynDel)を設定する。 + this.SetSqlByFile2("Daots_test_tableC_D4_Delete.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(DynDel)を実行し、戻り値を戻す。 + return this.ExecInsUpDel_NonQuery(); + } + + #endregion + + #region 拡張メソッド + + /// テーブルのレコード件数を取得する + /// テーブルのレコード件数 + public object D5_SelCnt() + { + // ファイルからSQL(DynSelCnt)を設定する。 + this.SetSqlByFile2("Daots_test_tableC_D5_SelCnt.xml"); + + // パラメタの設定 + this.SetParametersFromHt(); + + // SQL(SELECT COUNT)を実行し、戻り値を戻す。 + return this.ExecSelectScalar(); + } + + /// 静的SQLを生成する。 + /// ファイル名 + /// SQLユーティリティ + /// 生成した静的SQL + public string ExecGenerateSQL(string fileName, SQLUtility sqlUtil) + { + // ファイルからSQLを設定する。 + this.SetSqlByFile2(fileName); + + // パラメタの設定 + this.SetParametersFromHt(); + + return base.ExecGenerateSQL(sqlUtil); + } + + #endregion + + #endregion +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D1_Insert.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D1_Insert.xml new file mode 100644 index 000000000..0bab94bac --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D1_Insert.xml @@ -0,0 +1,25 @@ + + + -- Daots_test_tableC_D1_Insert + -- 2014/2/9 日立 太郎 + INSERT INTO + [ts_test_tableC] + ( + + [id], + [ts], + [val], + + ) + VALUES + ( + + @id, + @ts, + @val, + + ) + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D2_Select.xml new file mode 100644 index 000000000..7fb190d2d --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D2_Select.xml @@ -0,0 +1,20 @@ + + + -- Daots_test_tableC_D2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [ts], + [val] + FROM + [ts_test_tableC] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D3_Update.xml new file mode 100644 index 000000000..bb52a4fbb --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D3_Update.xml @@ -0,0 +1,19 @@ + + + -- Daots_test_tableC_D3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_tableC] + SET + + [id] = @Set_id_forUPD, + [ts] = @Set_ts_forUPD, + [val] = @Set_val_forUPD, + + + WHERE + AND [id] = @idAND [id] IS NULL + AND [ts] = @tsAND [ts] IS NULL + AND [val] = @valAND [val] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D4_Delete.xml new file mode 100644 index 000000000..eb61ce656 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D4_Delete.xml @@ -0,0 +1,13 @@ + + + -- Daots_test_tableC_D4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_tableC] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [ts] = @tsAND [ts] IS NULL + AND [val] = @valAND [val] IS NULL + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D5_SelCnt.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D5_SelCnt.xml new file mode 100644 index 000000000..cf42694d9 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_D5_SelCnt.xml @@ -0,0 +1,18 @@ + + + -- Daots_test_tableC_D5_SelCnt + -- 2014/2/9 日立 太郎 + SELECT + COUNT(*) + FROM + [ts_test_tableC] + + WHERE + AND [id] = @idAND [id] IS NULL + AND [id] LIKE @id_Like + AND [ts] = @tsAND [ts] IS NULL + AND [ts] LIKE @ts_Like + AND [val] = @valAND [val] IS NULL + AND [val] LIKE @val_Like + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S1_Insert.sql b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S1_Insert.sql new file mode 100644 index 000000000..4a0659997 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S1_Insert.sql @@ -0,0 +1,12 @@ +-- Daots_test_tableC_S1_Insert +-- 2014/2/9 日立 太郎 +-- id, tsを消してます。 +INSERT INTO + [ts_test_tableC] + ( + [val] + ) +VALUES + ( + @val + ) diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S2_Select.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S2_Select.xml new file mode 100644 index 000000000..f85c240f5 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S2_Select.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_tableC_S2_Select + -- 2014/2/9 日立 太郎 + SELECT + [id], + [ts], + [val] + FROM + [ts_test_tableC] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S3_Update.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S3_Update.xml new file mode 100644 index 000000000..96984d10c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S3_Update.xml @@ -0,0 +1,16 @@ + + + -- Daots_test_tableC_S3_Update + -- 2014/2/9 日立 太郎 + UPDATE + [ts_test_tableC] + SET + + [id] = @Set_id_forUPD, + [ts] = @Set_ts_forUPD, + [val] = @Set_val_forUPD, + + WHERE + [id] = @id + AND [ts] = @ts + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S4_Delete.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S4_Delete.xml new file mode 100644 index 000000000..51706668c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Dao/Daots_test_tableC_S4_Delete.xml @@ -0,0 +1,12 @@ + + + -- Daots_test_tableC_S4_Delete + -- 2014/2/9 日立 太郎 + DELETE FROM + [ts_test_tableC] + + WHERE + [id] = @id + AND [ts] = @ts + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.Designer.cs new file mode 100644 index 000000000..c8d5eed67 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.Designer.cs @@ -0,0 +1,288 @@ +namespace _TimeStamp_sample +{ + partial class Form1 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.btnGetAll = new System.Windows.Forms.Button(); + this.btnClear = new System.Windows.Forms.Button(); + this.txtID = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.cmbTSColType = new System.Windows.Forms.ComboBox(); + this.cmbTableType = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.txtVAL = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.txtTS = new System.Windows.Forms.TextBox(); + this.btnInsert = new System.Windows.Forms.Button(); + this.btnSelect = new System.Windows.Forms.Button(); + this.btnUpdate = new System.Windows.Forms.Button(); + this.btnDelete = new System.Windows.Forms.Button(); + this.btnDynDel = new System.Windows.Forms.Button(); + this.btnDynUpd = new System.Windows.Forms.Button(); + this.btnDynIns = new System.Windows.Forms.Button(); + this.btnDynSel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.btnClearTS = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + resources.ApplyResources(this.dataGridView1, "dataGridView1"); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.RowTemplate.Height = 21; + // + // btnGetAll + // + resources.ApplyResources(this.btnGetAll, "btnGetAll"); + this.btnGetAll.Name = "btnGetAll"; + this.btnGetAll.UseVisualStyleBackColor = true; + this.btnGetAll.Click += new System.EventHandler(this.btnGetAll_Click); + // + // btnClear + // + resources.ApplyResources(this.btnClear, "btnClear"); + this.btnClear.Name = "btnClear"; + this.btnClear.UseVisualStyleBackColor = true; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // txtID + // + resources.ApplyResources(this.txtID, "txtID"); + this.txtID.Name = "txtID"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // cmbTSColType + // + this.cmbTSColType.FormattingEnabled = true; + this.cmbTSColType.Items.AddRange(new object[] { + resources.GetString("cmbTSColType.Items"), + resources.GetString("cmbTSColType.Items1")}); + resources.ApplyResources(this.cmbTSColType, "cmbTSColType"); + this.cmbTSColType.Name = "cmbTSColType"; + // + // cmbTableType + // + this.cmbTableType.FormattingEnabled = true; + this.cmbTableType.Items.AddRange(new object[] { + resources.GetString("cmbTableType.Items"), + resources.GetString("cmbTableType.Items1"), + resources.GetString("cmbTableType.Items2")}); + resources.ApplyResources(this.cmbTableType, "cmbTableType"); + this.cmbTableType.Name = "cmbTableType"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // txtVAL + // + resources.ApplyResources(this.txtVAL, "txtVAL"); + this.txtVAL.Name = "txtVAL"; + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // txtTS + // + resources.ApplyResources(this.txtTS, "txtTS"); + this.txtTS.Name = "txtTS"; + this.txtTS.ReadOnly = true; + // + // btnInsert + // + resources.ApplyResources(this.btnInsert, "btnInsert"); + this.btnInsert.Name = "btnInsert"; + this.btnInsert.UseVisualStyleBackColor = true; + this.btnInsert.Click += new System.EventHandler(this.btnInsert_Click); + // + // btnSelect + // + resources.ApplyResources(this.btnSelect, "btnSelect"); + this.btnSelect.Name = "btnSelect"; + this.btnSelect.UseVisualStyleBackColor = true; + this.btnSelect.Click += new System.EventHandler(this.btnSelect_Click); + // + // btnUpdate + // + resources.ApplyResources(this.btnUpdate, "btnUpdate"); + this.btnUpdate.Name = "btnUpdate"; + this.btnUpdate.UseVisualStyleBackColor = true; + this.btnUpdate.Click += new System.EventHandler(this.btnUpdate_Click); + // + // btnDelete + // + resources.ApplyResources(this.btnDelete, "btnDelete"); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.UseVisualStyleBackColor = true; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // btnDynDel + // + resources.ApplyResources(this.btnDynDel, "btnDynDel"); + this.btnDynDel.Name = "btnDynDel"; + this.btnDynDel.UseVisualStyleBackColor = true; + this.btnDynDel.Click += new System.EventHandler(this.btnDynDel_Click); + // + // btnDynUpd + // + resources.ApplyResources(this.btnDynUpd, "btnDynUpd"); + this.btnDynUpd.Name = "btnDynUpd"; + this.btnDynUpd.UseVisualStyleBackColor = true; + this.btnDynUpd.Click += new System.EventHandler(this.btnDynUpd_Click); + // + // btnDynIns + // + resources.ApplyResources(this.btnDynIns, "btnDynIns"); + this.btnDynIns.Name = "btnDynIns"; + this.btnDynIns.UseVisualStyleBackColor = true; + this.btnDynIns.Click += new System.EventHandler(this.btnDynIns_Click); + // + // btnDynSel + // + resources.ApplyResources(this.btnDynSel, "btnDynSel"); + this.btnDynSel.Name = "btnDynSel"; + this.btnDynSel.UseVisualStyleBackColor = true; + this.btnDynSel.Click += new System.EventHandler(this.btnDynSel_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.btnInsert); + this.groupBox1.Controls.Add(this.btnSelect); + this.groupBox1.Controls.Add(this.btnUpdate); + this.groupBox1.Controls.Add(this.btnDelete); + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.btnDynIns); + this.groupBox2.Controls.Add(this.btnDynSel); + this.groupBox2.Controls.Add(this.btnDynDel); + this.groupBox2.Controls.Add(this.btnDynUpd); + resources.ApplyResources(this.groupBox2, "groupBox2"); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.TabStop = false; + // + // btnClearTS + // + resources.ApplyResources(this.btnClearTS, "btnClearTS"); + this.btnClearTS.Name = "btnClearTS"; + this.btnClearTS.UseVisualStyleBackColor = true; + this.btnClearTS.Click += new System.EventHandler(this.btnClearTS_Click); + // + // Form1 + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.btnClearTS); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.label5); + this.Controls.Add(this.txtTS); + this.Controls.Add(this.label4); + this.Controls.Add(this.txtVAL); + this.Controls.Add(this.label3); + this.Controls.Add(this.cmbTableType); + this.Controls.Add(this.label2); + this.Controls.Add(this.cmbTSColType); + this.Controls.Add(this.label1); + this.Controls.Add(this.txtID); + this.Controls.Add(this.btnClear); + this.Controls.Add(this.btnGetAll); + this.Controls.Add(this.dataGridView1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.Button btnGetAll; + private System.Windows.Forms.Button btnClear; + private System.Windows.Forms.TextBox txtID; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox cmbTSColType; + private System.Windows.Forms.ComboBox cmbTableType; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox txtVAL; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox txtTS; + private System.Windows.Forms.Button btnInsert; + private System.Windows.Forms.Button btnSelect; + private System.Windows.Forms.Button btnUpdate; + private System.Windows.Forms.Button btnDelete; + private System.Windows.Forms.Button btnDynDel; + private System.Windows.Forms.Button btnDynUpd; + private System.Windows.Forms.Button btnDynIns; + private System.Windows.Forms.Button btnDynSel; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Button btnClearTS; + + } +} + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.cs new file mode 100644 index 000000000..4f0695d82 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.cs @@ -0,0 +1,864 @@ +//********************************************************************************** +//* タイムスタンプ・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form1 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* +//********************************************************************************** + +using System; +using System.Data; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.Util; +using Touryo.Infrastructure.Public.Db; +using Touryo.Infrastructure.Public.Util; + +namespace _TimeStamp_sample +{ + /// サンプル アプリ画面 + public partial class Form1 : Form + { + // タイムスタンプ オブジェクトの格納 + private object ts; + + #region データアクセス + + // データアクセス制御クラス + DamSqlSvr dam = null; + + // Dao + + // datetime + // 末端 + Daots_test_table1 dao1 = null; + // 中間 + Daots_test_table2 dao2 = null; + // 先頭 + Daots_test_table3 dao3 = null; + + // timestamp + // 末端 + Daots_test_tableA daoA = null; + // 中間 + Daots_test_tableB daoB = null; + // 先頭 + Daots_test_tableC daoC = null; + + #endregion + + #region 開始-終了処理 + + /// コンストラクタ + public Form1() + { + InitializeComponent(); + } + + /// 開始処理 + private void Form1_Load(object sender, EventArgs e) + { + // イベントハンドラ + this.dataGridView1.DataError += new DataGridViewDataErrorEventHandler(DataGridView_DataError); + + // ステータス + this.cmbTSColType.SelectedIndex = 0; + this.cmbTableType.SelectedIndex = 0; + + dam = new DamSqlSvr(); + dam.Obj = new MyUserInfo("userName", Environment.MachineName); + this.dam.ConnectionOpen(GetConfigParameter.GetConnectionString("ConnectionString_SQL")); + } + + /// 終了処理 + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + this.dam.ConnectionClose(); + } + + //DataErrorイベントハンドラ + private void DataGridView_DataError(object sender, + DataGridViewDataErrorEventArgs e) + { + e.Cancel = false; + } + + #endregion + + #region 状態の取得処理 + + /// 状態の取得 + /// 状態を表す数値 + private int GetStatus() + { + if (this.cmbTSColType.Text == "RAND(float)列") + { + if (this.cmbTableType.Text == "TS列末端") { return 1; } + else if (this.cmbTableType.Text == "TS列中間") { return 2; } + else if (this.cmbTableType.Text == "TS列先頭") { return 3; } + } + else if (this.cmbTSColType.Text == "timestamp列") + { + if (this.cmbTableType.Text == "TS列末端") { return 4; } + else if (this.cmbTableType.Text == "TS列中間") { return 5; } + else if (this.cmbTableType.Text == "TS列先頭") { return 6; } + } + + throw new Exception("不明な状態です。"); + } + + #endregion + + #region テーブルチェック + + /// 全件取得 + private void btnGetAll_Click(object sender, EventArgs e) + { + DataTable dt = new DataTable(); + + if(this.GetStatus() == 1) + { + this.dao1 = new Daots_test_table1(this.dam); + this.dao1.D2_Select(dt); + } + else if (this.GetStatus() == 2) + { + this.dao2 = new Daots_test_table2(this.dam); + this.dao2.D2_Select(dt); + } + else if (this.GetStatus() == 3) + { + this.dao3 = new Daots_test_table3(this.dam); + this.dao3.D2_Select(dt); + } + else if (this.GetStatus() == 4) + { + this.daoA = new Daots_test_tableA(this.dam); + this.daoA.D2_Select(dt); + } + else if (this.GetStatus() == 5) + { + this.daoB = new Daots_test_tableB(this.dam); + this.daoB.D2_Select(dt); + } + else if (this.GetStatus() == 6) + { + this.daoC = new Daots_test_tableC(this.dam); + this.daoC.D2_Select(dt); + } + + this.dataGridView1.DataSource = dt; + + } + + /// クリア + private void btnClear_Click(object sender, EventArgs e) + { + this.dataGridView1.DataSource = null; + } + + #endregion + + /// タイムスタンプを消す + private void btnClearTS_Click(object sender, EventArgs e) + { + this.txtTS.Text = ""; + this.ts = null; + } + + #region Insert + + /// Insert + private void btnInsert_Click(object sender, EventArgs e) + { + // 挿入(静的) + // ・id :オートインクリメントのため不要 + // ・val:必須 + // ・ts :自動更新(dao同梱)のため不要 + if (this.GetStatus() == 1) + { + this.dao1 = new Daots_test_table1(this.dam); + + //this.dao1.PK_id = int.Parse(this.txtID.Text); + this.dao1.val = this.txtVAL.Text; + //this.dao1.ts = this.txtTS.Text; + + this.dao1.S1_Insert(); + } + else if (this.GetStatus() == 2) + { + this.dao2 = new Daots_test_table2(this.dam); + + //this.dao2.PK_id = int.Parse(this.txtID.Text); + this.dao2.val = this.txtVAL.Text; + //this.dao2.ts = this.txtTS.Text; + + this.dao2.S1_Insert(); + } + else if (this.GetStatus() == 3) + { + this.dao3 = new Daots_test_table3(this.dam); + + //this.dao3.PK_id = int.Parse(this.txtID.Text); + this.dao3.val = this.txtVAL.Text; + //this.dao3.ts = this.txtTS.Text; + + this.dao3.S1_Insert(); + } + else if (this.GetStatus() == 4) + { + this.daoA = new Daots_test_tableA(this.dam); + + //this.daoA.PK_id = int.Parse(this.txtID.Text); + this.daoA.val = this.txtVAL.Text; + //this.daoA.ts = this.txtTS.Text; + + this.daoA.S1_Insert(); + } + else if (this.GetStatus() == 5) + { + this.daoB = new Daots_test_tableB(this.dam); + + //this.daoB.PK_id = int.Parse(this.txtID.Text); + this.daoB.val = this.txtVAL.Text; + //this.daoB.ts = this.txtTS.Text; + + this.daoB.S1_Insert(); + } + else if (this.GetStatus() == 6) + { + this.daoC = new Daots_test_tableC(this.dam); + + //this.daoC.PK_id = int.Parse(this.txtID.Text); + this.daoC.val = this.txtVAL.Text; + //this.daoC.ts = this.txtTS.Text; + + this.daoC.S1_Insert(); + } + + // 更新 + this.btnGetAll_Click(sender, e); + } + + #endregion + + #region Select + + /// Select + private void btnSelect_Click(object sender, EventArgs e) + { + int id = 0; + DataTable dt = new DataTable(); + + if (int.TryParse(this.txtID.Text, out id)) { } + else + { + MessageBox.Show("IDの値が不正です。"); + return; + } + + // 参照(静的) + // ・id :静的 + // ・val:なし + // ・ts :動的 + if (this.GetStatus() == 1) + { + this.dao1 = new Daots_test_table1(this.dam); + + this.dao1.PK_id = id; + //this.dao1.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao1.ts = this.ts; } + + this.dao1.S2_Select(dt); + } + else if (this.GetStatus() == 2) + { + this.dao2 = new Daots_test_table2(this.dam); + + this.dao2.PK_id = id; + //this.dao2.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao2.ts = this.ts; } + + this.dao2.S2_Select(dt); + } + else if (this.GetStatus() == 3) + { + this.dao3 = new Daots_test_table3(this.dam); + + this.dao3.PK_id = id; + //this.dao3.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao3.ts = this.ts; } + + this.dao3.S2_Select(dt); + } + else if (this.GetStatus() == 4) + { + this.daoA = new Daots_test_tableA(this.dam); + + this.daoA.PK_id = id; + //this.daoA.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoA.ts = this.ts; } + + this.daoA.S2_Select(dt); + } + else if (this.GetStatus() == 5) + { + this.daoB = new Daots_test_tableB(this.dam); + + this.daoB.PK_id = id; + //this.daoB.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoB.ts = this.ts; } + + this.daoB.S2_Select(dt); + } + else if (this.GetStatus() == 6) + { + this.daoC = new Daots_test_tableC(this.dam); + + this.daoC.PK_id = id; + //this.daoC.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoC.ts = this.ts; } + + this.daoC.S2_Select(dt); + } + + // 表示 + if (dt.Rows.Count != 0) + { + this.txtID.Text = dt.Rows[0]["id"].ToString(); + this.txtVAL.Text = dt.Rows[0]["val"].ToString(); + + // 文字列化の方法 + if (dt.Rows[0]["ts"].ToString() == "System.Byte[]") + { + // timestamp + this.txtTS.Text = BitConverter.ToString((byte[])dt.Rows[0]["ts"]); + } + else + { + // timeticks + this.txtTS.Text = dt.Rows[0]["ts"].ToString(); + } + + // → 文字列化 → バイト化とか解らんので退避しておく・・・ + this.ts = dt.Rows[0]["ts"]; + } + else + { + this.txtID.Text = ""; + this.txtVAL.Text = ""; + this.txtTS.Text = ""; + this.ts = null; + } + } + + #endregion + + #region Update + + /// Update + private void btnUpdate_Click(object sender, EventArgs e) + { + int id = 0; + + if (int.TryParse(this.txtID.Text, out id)) { } + else + { + MessageBox.Show("IDの値が不正です。"); + return; + } + + // 更新(静的) + // ・id :検索条件(静的) + // ・val:更新値・機械的に指定(パラメタが0個になるので) + // ・ts :検索条件(動的) + if (this.GetStatus() == 1) + { + this.dao1 = new Daots_test_table1(this.dam); + + this.dao1.PK_id = id; + this.dao1.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao1.ts = this.ts; } + + this.dao1.S3_Update(); + } + else if (this.GetStatus() == 2) + { + this.dao2 = new Daots_test_table2(this.dam); + + this.dao2.PK_id = id; + this.dao2.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao2.ts = this.ts; } + + this.dao2.S3_Update(); + } + else if (this.GetStatus() == 3) + { + this.dao3 = new Daots_test_table3(this.dam); + + this.dao3.PK_id = id; + this.dao3.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao3.ts = this.ts; } + + this.dao3.S3_Update(); + } + else if (this.GetStatus() == 4) + { + this.daoA = new Daots_test_tableA(this.dam); + + this.daoA.PK_id = id; + this.daoA.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoA.ts = this.ts; } + + this.daoA.S3_Update(); + } + else if (this.GetStatus() == 5) + { + this.daoB = new Daots_test_tableB(this.dam); + + this.daoB.PK_id = id; + this.daoB.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoB.ts = this.ts; } + + this.daoB.S3_Update(); + } + else if (this.GetStatus() == 6) + { + this.daoC = new Daots_test_tableC(this.dam); + + this.daoC.PK_id = id; + this.daoC.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoC.ts = this.ts; } + + this.daoC.S3_Update(); + } + + // 更新 + this.btnGetAll_Click(sender, e); + } + + #endregion + + #region Delete + + /// Delete + private void btnDelete_Click(object sender, EventArgs e) + { + int id = 0; + DataTable dt = new DataTable(); + + if (int.TryParse(this.txtID.Text, out id)) { } + else + { + MessageBox.Show("IDの値が不正です。"); + return; + } + + // 削除(静的) + // ・id :静的 + // ・val:なし + // ・ts :動的 + if (this.GetStatus() == 1) + { + this.dao1 = new Daots_test_table1(this.dam); + + this.dao1.PK_id = id; + //this.dao1.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao1.ts = this.ts; } + + this.dao1.S4_Delete(); + } + else if (this.GetStatus() == 2) + { + this.dao2 = new Daots_test_table2(this.dam); + + this.dao2.PK_id = id; + //this.dao2.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao2.ts = this.ts; } + + this.dao2.S4_Delete(); + } + else if (this.GetStatus() == 3) + { + this.dao3 = new Daots_test_table3(this.dam); + + this.dao3.PK_id = id; + //this.dao3.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao3.ts = this.ts; } + + this.dao3.S4_Delete(); + } + else if (this.GetStatus() == 4) + { + this.daoA = new Daots_test_tableA(this.dam); + + this.daoA.PK_id = id; + //this.daoA.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoA.ts = this.ts; } + + this.daoA.S4_Delete(); + } + else if (this.GetStatus() == 5) + { + this.daoB = new Daots_test_tableB(this.dam); + + this.daoB.PK_id = id; + //this.daoB.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoB.ts = this.ts; } + + this.daoB.S4_Delete(); + } + else if (this.GetStatus() == 6) + { + this.daoC = new Daots_test_tableC(this.dam); + + this.daoC.PK_id = id; + //this.daoC.val = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoC.ts = this.ts; } + + this.daoC.S4_Delete(); + } + + // 更新 + this.btnGetAll_Click(sender, e); + } + + #endregion + + #region DynIns + + /// DynIns + private void btnDynIns_Click(object sender, EventArgs e) + { + // 挿入(動的) + // ・id :オートインクリメントのため不要 + // ・val:機械的に指定(パラメタが0個になるので) + // ・ts :自動更新(dao同梱)のため不要 + if (this.GetStatus() == 1) + { + this.dao1 = new Daots_test_table1(this.dam); + + //this.dao1.PK_id = int.Parse(this.txtID.Text); + this.dao1.val = this.txtVAL.Text; + //this.dao1.ts = this.txtTS.Text; + + this.dao1.D1_Insert(); + } + else if (this.GetStatus() == 2) + { + this.dao2 = new Daots_test_table2(this.dam); + + //this.dao2.PK_id = int.Parse(this.txtID.Text); + this.dao2.val = this.txtVAL.Text; + //this.dao2.ts = this.txtTS.Text; + + this.dao2.D1_Insert(); + } + else if (this.GetStatus() == 3) + { + this.dao3 = new Daots_test_table3(this.dam); + + //this.dao3.PK_id = int.Parse(this.txtID.Text); + this.dao3.val = this.txtVAL.Text; + //this.dao3.ts = this.txtTS.Text; + + this.dao3.D1_Insert(); + } + else if (this.GetStatus() == 4) + { + this.daoA = new Daots_test_tableA(this.dam); + + //this.daoA.PK_id = int.Parse(this.txtID.Text); + this.daoA.val = this.txtVAL.Text; + //this.daoA.ts = this.txtTS.Text; + + this.daoA.D1_Insert(); + } + else if (this.GetStatus() == 5) + { + this.daoB = new Daots_test_tableB(this.dam); + + //this.daoB.PK_id = int.Parse(this.txtID.Text); + this.daoB.val = this.txtVAL.Text; + //this.daoB.ts = this.txtTS.Text; + + this.daoB.D1_Insert(); + } + else if (this.GetStatus() == 6) + { + this.daoC = new Daots_test_tableC(this.dam); + + //this.daoC.PK_id = int.Parse(this.txtID.Text); + this.daoC.val = this.txtVAL.Text; + //this.daoC.ts = this.txtTS.Text; + + this.daoC.D1_Insert(); + } + + // 更新 + this.btnGetAll_Click(sender, e); + } + + #endregion + + #region DynSel + + /// DynSel + private void btnDynSel_Click(object sender, EventArgs e) + { + int id = 0; + bool flg = false; + + DataTable dt = new DataTable(); + + flg = int.TryParse(this.txtID.Text, out id); + + // 参照(動的) + // ・id :動的 + // ・val:動的 + // ・ts :動的 + if (this.GetStatus() == 1) + { + this.dao1 = new Daots_test_table1(this.dam); + + if (flg) { this.dao1.PK_id = id; } + if (this.txtVAL.Text != "") { this.dao1.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.dao1.ts = this.ts; } + + this.dao1.D2_Select(dt); + } + else if (this.GetStatus() == 2) + { + this.dao2 = new Daots_test_table2(this.dam); + + if (flg) { this.dao2.PK_id = id; } + if (this.txtVAL.Text != "") { this.dao2.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.dao2.ts = this.ts; } + + this.dao2.D2_Select(dt); + } + else if (this.GetStatus() == 3) + { + this.dao3 = new Daots_test_table3(this.dam); + + if (flg) { this.dao3.PK_id = id; } + if (this.txtVAL.Text != "") { this.dao3.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.dao3.ts = this.ts; } + + this.dao3.D2_Select(dt); + } + else if (this.GetStatus() == 4) + { + this.daoA = new Daots_test_tableA(this.dam); + + if (flg) { this.daoA.PK_id = id; } + if (this.txtVAL.Text != "") { this.daoA.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.daoA.ts = this.ts; } + + this.daoA.D2_Select(dt); + } + else if (this.GetStatus() == 5) + { + this.daoB = new Daots_test_tableB(this.dam); + + if (flg) { this.daoB.PK_id = id; } + if (this.txtVAL.Text != "") { this.daoB.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.daoB.ts = this.ts; } + + this.daoB.D2_Select(dt); + } + else if (this.GetStatus() == 6) + { + this.daoC = new Daots_test_tableC(this.dam); + + if (flg) { this.daoC.PK_id = id; } + if (this.txtVAL.Text != "") { this.daoC.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.daoC.ts = this.ts; } + + this.daoC.D2_Select(dt); + } + + this.dataGridView1.DataSource = dt; + } + + #endregion + + #region DynUpd + + /// DynUpd + private void btnDynUpd_Click(object sender, EventArgs e) + { + int id = 0; + + if (int.TryParse(this.txtID.Text, out id)) { } + else + { + MessageBox.Show("IDの値が不正です。"); + return; + } + + // 更新(動的) + // ・id :検索条件(静的) + // ・val:更新値・機械的に指定(パラメタが0個になるので) + // ・ts :検索条件(動的) + if (this.GetStatus() == 1) + { + this.dao1 = new Daots_test_table1(this.dam); + + this.dao1.PK_id = id; + this.dao1.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao1.ts = this.ts; } + + this.dao1.D3_Update(); + } + else if (this.GetStatus() == 2) + { + this.dao2 = new Daots_test_table2(this.dam); + + this.dao2.PK_id = id; + this.dao2.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao2.ts = this.ts; } + + this.dao2.D3_Update(); + } + else if (this.GetStatus() == 3) + { + this.dao3 = new Daots_test_table3(this.dam); + + this.dao3.PK_id = id; + this.dao3.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.dao3.ts = this.ts; } + + this.dao3.D3_Update(); + } + else if (this.GetStatus() == 4) + { + this.daoA = new Daots_test_tableA(this.dam); + + this.daoA.PK_id = id; + this.daoA.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoA.ts = this.ts; } + + this.daoA.D3_Update(); + } + else if (this.GetStatus() == 5) + { + this.daoB = new Daots_test_tableB(this.dam); + + this.daoB.PK_id = id; + this.daoB.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoB.ts = this.ts; } + + this.daoB.D3_Update(); + } + else if (this.GetStatus() == 6) + { + this.daoC = new Daots_test_tableC(this.dam); + + this.daoC.PK_id = id; + this.daoC.Set_val_forUPD = this.txtVAL.Text; + if (this.txtTS.Text != "") { this.daoC.ts = this.ts; } + + this.daoC.D3_Update(); + } + + // 更新 + this.btnGetAll_Click(sender, e); + } + + #endregion + + #region DynDel + + /// DynDel + private void btnDynDel_Click(object sender, EventArgs e) + { + int id = 0; + bool flg = false; + + flg = int.TryParse(this.txtID.Text, out id); + + // 削除(動的) + // ・id :動的 + // ・val:動的 + // ・ts :動的 + if (this.GetStatus() == 1) + { + this.dao1 = new Daots_test_table1(this.dam); + + if (flg) { this.dao1.PK_id = id; } + if (this.txtVAL.Text != "") { this.dao1.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.dao1.ts = this.ts; } + + this.dao1.D4_Delete(); + } + else if (this.GetStatus() == 2) + { + this.dao2 = new Daots_test_table2(this.dam); + + if (flg) { this.dao2.PK_id = id; } + if (this.txtVAL.Text != "") { this.dao2.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.dao2.ts = this.ts; } + + this.dao2.D4_Delete(); + } + else if (this.GetStatus() == 3) + { + this.dao3 = new Daots_test_table3(this.dam); + + if (flg) { this.dao3.PK_id = id; } + if (this.txtVAL.Text != "") { this.dao3.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.dao3.ts = this.ts; } + + this.dao3.D4_Delete(); + } + else if (this.GetStatus() == 4) + { + this.daoA = new Daots_test_tableA(this.dam); + + if (flg) { this.daoA.PK_id = id; } + if (this.txtVAL.Text != "") { this.daoA.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.daoA.ts = this.ts; } + + this.daoA.D4_Delete(); + } + else if (this.GetStatus() == 5) + { + this.daoB = new Daots_test_tableB(this.dam); + + if (flg) { this.daoB.PK_id = id; } + if (this.txtVAL.Text != "") { this.daoB.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.daoB.ts = this.ts; } + + this.daoB.D4_Delete(); + } + else if (this.GetStatus() == 6) + { + this.daoC = new Daots_test_tableC(this.dam); + + if (flg) { this.daoC.PK_id = id; } + if (this.txtVAL.Text != "") { this.daoC.val = this.txtVAL.Text; } + if (this.txtTS.Text != "") { this.daoC.ts = this.ts; } + + this.daoC.D4_Delete(); + } + + // 更新 + this.btnGetAll_Click(sender, e); + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.resx b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.resx new file mode 100644 index 000000000..cd74fe695 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Form1.resx @@ -0,0 +1,771 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 191, 48 + + + 463, 329 + + + + 0 + + + dataGridView1 + + + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 15 + + + 191, 383 + + + 463, 23 + + + 1 + + + 全件取得(DnySel) + + + btnGetAll + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 14 + + + + NoControl + + + 191, 412 + + + 463, 23 + + + 2 + + + クリア + + + btnClear + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 13 + + + 51, 47 + + + 129, 19 + + + 3 + + + txtID + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 12 + + + True + + + 12, 12 + + + 49, 12 + + + 4 + + + TS列種: + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 11 + + + RAND(float)列 + + + timestamp列 + + + 67, 9 + + + 121, 20 + + + 5 + + + cmbTSColType + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + + + TS列末端 + + + TS列中間 + + + TS列先頭 + + + 290, 9 + + + 121, 20 + + + 7 + + + cmbTableType + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + True + + + NoControl + + + 223, 12 + + + 61, 12 + + + 6 + + + テーブル種: + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + True + + + NoControl + + + 12, 50 + + + 22, 12 + + + 8 + + + ID: + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + True + + + NoControl + + + 12, 75 + + + 33, 12 + + + 10 + + + VAL: + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + 51, 72 + + + 129, 19 + + + 9 + + + txtVAL + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + True + + + NoControl + + + 12, 100 + + + 25, 12 + + + 12 + + + TS: + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 51, 97 + + + 129, 19 + + + 11 + + + txtTS + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + NoControl + + + 15, 18 + + + 136, 23 + + + 13 + + + Insert + + + btnInsert + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + NoControl + + + 15, 47 + + + 136, 23 + + + 14 + + + Select + + + btnSelect + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + NoControl + + + 15, 76 + + + 136, 23 + + + 15 + + + Update + + + btnUpdate + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 2 + + + NoControl + + + 15, 105 + + + 136, 23 + + + 16 + + + Delete + + + btnDelete + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + + + NoControl + + + 15, 105 + + + 136, 23 + + + 20 + + + DynDel + + + btnDynDel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 2 + + + NoControl + + + 15, 76 + + + 136, 23 + + + 19 + + + DynUpd + + + btnDynUpd + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 3 + + + NoControl + + + 15, 18 + + + 136, 23 + + + 17 + + + DynIns + + + btnDynIns + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 0 + + + NoControl + + + 15, 47 + + + 136, 23 + + + 18 + + + DynSel → + + + btnDynSel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 1 + + + 14, 163 + + + 166, 138 + + + 22 + + + 静的(主キー必須) + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 14, 307 + + + 166, 138 + + + 23 + + + 動的 + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + NoControl + + + 12, 122 + + + 168, 23 + + + 24 + + + TSをクリア + + + btnClearTS + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 12 + + + 678, 469 + + + Form1 + + + Form1 + + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/MSGDefinition.xml new file mode 100644 index 000000000..f2283b409 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/MSGDefinition.xml @@ -0,0 +1,23 @@ + + + + +]> + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Program.cs new file mode 100644 index 000000000..93cd86e88 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Program.cs @@ -0,0 +1,38 @@ +//********************************************************************************** +//* タイムスタンプ・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :アプリケーションのメイン エントリ ポイント +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* +//********************************************************************************** + +using System; +using System.Windows.Forms; + +namespace _TimeStamp_sample +{ + /// アプリケーションのメイン エントリ ポイント + static class Program + { + /// アプリケーションのメイン エントリ ポイントです。 + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..0ee394be6 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Properties/AssemblyInfo.cs @@ -0,0 +1,51 @@ +//********************************************************************************** +//* タイムスタンプ・サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("TimeStamp_sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("TimeStamp_sample")] +[assembly: AssemblyCopyright("Copyright (C) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です +[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Readme.txt b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Readme.txt new file mode 100644 index 000000000..c170df815 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Readme.txt @@ -0,0 +1,2 @@ +タイムスタンプ対応をした +自動生成Daoの利用サンプル \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SPDefinition.xml new file mode 100644 index 000000000..6baf634bc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SPDefinition.xml @@ -0,0 +1,15 @@ + + + + +]> + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SampleLogConf2CS.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SampleLogConf2CS.xml new file mode 100644 index 000000000..e39f2b3fe --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SampleLogConf2CS.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj new file mode 100644 index 000000000..ff56b0027 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj @@ -0,0 +1,259 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {386EA604-40DB-44A8-87AE-F29B209BA9CF} + WinExe + Properties + _TimeStamp_sample + TimeStamp_sample + v4.6 + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll + + + False + ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.sln new file mode 100644 index 000000000..463f94c69 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.sln @@ -0,0 +1,35 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TimeStamp_sample", "TimeStamp_sample.csproj", "{386EA604-40DB-44A8-87AE-F29B209BA9CF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|.NET = Debug|.NET + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Release|.NET = Release|.NET + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|.NET.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|.NET.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.Build.0 = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/app.config new file mode 100644 index 000000000..0b92587d1 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/app.config @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From dcdc79d500e2db9c74a95e0154a3539546dd0540 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Wed, 30 Oct 2019 17:39:42 +0900 Subject: [PATCH 07/47] Now, I am fixing #328. 2CS_sample is changed to .NET Core3. --- .../2CSClientWin_sample.csproj | 170 +++++------------- .../2CSClientWin_sample.sln | 17 +- .../2CS_sample/2CSClientWin_sample/Program.cs | 4 + .../Properties/AssemblyInfo.cs | 51 ------ .../2CS_sample/2CSClientWin_sample/app.config | 83 --------- .../2CSClientWin_sample/appsettings.json | 59 ++++++ 6 files changed, 108 insertions(+), 276 deletions(-) delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Properties/AssemblyInfo.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/appsettings.json diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.csproj index 7c24c90fe..7a15d02e6 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.csproj @@ -1,144 +1,60 @@ - - + + - Debug - AnyCPU - 8.0.50727 - 2.0 - {386EA604-40DB-44A8-87AE-F29B209BA9CF} WinExe - Properties + netcoreapp3.0 + true + + _2CSClientWin_sample 2CSClientWin_sample - v4.6 - - - 2.0 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll - - - - - - + + - - - - - - - Form - - - Form1.cs - - - Form - - - Login.cs - - - - - Form - - - Splash.cs - - - Designer - Form1.cs - + + - + + + + + + + + + + + - - Always - + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.RichClient.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll + + - - Login.cs - Designer - - - Always - - + Always - - - Splash.cs - Designer - + - - + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.sln index d1b5dca28..37733c8b7 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.sln +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/2CSClientWin_sample.sln @@ -1,35 +1,22 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2CSClientWin_sample", "2CSClientWin_sample.csproj", "{386EA604-40DB-44A8-87AE-F29B209BA9CF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|.NET = Debug|.NET Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Release|.NET = Release|.NET Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|.NET.ActiveCfg = Debug|Any CPU {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|.NET.ActiveCfg = Release|Any CPU {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.ActiveCfg = Release|Any CPU {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.Build.0 = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Program.cs index b9a86142a..dfa15e4db 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Program.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Program.cs @@ -22,6 +22,7 @@ using System.Windows.Forms; using Touryo.Infrastructure.Business.RichClient.Util; +using Touryo.Infrastructure.Public.Util; namespace _2CSClientWin_sample { @@ -37,6 +38,9 @@ static class Program [STAThread] static void Main() { + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); + // 既定の処理 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Properties/AssemblyInfo.cs deleted file mode 100644 index 1393eed17..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,51 +0,0 @@ -//********************************************************************************** -//* サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("2CSClientWin_sample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("2CSClientWin_sample")] -[assembly: AssemblyCopyright("Copyright (C) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です -[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/app.config deleted file mode 100644 index f7b5dbeb2..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/app.config +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/appsettings.json b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/appsettings.json new file mode 100644 index 000000000..5c3e0d7bf --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWin_sample/appsettings.json @@ -0,0 +1,59 @@ +{ + // 2wC/SpiWindowsj + // connectionStrings section + "connectionStrings": { + // SQL Server / SQL Clientp + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;", + // Multi-DB / ODCB.NETp + "ConnectionString_ODBC": "Dsn=odbc_test1", + // Oracle / ODP.NETp + "ConnectionString_ODP": "User Id=SCOTT;Password=tiger;Data Source=localhost/XE;", + // MySQL / MySQL Connector/NETp + "ConnectionString_MCN": "Server=localhost;Database=test;User Id=root;Password=seigi@123", + // PostgreSQL / Npgsqlp + "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;" + }, + + // appSettings section + "appSettings": { + + // t[[N̎gpp[^ - start + // Rg[̃vtBbNX + "FxPrefixOfButton": "btn", + "FxPrefixOfPictureBox": "pbx", + "FxPrefixOfComboBox": "cbb", + "FxPrefixOfListBox": "lbx", + "FxPrefixOfRadioButton": "rbn", + // \[X t@C̏ꍇ + "FxXMLMSGDefinition": "MSGDefinition.xml", + "FxXMLSPDefinition": "SPDefinition.xml", + // ߍ܂ꂽ\[X̏ꍇ + // "FxXMLMSGDefinition": "_2CSClientWin_sample.MSGDefinition.xml", + // "FxXMLSPDefinition": "_2CSClientWin_sample.SPDefinition.xml", + // t[[N̎gpp[^ - end + + // ʕi̎gpp[^ - start + // Log4Net̃RtBOt@Cւ̃pX + // \[X t@C̏ꍇ + // "FxLog4NetConfFile": "SampleLogConf2CS.xml", + // ߍ܂ꂽ\[X̏ꍇ + "FxLog4NetConfFile": "_2CSClientWin_sample.SampleLogConf2CS.xml", + // cw̃ptH[}XOo͋@\onEoff + "FxSqlTraceLog": "on", + // cwSQLLbV@\onEoff + // JtF[ŶƂlāAftHgoffɐݒ + "FxSqlCacheSwitch": "off", + // cwSQL[h̃GR[fBOwishift_jisAutf-8.etcj + "FxSqlEncoding": "utf-8", + // cw̃R}h ^CAEglwibj + "FxSqlCommandTimeout": "30", + // ʕi̎gpp[^ - end + + // AvP[V̎gpp[^ - start + // SQLt@Ct@CitH_jւ̃pX + "SqlTextFilePath": "C:\\root\\files\\resource\\Sql", + // Rg[̃vtBbNXiljj + "FxPrefixOfCheckBox": "cbx" + // AvP[V̎gpp[^ - end + } +} \ No newline at end of file From c1de5b4177243c6c789d08f447e4a4e2e98cf052 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 1 Nov 2019 11:56:40 +0900 Subject: [PATCH 08/47] Now, I am fixing #328. 2CSClientWPF_sample is changed to .NET Core3. --- .../2CS_sample/2CSClientWPF_sample/app.config | 38 ++-- .../2CS_sample/2CSClientWin_sample/app.config | 2 +- .../2CSClientWPF_sample.csproj | 166 +++++------------- .../2CSClientWPF_sample.sln | 4 +- .../2CSClientWPF_sample/App.xaml.cs | 5 + .../Properties/AssemblyInfo.cs | 72 -------- .../2CS_sample/2CSClientWPF_sample/app.config | 68 ------- .../2CSClientWPF_sample/appsettings.json | 59 +++++++ 8 files changed, 130 insertions(+), 284 deletions(-) delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Properties/AssemblyInfo.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/appsettings.json diff --git a/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config b/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config index b77aa4355..65c784388 100644 --- a/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config +++ b/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config @@ -1,7 +1,7 @@ - + @@ -21,39 +21,43 @@ - + - - + + - - + + - + + - - - - - - - - - + + + + + + + + + + + + - + diff --git a/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config b/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config index f7b5dbeb2..c3564e58b 100644 --- a/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config +++ b/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config @@ -66,7 +66,7 @@ - + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.csproj index 453f1fafa..b10be52eb 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.csproj @@ -1,140 +1,58 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {F9737483-DC6C-45D1-8CB7-27138FD76D36} WinExe - Properties + netcoreapp3.0 + true _2CSClientWPF_sample 2CSClientWPF_sample - v4.6 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - - - 3.5 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + + + + + + + + + + + + + + + + + + + + + + - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.RichClient.dll - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll - - - - - - - - - - - - MSBuild:Compile - Designer - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - MSBuild:Compile - Designer - - - App.xaml - Code - - - Window1.xaml - Code - + - - - - - - - Code - - - - - - - Always - - - Always - - + Always - + - - + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.sln index 87b8b2c9b..a58a56287 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.sln +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/2CSClientWPF_sample.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2CSClientWPF_sample", "2CSClientWPF_sample.csproj", "{F9737483-DC6C-45D1-8CB7-27138FD76D36}" EndProject diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml.cs index 984744320..3b8d460e7 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/App.xaml.cs @@ -19,6 +19,8 @@ using System.Windows; +using Touryo.Infrastructure.Public.Util; + namespace _2CSClientWPF_sample { /// App.xaml の相互作用ロジック @@ -28,6 +30,9 @@ public partial class App : Application protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); + + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); } } } diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Properties/AssemblyInfo.cs deleted file mode 100644 index 646349717..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,72 +0,0 @@ -//********************************************************************************** -//* サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; -using System.Windows; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("2CSClientWPF_sample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("2CSClientWPF_sample")] -[assembly: AssemblyCopyright("Copyright (C) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -//ローカライズ可能なアプリケーションのビルドを開始するには、 -//.csproj ファイルの CultureYouAreCodingWith を -// 内部で設定します。たとえば、 -//ソース ファイルで英語を使用している場合、 を en-US に設定します。次に、 -//下の NeutralResourceLanguage 属性のコメントを解除します。下の行の "en-US" を -//プロジェクト ファイルの UICulture 設定と一致するよう更新します。 - -//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] - - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //テーマ固有のリソース ディクショナリが置かれている場所 - //(リソースがページ、 - //またはアプリケーション リソース ディクショナリに見つからない場合に使用されます) - ResourceDictionaryLocation.SourceAssembly //汎用リソース ディクショナリが置かれている場所 - //(リソースがページ、 - //アプリケーション、またはいずれのテーマ固有のリソース ディクショナリにも見つからない場合に使用されます) -)] - - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を -// 既定値にすることができます: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/app.config deleted file mode 100644 index b77aa4355..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/app.config +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/appsettings.json b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/appsettings.json new file mode 100644 index 000000000..ffa177483 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/2CSClientWPF_sample/appsettings.json @@ -0,0 +1,59 @@ +{ + // 2wC/SpiWPFj + // connectionStrings section + "connectionStrings": { + // SQL Server / SQL Clientp + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;", + // Multi-DB / ODCB.NETp + "ConnectionString_ODBC": "Dsn=odbc_test1", + // Oracle / ODP.NETp + "ConnectionString_ODP": "User Id=SCOTT;Password=tiger;Data Source=localhost/XE;", + // MySQL / MySQL Connector/NETp + "ConnectionString_MCN": "Server=localhost;Database=test;User Id=root;Password=seigi@123", + // PostgreSQL / Npgsqlp + "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;" + }, + + // appSettings section + "appSettings": { + + // t[[N̎gpp[^ - start + // Rg[̃vtBbNX + "FxPrefixOfButton": "btn", + "FxPrefixOfPictureBox": "pbx", + "FxPrefixOfComboBox": "cbb", + "FxPrefixOfListBox": "lbx", + "FxPrefixOfRadioButton": "rbn", + // \[X t@C̏ꍇ + "FxXMLMSGDefinition": "MSGDefinition.xml", + "FxXMLSPDefinition": "SPDefinition.xml", + // ߍ܂ꂽ\[X̏ꍇ + // "FxXMLMSGDefinition": "_2CSClientWPF_sample.MSGDefinition.xml", + // "FxXMLSPDefinition": "_2CSClientWPF_sample.SPDefinition.xml", + // t[[N̎gpp[^ - end + + // ʕi̎gpp[^ - start + // Log4Net̃RtBOt@Cւ̃pX + // \[X t@C̏ꍇ + // "FxLog4NetConfFile": "SampleLogConf2CS.xml", + // ߍ܂ꂽ\[X̏ꍇ + "FxLog4NetConfFile": "_2CSClientWPF_sample.SampleLogConf2CS.xml", + // cw̃ptH[}XOo͋@\onEoff + "FxSqlTraceLog": "on", + // cwSQLLbV@\onEoff + // JtF[ŶƂlāAftHgoffɐݒ + "FxSqlCacheSwitch": "off", + // cwSQL[h̃GR[fBOwishift_jisAutf-8.etcj + "FxSqlEncoding": "utf-8", + // cw̃R}h ^CAEglwibj + "FxSqlCommandTimeout": "30", + // ʕi̎gpp[^ - end + + // AvP[V̎gpp[^ - start + // SQLt@Ct@CitH_jւ̃pX + "SqlTextFilePath": "C:\\root\\files\\resource\\Sql", + // Rg[̃vtBbNXiljj + "FxPrefixOfCheckBox": "cbx" + // AvP[V̎gpp[^ - end + } +} \ No newline at end of file From e745fd0dd26ee76f9827893d0b53043551b6a61c Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 1 Nov 2019 12:58:15 +0900 Subject: [PATCH 09/47] Now, I am fixing #328. GenDaoAndBatUpd_sample is changed to .NET Core3. --- .../2CS_sample/2CSClientWPF_sample/app.config | 5 +- .../2CS_sample/2CSClientWin_sample/app.config | 4 +- .../GenDaoAndBatUpd_sample/app.config | 42 +-- .../GenDaoAndBatUpd_sample/Form1.Designer.cs | 4 +- .../GenDaoAndBatUpd_sample.csproj | 246 +++++++++--------- .../GenDaoAndBatUpd_sample.sln | 4 +- .../GenDaoAndBatUpd_sample/Program.cs | 5 + .../Properties/AssemblyInfo.cs | 51 ---- .../{Properties => }/Resources.Designer.cs | 32 +-- .../{Properties => }/Resources.resx | 2 +- .../GenDaoAndBatUpd_sample/app.config | 49 ---- .../GenDaoAndBatUpd_sample/appsettings.json | 40 +++ 12 files changed, 220 insertions(+), 264 deletions(-) delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/AssemblyInfo.cs rename root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/{Properties => }/Resources.Designer.cs (59%) rename root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/{Properties => }/Resources.resx (97%) delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/appsettings.json diff --git a/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config b/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config index 65c784388..2e1564550 100644 --- a/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config +++ b/root/programs/CS/Samples/2CS_sample/2CSClientWPF_sample/app.config @@ -30,6 +30,7 @@ + @@ -48,11 +49,11 @@ - + - + diff --git a/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config b/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config index c3564e58b..3a82195b4 100644 --- a/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config +++ b/root/programs/CS/Samples/2CS_sample/2CSClientWin_sample/app.config @@ -57,11 +57,11 @@ - + - + diff --git a/root/programs/CS/Samples/2CS_sample/GenDaoAndBatUpd_sample/app.config b/root/programs/CS/Samples/2CS_sample/GenDaoAndBatUpd_sample/app.config index b712a7713..bc4d130f6 100644 --- a/root/programs/CS/Samples/2CS_sample/GenDaoAndBatUpd_sample/app.config +++ b/root/programs/CS/Samples/2CS_sample/GenDaoAndBatUpd_sample/app.config @@ -1,40 +1,46 @@ - + - + - + - - - - + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.Designer.cs index 630749d69..c9e666686 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.Designer.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Form1.Designer.cs @@ -773,8 +773,8 @@ private void InitializeComponent() // // pictureBox1 // - this.pictureBox1.Image = global::GenDaoAndBatUpd_sample.Properties.Resources.Diagram; - this.pictureBox1.InitialImage = global::GenDaoAndBatUpd_sample.Properties.Resources.Diagram; + this.pictureBox1.Image = global::GenDaoAndBatUpd_sample.Resources.Diagram; + this.pictureBox1.InitialImage = global::GenDaoAndBatUpd_sample.Resources.Diagram; this.pictureBox1.Location = new System.Drawing.Point(3, 3); this.pictureBox1.Name = "pictureBox1"; this.pictureBox1.Size = new System.Drawing.Size(708, 552); diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.csproj index e3f456541..d24a276ea 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.csproj @@ -1,116 +1,47 @@ - - + + - Debug - AnyCPU - 8.0.50727 - 2.0 - {D40BC756-8E12-4020-8486-99F482E35DCD} WinExe - Properties + netcoreapp3.0 + true + + GenDaoAndBatUpd_sample GenDaoAndBatUpd_sample - v4.6 - - - 2.0 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll - - - - - - - + - - - - - - - - - - Form - - - Form1.cs - - - - - Designer - Form1.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always @@ -124,6 +55,9 @@ Always + + Always + Always @@ -148,6 +82,9 @@ Always + + Always + Always @@ -172,6 +109,9 @@ Always + + Always + Always @@ -184,24 +124,88 @@ Always - - - Always - Always - - Always + + + + + + + + + + + + + + + + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.RichClient.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll + + + + + + + + + + Never + + + Never + + + Never + + + True + True + Resource.resx + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resource.Designer.cs + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + Always + + + Always + - - - + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.sln index 161cf10e5..c828a4cef 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.sln +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/GenDaoAndBatUpd_sample.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenDaoAndBatUpd_sample", "GenDaoAndBatUpd_sample.csproj", "{D40BC756-8E12-4020-8486-99F482E35DCD}" EndProject diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Program.cs index 16b1c5001..83b83f12a 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Program.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Program.cs @@ -21,6 +21,8 @@ using System; using System.Windows.Forms; +using Touryo.Infrastructure.Public.Util; + namespace GenDaoAndBatUpd_sample { /// アプリケーションのメイン エントリ ポイント @@ -30,6 +32,9 @@ static class Program [STAThread] static void Main() { + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/AssemblyInfo.cs deleted file mode 100644 index 3232cb51c..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,51 +0,0 @@ -//********************************************************************************** -//* バッチ更新処理・サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("GenDaoAndBatUpd_sample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("GenDaoAndBatUpd_sample")] -[assembly: AssemblyCopyright("Copyright (C) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です -[assembly: Guid("7492259c-e778-4c4c-af6e-cb1c500a175f")] - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Resources.Designer.cs similarity index 59% rename from root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.Designer.cs rename to root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Resources.Designer.cs index c63bb41ed..75b5810ce 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.Designer.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Resources.Designer.cs @@ -1,25 +1,25 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// このコードはツールによって生成されました。 +// ランタイム バージョン:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 +// コードが再生成されるときに損失したりします。 // //------------------------------------------------------------------------------ -namespace GenDaoAndBatUpd_sample.Properties { +namespace GenDaoAndBatUpd_sample { using System; /// - /// A strongly-typed resource class, for looking up localized strings, etc. + /// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。 /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + // このクラスは StronglyTypedResourceBuilder クラスが ResGen + // または Visual Studio のようなツールを使用して自動生成されました。 + // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に + // ResGen を実行し直すか、または VS プロジェクトをビルドし直します。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -33,13 +33,13 @@ internal Resources() { } /// - /// Returns the cached ResourceManager instance used by this class. + /// このクラスで使用されているキャッシュされた ResourceManager インスタンスを返します。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GenDaoAndBatUpd_sample.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GenDaoAndBatUpd_sample.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; @@ -47,8 +47,8 @@ internal Resources() { } /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. + /// すべてについて、現在のスレッドの CurrentUICulture プロパティをオーバーライドします + /// 現在のスレッドの CurrentUICulture プロパティをオーバーライドします。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ internal Resources() { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。 /// internal static System.Drawing.Bitmap Diagram { get { diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.resx b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Resources.resx similarity index 97% rename from root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.resx rename to root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Resources.resx index 5cf564b18..28f75b834 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Properties/Resources.resx +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/Resources.resx @@ -119,6 +119,6 @@ - ..\Diagram.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + .\Diagram.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/app.config deleted file mode 100644 index b712a7713..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/app.config +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/appsettings.json b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/appsettings.json new file mode 100644 index 000000000..82e5c43b9 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/GenDaoAndBatUpd_sample/appsettings.json @@ -0,0 +1,40 @@ +{ + // 2wC/SpiWindowsj + // connectionStrings section + "connectionStrings": { + // SQL Server / SQL Clientp + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;" + }, + + // appSettings section + "appSettings": { + + // t[[N̎gpp[^ - start + // \[X t@C̏ꍇ + "FxXMLMSGDefinition": "MSGDefinition.xml", + // ߍ܂ꂽ\[X̏ꍇ + // "FxXMLMSGDefinition": "GenDaoAndBatUpd_sample.MSGDefinition.xml", + // t[[N̎gpp[^ - end + + // ʕi̎gpp[^ - start + // Log4Net̃RtBOt@Cւ̃pX + // \[X t@C̏ꍇ + "FxLog4NetConfFile": "SampleLogConf2CS.xml", + // cw̃ptH[}XOo͋@\onEoff + "FxSqlTraceLog": "on", + // cwSQLLbV@\onEoff + // JtF[ŶƂlāAftHgoffɐݒ + "FxSqlCacheSwitch": "off", + // cwSQL[h̃GR[fBOwishift_jisAutf-8.etcj + "FxSqlEncoding": "utf-8", + // cw̃R}h ^CAEglwibj + "FxSqlCommandTimeout": "30", + // ʕi̎gpp[^ - end + + // AvP[V̎gpp[^ - start + // SQLt@Ct@CitH_jւ̃pX + //"SqlTextFilePath": ".\\Dao", + "SqlTextFilePath": "GenDaoAndBatUpd_sample.Dao" + // AvP[V̎gpp[^ - end + } +} \ No newline at end of file From c0a5deb60d2541232997ff62ad75eaaf1bce420b Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 1 Nov 2019 13:36:07 +0900 Subject: [PATCH 10/47] Now, I am fixing #328. TimeStamp_sample is changed to .NET Core3. --- .../TimeStamp_sample/MSGDefinition.xml | 23 - .../TimeStamp_sample/SPDefinition.xml | 15 - .../TimeStamp_sample/TimeStamp_sample.csproj | 8 +- .../2CS_sample/TimeStamp_sample/app.config | 39 +- .../TimeStamp_sample/MSGDefinition.xml | 23 - .../2CS_sample/TimeStamp_sample/Program.cs | 5 + .../Properties/AssemblyInfo.cs | 51 --- .../TimeStamp_sample/SPDefinition.xml | 15 - .../TimeStamp_sample/TimeStamp_sample.csproj | 408 +++++++++--------- .../TimeStamp_sample/TimeStamp_sample.sln | 14 +- .../2CS_sample/TimeStamp_sample/app.config | 43 -- .../TimeStamp_sample/appsettings.json | 32 ++ 12 files changed, 272 insertions(+), 404 deletions(-) delete mode 100644 root/programs/CS/Samples/2CS_sample/TimeStamp_sample/MSGDefinition.xml delete mode 100644 root/programs/CS/Samples/2CS_sample/TimeStamp_sample/SPDefinition.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/MSGDefinition.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Properties/AssemblyInfo.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SPDefinition.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/appsettings.json diff --git a/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/MSGDefinition.xml b/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/MSGDefinition.xml deleted file mode 100644 index f2283b409..000000000 --- a/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/MSGDefinition.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/SPDefinition.xml b/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/SPDefinition.xml deleted file mode 100644 index 6baf634bc..000000000 --- a/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/SPDefinition.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - -]> - - - - - - - diff --git a/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj b/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj index ff56b0027..db18a5aea 100644 --- a/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj +++ b/root/programs/CS/Samples/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj @@ -8,7 +8,7 @@ {386EA604-40DB-44A8-87AE-F29B209BA9CF} WinExe Properties - _TimeStamp_sample + TimeStamp_sample TimeStamp_sample v4.6 @@ -238,15 +238,9 @@ Always - - Always - Always - - Always - - + + - + - + - - - - - - - - - - - + + + + + + + + + + + + + + - + + + - + diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/MSGDefinition.xml deleted file mode 100644 index f2283b409..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/MSGDefinition.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Program.cs index 93cd86e88..8b003f6d2 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Program.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Program.cs @@ -21,6 +21,8 @@ using System; using System.Windows.Forms; +using Touryo.Infrastructure.Public.Util; + namespace _TimeStamp_sample { /// アプリケーションのメイン エントリ ポイント @@ -30,6 +32,9 @@ static class Program [STAThread] static void Main() { + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Properties/AssemblyInfo.cs deleted file mode 100644 index 0ee394be6..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,51 +0,0 @@ -//********************************************************************************** -//* タイムスタンプ・サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("TimeStamp_sample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("TimeStamp_sample")] -[assembly: AssemblyCopyright("Copyright (C) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です -[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SPDefinition.xml deleted file mode 100644 index 6baf634bc..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/SPDefinition.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - -]> - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj index ff56b0027..35df7f3fb 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.csproj @@ -1,259 +1,271 @@ - - + + - Debug - AnyCPU - 8.0.50727 - 2.0 - {386EA604-40DB-44A8-87AE-F29B209BA9CF} WinExe - Properties - _TimeStamp_sample + netcoreapp3.0 + true + + + TimeStamp_sample TimeStamp_sample - v4.6 - - - 2.0 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll - - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - Form - - - Form1.cs - - - - - Designer - Form1.cs + + Always - - - - - - + Always - - + + + Always + + + Always + + + Always + + + Always + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + Always - - + + + + + + + + + + + + + + + + + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll + + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll + + + + + Always - - + + Always - + - - + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.sln index 463f94c69..983f7b036 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.sln +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/TimeStamp_sample.sln @@ -1,30 +1,20 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TimeStamp_sample", "TimeStamp_sample.csproj", "{386EA604-40DB-44A8-87AE-F29B209BA9CF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|.NET = Debug|.NET Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Release|.NET = Release|.NET Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|.NET.ActiveCfg = Debug|Any CPU {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|.NET.ActiveCfg = Release|Any CPU {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.ActiveCfg = Release|Any CPU {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.Build.0 = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/app.config deleted file mode 100644 index 0b92587d1..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/app.config +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/appsettings.json b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/appsettings.json new file mode 100644 index 000000000..ed36dc6ad --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/TimeStamp_sample/appsettings.json @@ -0,0 +1,32 @@ +{ + // 2wC/SpiWindowsj + // connectionStrings section + "connectionStrings": { + // SQL Server / SQL Clientp + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;" + }, + + // appSettings section + "appSettings": { + + // ʕi̎gpp[^ - start + // Log4Net̃RtBOt@Cւ̃pX + // \[X t@C̏ꍇ + "FxLog4NetConfFile": "SampleLogConf2CS.xml", + // cw̃ptH[}XOo͋@\onEoff + "FxSqlTraceLog": "on", + // cwSQLLbV@\onEoff + // JtF[ŶƂlāAftHgoffɐݒ + "FxSqlCacheSwitch": "off", + // cwSQL[h̃GR[fBOwishift_jisAutf-8.etcj + "FxSqlEncoding": "utf-8", + // cw̃R}h ^CAEglwibj + "FxSqlCommandTimeout": "30", + // ʕi̎gpp[^ - end + + // AvP[V̎gpp[^ - start + // SQLt@Ct@CitH_jւ̃pX + "SqlTextFilePath": ".\\Dao", + // AvP[V̎gpp[^ - end + } +} \ No newline at end of file From 8c7d362486402ebcb646f9984f6a2b47a19453f4 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 1 Nov 2019 13:48:23 +0900 Subject: [PATCH 11/47] Now, I am fixing #328. CustCtrl_sample is changed to .NET Core3. --- .../CustCtrl_sample/CustCtrl_sample.csproj | 95 ++++--------------- .../CustCtrl_sample/CustCtrl_sample.sln | 4 +- .../Properties/AssemblyInfo.cs | 54 ----------- 3 files changed, 19 insertions(+), 134 deletions(-) delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Properties/AssemblyInfo.cs diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.csproj index 5ecbb823e..b4ac439f1 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.csproj @@ -1,88 +1,27 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {BA15CF85-A95B-4EA9-977B-0BE5EB739E72} WinExe - Properties + netcoreapp3.0 + true + + CustCtrl_sample CustCtrl_sample - v4.6 - 512 - - - 3.5 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + - - False - ..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.CustomControl.RichClient.dll - - - - - - + + + + + + - - - Form - - - Form1.cs - - - - - Form1.cs - + + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.CustomControl.RichClient.dll + - - + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.sln index 5f1c05a97..071185357 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.sln +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/CustCtrl_sample.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustCtrl_sample", "CustCtrl_sample.csproj", "{BA15CF85-A95B-4EA9-977B-0BE5EB739E72}" EndProject diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Properties/AssemblyInfo.cs deleted file mode 100644 index 0f98f45a4..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/CustCtrl_sample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,54 +0,0 @@ -//********************************************************************************** -//* カスタム コントロール・サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("CustCtrl_sample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("CustCtrl_sample")] -[assembly: AssemblyCopyright("Copyright (c) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です -[assembly: Guid("35644d0c-64cb-4ab8-a8ce-4987cd132bd5")] - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を -// 既定値にすることができます: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] From 7398003f88d861d516c6d560b6b91cf2f4b6890c Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 1 Nov 2019 14:11:14 +0900 Subject: [PATCH 12/47] Now, I am fixing #328. AsyncEvent_sample is changed to .NET Core3. --- .../AsyncEvent_sample/AsyncEvent_sample.sln | 4 +- .../Properties/AssemblyInfo.cs | 54 --------- .../WindowsFormsApplication.csproj | 92 ++------------- .../WpfApplication/Properties/AssemblyInfo.cs | 72 ------------ .../WpfApplication/WpfApplication.csproj | 109 ++---------------- .../AsyncEvent_sample/test-winx2&wpfx2.bat | 8 +- 6 files changed, 28 insertions(+), 311 deletions(-) delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Properties/AssemblyInfo.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Properties/AssemblyInfo.cs diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/AsyncEvent_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/AsyncEvent_sample.sln index d7d27694f..ada5d61b8 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/AsyncEvent_sample.sln +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/AsyncEvent_sample.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsApplication", "WindowsFormsApplication\WindowsFormsApplication.csproj", "{17284ADF-2F82-412E-8D83-02E5C1606F53}" EndProject diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Properties/AssemblyInfo.cs deleted file mode 100644 index b5cef05a7..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,54 +0,0 @@ -//********************************************************************************** -//* 非同期イベント・サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("WindowsFormsApplication")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("WindowsFormsApplication")] -[assembly: AssemblyCopyright("Copyright (C) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です -[assembly: Guid("c4de3fb7-2d34-4714-9d11-9645e812683e")] - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を -// 既定値にすることができます: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/WindowsFormsApplication.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/WindowsFormsApplication.csproj index 8acfb0fc2..8352b925b 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/WindowsFormsApplication.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WindowsFormsApplication/WindowsFormsApplication.csproj @@ -1,90 +1,22 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {17284ADF-2F82-412E-8D83-02E5C1606F53} WinExe - Properties + netcoreapp3.0 + true + + WindowsFormsApplication WindowsFormsApplication - v4.6 - 512 - - - 3.5 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll - - - - - - - - Form - - - Form1.cs - - - - - Form1.cs - - - + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Properties/AssemblyInfo.cs deleted file mode 100644 index 3c53b5c9c..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,72 +0,0 @@ -//********************************************************************************** -//* 非同期イベント・サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; -using System.Windows; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("WpfApplication")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("WpfApplication")] -[assembly: AssemblyCopyright("Copyright (c) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -//ローカライズ可能なアプリケーションのビルドを開始するには、 -//.csproj ファイルの CultureYouAreCodingWith を -// 内部で設定します。たとえば、 -//ソース ファイルで英語を使用している場合、 を en-US に設定します。次に、 -//下の NeutralResourceLanguage 属性のコメントを解除します。下の行の "en-US" を -//プロジェクト ファイルの UICulture 設定と一致するよう更新します。 - -//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] - - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //テーマ固有のリソース ディクショナリが置かれている場所 - //(リソースがページ、 - //またはアプリケーション リソース ディクショナリに見つからない場合に使用されます) - ResourceDictionaryLocation.SourceAssembly //汎用リソース ディクショナリが置かれている場所 - //(リソースがページ、 - //アプリケーション、またはいずれのテーマ固有のリソース ディクショナリにも見つからない場合に使用されます) -)] - - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を -// 既定値にすることができます: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/WpfApplication.csproj b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/WpfApplication.csproj index accb99fc2..7cb8d7738 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/WpfApplication.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/WpfApplication/WpfApplication.csproj @@ -1,109 +1,20 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {14296AF4-CB38-44B9-A42D-C104FE16CE33} WinExe - Properties + netcoreapp3.0 + true WpfApplication WpfApplication - v4.6 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - - - 3.5 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll - - - - - - - - - - MSBuild:Compile - Designer - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - MSBuild:Compile - Designer - - - App.xaml - Code - - - Window1.xaml - Code - - - - - Code - - - - + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/test-winx2&wpfx2.bat b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/test-winx2&wpfx2.bat index 9028bcb40..e08dfb68a 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/test-winx2&wpfx2.bat +++ b/root/programs/CS/Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample/test-winx2&wpfx2.bat @@ -1,5 +1,5 @@ -start WindowsFormsApplication\bin\Debug\WindowsFormsApplication.exe /WinForm1,WinForm2,WPF1 -start WindowsFormsApplication\bin\Debug\WindowsFormsApplication.exe /WinForm2,WinForm1,WPF2 +start WindowsFormsApplication\bin\Debug\netcoreapp3.0\WindowsFormsApplication.exe /WinForm1,WinForm2,WPF1 +start WindowsFormsApplication\bin\Debug\netcoreapp3.0\WindowsFormsApplication.exe /WinForm2,WinForm1,WPF2 -start WpfApplication\bin\Debug\WpfApplication.exe /WPF1,WPF2,WinForm1 -start WpfApplication\bin\Debug\WpfApplication.exe /WPF2,WPF1,WinForm2 +start WpfApplication\bin\Debug\netcoreapp3.0\WpfApplication.exe /WPF1,WPF2,WinForm1 +start WpfApplication\bin\Debug\netcoreapp3.0\WpfApplication.exe /WPF2,WPF1,WinForm2 From 07b65c0d99509dbdee3b175b0aaba5cadc236e76 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 1 Nov 2019 16:21:49 +0900 Subject: [PATCH 13/47] Now, I am fixing #328. Restored implementation in CallController. --- .../Framework/Framework_netstd20.csproj | 2 + .../Framework/Framework_netstd21.csproj | 2 + .../Framework/Transmission/CallController.cs | 429 ++++++++++-------- 3 files changed, 232 insertions(+), 201 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj index 5804175d1..a34a5018b 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj @@ -54,6 +54,8 @@ + + diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj index d7960a1b0..9935d5a74 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj @@ -54,6 +54,8 @@ + + diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs index b797b10a0..88bd7d9a6 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs @@ -59,6 +59,7 @@ //* 2018/03/29 西野 大介 .NET Standard対応:取り敢えずインプロセスのみ残す。 //* 2018/08/04 西野 大介 regionディレクティブのインデントの問題を修正 //* 2018/08/04 西野 大介 HttpClientにpropsの設定値を反映する。 +//* 2019/10/01 西野 大介 .NET Standard対応:ASP.NET WebAPI (JSON-RPC)の復元 //********************************************************************************** using System; @@ -72,8 +73,6 @@ using Touryo.Infrastructure.Public.Db; using Touryo.Infrastructure.Public.Reflection; -#if NETSTD -#else using System.Text; using System.Linq; using System.Collections.Generic; @@ -85,15 +84,17 @@ using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; +#if NETSTD +#else using System.ServiceModel; using System.ServiceModel.Channels; +#endif using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Str; -#endif #if NETSTD #else @@ -255,6 +256,7 @@ public string WCF_TCPIP_EndPointConfigName #endregion #endregion +#endif #region プロキシのURL @@ -293,7 +295,6 @@ public NetworkCredential NetworkCredentialToProxy } #endregion -#endif #endregion @@ -336,33 +337,8 @@ public object Invoke(string serviceName, object parameterValue) // クラス名 string className = ""; -#if NETSTD -#else - // URL - string url = ""; - - // タイムアウト - int timeout; - - // プロパティ - Dictionary props; -#endif - #endregion - #region 引数・戻り値関係の変数(WS時) - -#if NETSTD -#else - // .NETオブジェクトのバイト配列 // #y-↓3行 - byte[] contextObject = null; - byte[] parameterValueObject = null; - byte[] returnValueObject = null; - - // エラー情報のバイト配列 // #y-↓1行 - byte[] ret = null; -#endif - #endregion // 名前解決(プロトコル タイプ) @@ -401,15 +377,22 @@ public object Invoke(string serviceName, object parameterValue) } else { -#if NETSTD - // サービス呼び出しはサポートしない。 - // コンテキスト・nullエラー - throw new FrameworkException( - FrameworkExceptionMessage.PARAMETER_CHECK_ERROR[0], - String.Format(FrameworkExceptionMessage.PARAMETER_CHECK_ERROR[1], - String.Format(FrameworkExceptionMessage.PARAMETER_CHECK_ERROR_null, "serviceName"))); -#else - #region サービス呼び出し + // URL + string url = ""; + + // タイムアウト + int timeout; + + // プロパティ + Dictionary props; + + // .NETオブジェクトのバイト配列 // #y-↓3行 + byte[] contextObject = null; + byte[] parameterValueObject = null; + byte[] returnValueObject = null; + + // エラー情報のバイト配列 // #y-↓1行 + byte[] ret = null; // 名前解決(プロトコルURL) CallController.PRT_NS.NameResolutionProtocolUrl(serviceName, out url, out timeout, out props); @@ -448,6 +431,29 @@ public object Invoke(string serviceName, object parameterValue) #endregion +#if NETSTD + #region サービス呼び出し + + if (protocol == ((int)FxEnum.TmProtocol.AspNetWebAPI).ToString()) + { + // ASP.NET WebAPI (JSON-RPC) + ret = this.ASPNETWebAPI(serviceName, url, timeout, props, + contextObject, parameterValueObject, returnValueObject); + } + else + { + // サービス呼び出しはサポートしない。 + // コンテキスト・nullエラー + throw new FrameworkException( + FrameworkExceptionMessage.PARAMETER_CHECK_ERROR[0], + String.Format(FrameworkExceptionMessage.PARAMETER_CHECK_ERROR[1], + String.Format(FrameworkExceptionMessage.PARAMETER_CHECK_ERROR_null, "serviceName"))); + } + + #endregion +#else + #region サービス呼び出し + if (protocol == ((int)FxEnum.TmProtocol.AspNetWs).ToString()) { #region WS-I Basic Profile v1.1、IIS + ASP.NET @@ -724,163 +730,9 @@ public object Invoke(string serviceName, object parameterValue) } else if (protocol == ((int)FxEnum.TmProtocol.AspNetWebAPI).ToString()) { - #region ASP.NET WebAPI (JSON-RPC) - - #region WebRequestHandler - - // 通信用の変数 - WebRequestHandler handler = new WebRequestHandler(); - - #region WASのクライアント認証のセキュリティ資格情報 for WCF - - NetworkCredential nwcWAS = this.CreateCredentials(props); - if (nwcWAS != null) - { - handler.Credentials = nwcWAS; - } - - #endregion - - #region プロキシ経由の要求を行うためのプロキシ情報 - - WebProxy proxy = this.CreateProxy(props); - if (proxy != null) - { - handler.Proxy = proxy; - } - - #endregion - - #region HTTP圧縮の有効・無効(Default:false) - - if (!props.ContainsKey(FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION))// Dic化でnullチェック変更 - { - // XML定義:キーが無い - } - else - { - if (string.IsNullOrEmpty(props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION])) - { - // XML定義:null or 空文字列 - } - else - { - // XML定義:あり - - bool compress; - - if (Boolean.TryParse(props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION], out compress)) - { - // 書式正常 - if (compress) - { - handler.AutomaticDecompression = - DecompressionMethods.GZip | DecompressionMethods.Deflate; - } - } - else - { - // パラメータ・エラー(書式不正) - throw new FrameworkException( - FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_SWITCH2[0], - String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_SWITCH2[1], - FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION - + "=" + props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION])); - } - } - } - - #endregion - - #endregion - - #region HttpClient - - HttpClient client = new HttpClient(handler); - - HttpRequestMessage httpRequestMessage = null; - HttpResponseMessage httpResponseMessage = null; - httpRequestMessage = new HttpRequestMessage - { - Method = HttpMethod.Post, - RequestUri = new Uri(url), - Content = new StringContent(JsonConvert.SerializeObject( - new - { - ServiceName = serviceName, - ContextObject = CustomEncode.ToBase64String(contextObject), - ParameterValueObject = CustomEncode.ToBase64String(parameterValueObject) - }), - Encoding.UTF8, "application/json"), - }; - - // タイムアウト指定、有り - if (0 <= timeout) - { - client.Timeout = TimeSpan.FromSeconds(timeout); - } - - #region クライアント証明書、エージェント ヘッダ、接続グループ.etc - - #region クライアント証明書 CERTIFICATE - - X509Certificate2 x509 = this.CreateX509Certificate(props); - if (x509 != null) - { - handler.ClientCertificates.Add(x509); - } - - #endregion - - #region ユーザ エージェント ヘッダ値 - - // (Default:MS Web Services Client Protocol number、numberは、CLRのver) - if (!props.ContainsKey(FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT))// Dic化でnullチェック変更 - { - // XML定義:キーが無い - } - else - { - if (string.IsNullOrEmpty(props[FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT])) - { - // XML定義:null or 空文字列 - } - else - { - // XML定義:あり - client.DefaultRequestHeaders.Add( - "User-Agent", - props[FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT]); - } - } - - #endregion - - #region 接続グループ(Default:Empty) - - // - - - #endregion - - #endregion - - // HttpRequestMessage (Headers) - //httpRequestMessage.Headers.Add("Authorization", authHeader); - //httpRequestMessage.Headers.Authorization = new AuthenticationHeaderValue("OAuth", authHeader); - //httpRequestMessage.Headers.ExpectContinue = false; - - #endregion - - // 同期呼び出しで実行 - httpResponseMessage = client.SendAsync(httpRequestMessage).Result; - string result = httpResponseMessage.Content.ReadAsStringAsync().Result; - JObject jObject = (JObject)JsonConvert.DeserializeObject(result); - - ret = CustomEncode.FromBase64String((string)jObject["Return"]); - contextObject = CustomEncode.FromBase64String((string)jObject["ContextObject"]); - returnValueObject = CustomEncode.FromBase64String((string)jObject["ReturnValueObject"]); - - #endregion + // ASP.NET WebAPI (JSON-RPC) + ret = this.ASPNETWebAPI(serviceName, url, timeout, props, + contextObject, parameterValueObject, returnValueObject); } else { @@ -893,6 +745,9 @@ public object Invoke(string serviceName, object parameterValue) String.Format(FrameworkExceptionMessage.PRT_NAMESERVICE_XML_FORMAT_ERROR_prt2, protocol, serviceName))); // #14,32-この行 } + #endregion +#endif + #region 戻り値のデシリアライズ(#y-このregion) #region エラー情報 @@ -960,18 +815,191 @@ public object Invoke(string serviceName, object parameterValue) #endregion #endregion + } + } - #endregion + /// + /// ASP.NET WebAPI (JSON-RPC) + /// .NETCoreでも利用するため共通化 + /// + /// string + /// string + /// int + /// Dictionary(string, string) + /// byte[] + /// byte[] + /// byte[] + /// エラー情報のバイト配列 + private byte[] ASPNETWebAPI( + string serviceName, string url, int timeout, Dictionary props, + byte[] contextObject, byte[] parameterValueObject, byte[] returnValueObject) + { + // Equivalent to WebRequestHandler in .net Core · Issue #26223 · dotnet/corefx + // https://github.com/dotnet/corefx/issues/26223 + + // 通信用の変数 +#if NETSTD + #region HttpClientHandler + HttpClientHandler handler = new HttpClientHandler(); + #endregion +#else + #region WebRequestHandler + WebRequestHandler handler = new WebRequestHandler(); + #endregion #endif + + #region WASのクライアント認証のセキュリティ資格情報 for WCF + + NetworkCredential nwcWAS = this.CreateCredentials(props); + if (nwcWAS != null) + { + handler.Credentials = nwcWAS; } - } - #endregion + #endregion + + #region プロキシ経由の要求を行うためのプロキシ情報 + + WebProxy proxy = this.CreateProxy(props); + if (proxy != null) + { + handler.Proxy = proxy; + } + + #endregion + + #region HTTP圧縮の有効・無効(Default:false) + + if (!props.ContainsKey(FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION))// Dic化でnullチェック変更 + { + // XML定義:キーが無い + } + else + { + if (string.IsNullOrEmpty(props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION])) + { + // XML定義:null or 空文字列 + } + else + { + // XML定義:あり + + bool compress; + + if (Boolean.TryParse(props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION], out compress)) + { + // 書式正常 + if (compress) + { + handler.AutomaticDecompression = + DecompressionMethods.GZip | DecompressionMethods.Deflate; + } + } + else + { + // パラメータ・エラー(書式不正) + throw new FrameworkException( + FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_SWITCH2[0], + String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_SWITCH2[1], + FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION + + "=" + props[FxLiteral.TRANSMISSION_HTTP_PROP_ENABLEDE_COMPRESSION])); + } + } + } + + #endregion + + #region HttpClient + + HttpClient client = new HttpClient(handler); + + HttpRequestMessage httpRequestMessage = null; + HttpResponseMessage httpResponseMessage = null; + httpRequestMessage = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = new Uri(url), + Content = new StringContent(JsonConvert.SerializeObject( + new + { + ServiceName = serviceName, + ContextObject = CustomEncode.ToBase64String(contextObject), + ParameterValueObject = CustomEncode.ToBase64String(parameterValueObject) + }), + Encoding.UTF8, "application/json"), + }; + + // タイムアウト指定、有り + if (0 <= timeout) + { + client.Timeout = TimeSpan.FromSeconds(timeout); + } + + #region クライアント証明書、エージェント ヘッダ、接続グループ.etc + + #region クライアント証明書 CERTIFICATE + + X509Certificate2 x509 = this.CreateX509Certificate(props); + if (x509 != null) + { + handler.ClientCertificates.Add(x509); + } + + #endregion + + #region ユーザ エージェント ヘッダ値 + + // (Default:MS Web Services Client Protocol number、numberは、CLRのver) + if (!props.ContainsKey(FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT))// Dic化でnullチェック変更 + { + // XML定義:キーが無い + } + else + { + if (string.IsNullOrEmpty(props[FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT])) + { + // XML定義:null or 空文字列 + } + else + { + // XML定義:あり + client.DefaultRequestHeaders.Add( + "User-Agent", + props[FxLiteral.TRANSMISSION_HTTP_PROP_USER_AGENT]); + } + } + + #endregion + + #region 接続グループ(Default:Empty) + + // - + + #endregion + + #endregion + + // HttpRequestMessage (Headers) + //httpRequestMessage.Headers.Add("Authorization", authHeader); + //httpRequestMessage.Headers.Authorization = new AuthenticationHeaderValue("OAuth", authHeader); + //httpRequestMessage.Headers.ExpectContinue = false; + + #endregion + + // 同期呼び出しで実行 + httpResponseMessage = client.SendAsync(httpRequestMessage).Result; + string result = httpResponseMessage.Content.ReadAsStringAsync().Result; + JObject jObject = (JObject)JsonConvert.DeserializeObject(result); + + byte[] ret = CustomEncode.FromBase64String((string)jObject["Return"]); + contextObject = CustomEncode.FromBase64String((string)jObject["ContextObject"]); + returnValueObject = CustomEncode.FromBase64String((string)jObject["ReturnValueObject"]); + + return ret; + } #region ヘルパー -#if NETSTD -#else /// CreateProxy /// Dictionary(string, string) /// WebProxy @@ -1187,7 +1215,6 @@ private X509Certificate2 CreateX509Certificate(Dictionary props) return x509; } -#endif #endregion From 56c06790ece9306ed59202605d1047fd529f45cc Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 1 Nov 2019 17:16:05 +0900 Subject: [PATCH 14/47] Now, I am fixing #328. Moved child projects of WS_sample. --- .../Legacy/{ => WS_sample}/WSIFType_sample/TestParameterValue.cs | 0 .../Legacy/{ => WS_sample}/WSIFType_sample/TestReturnValue.cs | 0 .../Legacy/{ => WS_sample}/WSIFType_sample/WSIFType_sample.csproj | 0 .../Legacy/{ => WS_sample}/WSServer_sample/Business/LayerB.cs | 0 .../Legacy/{ => WS_sample}/WSServer_sample/Common/Shipper.cs | 0 .../Legacy/{ => WS_sample}/WSServer_sample/Common/WebApiParams.cs | 0 .../Legacy/{ => WS_sample}/WSServer_sample/Dao/DaoShippers.cs | 0 .../Legacy/{ => WS_sample}/WSServer_sample/Dao/LayerD.cs | 0 .../Legacy/{ => WS_sample}/WSServer_sample/WSServer_sample.csproj | 0 .../Legacy/{ => WS_sample}/WSServer_sample/WSServer_sample.sln | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSIFType_sample/TestParameterValue.cs (100%) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSIFType_sample/TestReturnValue.cs (100%) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSIFType_sample/WSIFType_sample.csproj (100%) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSServer_sample/Business/LayerB.cs (100%) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSServer_sample/Common/Shipper.cs (100%) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSServer_sample/Common/WebApiParams.cs (100%) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSServer_sample/Dao/DaoShippers.cs (100%) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSServer_sample/Dao/LayerD.cs (100%) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSServer_sample/WSServer_sample.csproj (100%) rename root/programs/CS/Samples4NetCore/Legacy/{ => WS_sample}/WSServer_sample/WSServer_sample.sln (100%) diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSIFType_sample/TestParameterValue.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/TestParameterValue.cs similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSIFType_sample/TestParameterValue.cs rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/TestParameterValue.cs diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSIFType_sample/TestReturnValue.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/TestReturnValue.cs similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSIFType_sample/TestReturnValue.cs rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/TestReturnValue.cs diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSIFType_sample/WSIFType_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/WSIFType_sample.csproj similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSIFType_sample/WSIFType_sample.csproj rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/WSIFType_sample.csproj diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Business/LayerB.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Business/LayerB.cs similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Business/LayerB.cs rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Business/LayerB.cs diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Common/Shipper.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Common/Shipper.cs similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Common/Shipper.cs rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Common/Shipper.cs diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Common/WebApiParams.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Common/WebApiParams.cs similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Common/WebApiParams.cs rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Common/WebApiParams.cs diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Dao/DaoShippers.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Dao/DaoShippers.cs similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Dao/DaoShippers.cs rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Dao/DaoShippers.cs diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Dao/LayerD.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Dao/LayerD.cs similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/Dao/LayerD.cs rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/Dao/LayerD.cs diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/WSServer_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/WSServer_sample.csproj similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/WSServer_sample.csproj rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/WSServer_sample.csproj diff --git a/root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/WSServer_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/WSServer_sample.sln similarity index 100% rename from root/programs/CS/Samples4NetCore/Legacy/WSServer_sample/WSServer_sample.sln rename to root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/WSServer_sample.sln From 94e011db0428dae6ee45da2b93c9e62f9c2c0ec9 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 1 Nov 2019 17:20:01 +0900 Subject: [PATCH 15/47] Now, I am fixing #328. Added WS_sample(3CS_sample) to Samples4NetCore folder. --- .../WSClientWPF_sample/App.xaml | 8 + .../WSClientWPF_sample/App.xaml.cs | 32 + .../WSClientWPF_sample/AsyncFunc.cs | 78 + .../WSClientWPF_sample/MSGDefinition.xml | 23 + .../Properties/AssemblyInfo.cs | 72 + .../WSClientWPF_sample/SPDefinition.xml | 15 + .../WSClientWPF_sample/SampleLogConf2CS.xml | 133 ++ .../TMInProcessDefinition.xml | 18 + .../TMProtocolDefinition.xml | 44 + .../TMProtocolDefinition2.xml | 44 + .../WSClientWPF_sample.csproj | 171 +++ .../WSClientWPF_sample/WSClientWPF_sample.sln | 48 + .../WSClientWPF_sample/Window0.xaml | 8 + .../WSClientWPF_sample/Window0.xaml.cs | 40 + .../WSClientWPF_sample/Window1.xaml | 52 + .../WSClientWPF_sample/Window1.xaml.cs | 682 +++++++++ .../WSClientWPF_sample/app.config | 125 ++ .../WSClientWin2_sample/ByReturn.Designer.cs | 73 + .../WSClientWin2_sample/ByReturn.cs | 109 ++ .../WSClientWin2_sample/ByReturn.resx | 120 ++ .../WSClientWin2_sample/Form0.Designer.cs | 83 ++ .../WSClientWin2_sample/Form0.cs | 61 + .../WSClientWin2_sample/Form0.resx | 120 ++ .../WSClientWin2_sample/Form1.Designer.cs | 299 ++++ .../WSClientWin2_sample/Form1.cs | 280 ++++ .../WSClientWin2_sample/Form1.resx | 120 ++ .../WSClientWin2_sample/Form2.Designer.cs | 106 ++ .../WSClientWin2_sample/Form2.cs | 90 ++ .../WSClientWin2_sample/Form2.resx | 120 ++ .../WSClientWin2_sample/Form3.Designer.cs | 473 ++++++ .../WSClientWin2_sample/Form3.cs | 600 ++++++++ .../WSClientWin2_sample/Form3.resx | 1040 +++++++++++++ .../WSClientWin2_sample/Login.Designer.cs | 81 + .../WSClientWin2_sample/Login.cs | 55 + .../WSClientWin2_sample/Login.resx | 120 ++ .../WSClientWin2_sample/MSGDefinition.xml | 23 + .../WSClientWin2_sample/Program.cs | 126 ++ .../Properties/AssemblyInfo.cs | 51 + .../WSClientWin2_sample/SPDefinition.xml | 15 + .../WSClientWin2_sample/SampleLogConf2CS.xml | 133 ++ .../WSClientWin2_sample/Splash.Designer.cs | 60 + .../WSClientWin2_sample/Splash.cs | 188 +++ .../WSClientWin2_sample/Splash.resx | 120 ++ .../UserControl3.Designer.cs | 247 ++++ .../WSClientWin2_sample/UserControl3.cs | 78 + .../WSClientWin2_sample/UserControl3.resx | 1115 ++++++++++++++ .../UserControlChild.Designer.cs | 58 + .../WSClientWin2_sample/UserControlChild.cs | 44 + .../WSClientWin2_sample/UserControlChild.resx | 120 ++ .../UserControlParent.Designer.cs | 68 + .../WSClientWin2_sample/UserControlParent.cs | 33 + .../UserControlParent.resx | 120 ++ .../WSClientWin2_sample.csproj | 211 +++ .../WSClientWin2_sample.sln | 35 + .../WSClientWin2_sample/app.config | 81 + .../WSClientWinCone_sample/AsyncFunc.cs | 78 + .../WSClientWinCone_sample/Form1.Designer.cs | 443 ++++++ .../WSClientWinCone_sample/Form1.cs | 699 +++++++++ .../WSClientWinCone_sample/Form1.resx | 1311 +++++++++++++++++ .../WSClientWinCone_sample/Login.Designer.cs | 93 ++ .../WSClientWinCone_sample/Login.cs | 121 ++ .../WSClientWinCone_sample/Login.resx | 120 ++ .../WSClientWinCone_sample/MSGDefinition.xml | 23 + .../WSClientWinCone_sample/Program.cs | 118 ++ .../Properties/AssemblyInfo.cs | 51 + .../Properties/app.manifest | 11 + .../WSClientWinCone_sample/SPDefinition.xml | 15 + .../SampleLogConf2CS.xml | 133 ++ .../WSClientWinCone_sample/Splash.Designer.cs | 60 + .../WSClientWinCone_sample/Splash.cs | 188 +++ .../WSClientWinCone_sample/Splash.resx | 120 ++ .../TMProtocolDefinition.xml | 44 + .../TMProtocolDefinition2.xml | 44 + .../WSClientWinCone_sample.csproj | 167 +++ .../WSClientWinCone_sample.sln | 77 + .../WSClientWinCone_sample/app.config | 101 ++ .../WSClientWinCone_sample/packages.config | 7 + .../WSClientWin_sample/AsyncFunc.cs | 78 + .../WSClientWin_sample/Blue hills.jpg | Bin 0 -> 28521 bytes .../WSClientWin_sample/Form1.Designer.cs | 443 ++++++ .../WSClientWin_sample/Form1.cs | 734 +++++++++ .../WSClientWin_sample/Form1.resx | 1311 +++++++++++++++++ .../WSClientWin_sample/Login.Designer.cs | 93 ++ .../WSClientWin_sample/Login.cs | 121 ++ .../WSClientWin_sample/Login.resx | 120 ++ .../WSClientWin_sample/MSGDefinition.xml | 23 + .../WSClientWin_sample/Program.cs | 118 ++ .../Properties/AssemblyInfo.cs | 51 + .../WSClientWin_sample/SPDefinition.xml | 15 + .../WSClientWin_sample/SampleLogConf2CS.xml | 133 ++ .../WSClientWin_sample/Splash.Designer.cs | 60 + .../WSClientWin_sample/Splash.cs | 188 +++ .../WSClientWin_sample/Splash.resx | 120 ++ .../TMInProcessDefinition.xml | 18 + .../TMProtocolDefinition.xml | 44 + .../TMProtocolDefinition2.xml | 44 + .../WSClientWin_sample.csproj | 186 +++ .../WSClientWin_sample/WSClientWin_sample.sln | 77 + .../WSClientWin_sample/app.config | 137 ++ .../WSClientWin_sample/packages.config | 7 + 100 files changed, 16614 insertions(+) create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/AsyncFunc.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/MSGDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/SPDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/SampleLogConf2CS.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMInProcessDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMProtocolDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMProtocolDefinition2.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window0.xaml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window0.xaml.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/MSGDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Program.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SPDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SampleLogConf2CS.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/AsyncFunc.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/MSGDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Program.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/app.manifest create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SPDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SampleLogConf2CS.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition2.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/packages.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/AsyncFunc.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Blue hills.jpg create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/MSGDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Program.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Properties/AssemblyInfo.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/SPDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/SampleLogConf2CS.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.Designer.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.cs create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.resx create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMInProcessDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMProtocolDefinition.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMProtocolDefinition2.xml create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.csproj create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.sln create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/packages.config diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml new file mode 100644 index 000000000..dd451d3eb --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml.cs new file mode 100644 index 000000000..e7671ac9d --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml.cs @@ -0,0 +1,32 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :App +//* クラス日本語名 :App.xaml の相互作用ロジック +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Windows; + +namespace WSClientWPF_sample +{ + /// App.xaml の相互作用ロジック + public partial class App : Application + { + private void Application_Startup(object sender, StartupEventArgs e) + { + + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/AsyncFunc.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/AsyncFunc.cs new file mode 100644 index 000000000..240b4e336 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/AsyncFunc.cs @@ -0,0 +1,78 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AsyncFunc +//* クラス日本語名 :サンプル アプリ 非同期処理クラス +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using WSIFType_sample; + +using Touryo.Infrastructure.Business.RichClient.Asynchronous; +using Touryo.Infrastructure.Framework.Transmission; + +namespace WSClientWPF_sample +{ + public class AsyncFunc : MyBaseAsyncFunc + { + /// コンストラクタ + /// WPFやWinFormの要素 + public AsyncFunc(object _this) : base(_this) { } + + /// サービスの論理名 + public string LogicalName = ""; + + /// 非同期 + /// 引数 + /// 結果 + /// + /// ここは副スレッドから実行されるので注意。 + /// 非同期処理クラスに非同期処理を定義すると、 + /// メンバ変数を引数として利用できる。 + /// + public object btn6_Exec(object param) + { + // 戻り値(キャスト) + TestParameterValue testParameterValue = (TestParameterValue)param; + + // 戻り値 + TestReturnValue testReturnValue; + + // 呼出し制御部品(スレッドセーフでないため副スレッド内で作る) + CallController callCtrl = new CallController(""); + + // Invoke + testReturnValue = (TestReturnValue)callCtrl.Invoke( + this.LogicalName, testParameterValue); + + //// 進捗表示のテスト + //this.ChangeProgress = delegate(object o) + //{ + // MessageBox.Show(o.ToString()); + //}; + + //this.ExecChangeProgress("進捗表示"); + + //// 非同期メッセージボックス表示のテスト + //MessageBoxResult mr = this.ShowAsyncMessageBoxWPF( + // "メッセージ", "タイトル", MessageBoxButton.YesNo, MessageBoxImage.Information); + //// 非同期メッセージボックス表示のテスト(エラー) + //System.Windows.Forms.DialogResult dr = this.ShowAsyncMessageBoxWin("メッセージ", "タイトル", + // System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Information); + + // 結果表示 + return testReturnValue; + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/MSGDefinition.xml new file mode 100644 index 000000000..f2283b409 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/MSGDefinition.xml @@ -0,0 +1,23 @@ + + + + +]> + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..7995394e8 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Properties/AssemblyInfo.cs @@ -0,0 +1,72 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; +using System.Windows; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("WSClientWPF_sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("WSClientWPF_sample")] +[assembly: AssemblyCopyright("Copyright (C) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +//ローカライズ可能なアプリケーションのビルドを開始するには、 +//.csproj ファイルの CultureYouAreCodingWith を +// 内部で設定します。たとえば、 +//ソース ファイルで英語を使用している場合、 を en-US に設定します。次に、 +//下の NeutralResourceLanguage 属性のコメントを解除します。下の行の "en-US" を +//プロジェクト ファイルの UICulture 設定と一致するよう更新します。 + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //テーマ固有のリソース ディクショナリが置かれている場所 + //(リソースがページ、 + //またはアプリケーション リソース ディクショナリに見つからない場合に使用されます) + ResourceDictionaryLocation.SourceAssembly //汎用リソース ディクショナリが置かれている場所 + //(リソースがページ、 + //アプリケーション、またはいずれのテーマ固有のリソース ディクショナリにも見つからない場合に使用されます) +)] + + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を +// 既定値にすることができます: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/SPDefinition.xml new file mode 100644 index 000000000..6baf634bc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/SPDefinition.xml @@ -0,0 +1,15 @@ + + + + +]> + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/SampleLogConf2CS.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/SampleLogConf2CS.xml new file mode 100644 index 000000000..e39f2b3fe --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/SampleLogConf2CS.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMInProcessDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMInProcessDefinition.xml new file mode 100644 index 000000000..6748977c1 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMInProcessDefinition.xml @@ -0,0 +1,18 @@ + + + + +]> + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMProtocolDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMProtocolDefinition.xml new file mode 100644 index 000000000..4a6e66334 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMProtocolDefinition.xml @@ -0,0 +1,44 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMProtocolDefinition2.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMProtocolDefinition2.xml new file mode 100644 index 000000000..4207915e3 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/TMProtocolDefinition2.xml @@ -0,0 +1,44 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.csproj new file mode 100644 index 000000000..22371632c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.csproj @@ -0,0 +1,171 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {F9737483-DC6C-45D1-8CB7-27138FD76D36} + WinExe + Properties + WSClientWPF_sample + WSClientWPF_sample + v4.6 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + 3.0 + + + 3.0 + + + 3.0 + + + ..\..\Build\WSIFType_sample.dll + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + + Code + + + Window0.xaml + + + + + + + Always + + + + + Always + + + Always + + + + + Always + + + + + Always + + + + + Always + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.sln new file mode 100644 index 000000000..18d0e984f --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WSClientWPF_sample", "WSClientWPF_sample.csproj", "{F9737483-DC6C-45D1-8CB7-27138FD76D36}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASPNETWebService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService\ASPNETWebService.csproj", "{C24BC2FA-D423-4F0F-B2B0-E647B621683D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCFService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\WCFService\WCFService.csproj", "{096A202A-72E4-41D8-8B61-970E48E38135}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Debug|x86.ActiveCfg = Debug|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Debug|x86.Build.0 = Debug|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Release|Any CPU.Build.0 = Release|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Release|x86.ActiveCfg = Release|Any CPU + {F9737483-DC6C-45D1-8CB7-27138FD76D36}.Release|x86.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|x86.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|x86.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Any CPU.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window0.xaml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window0.xaml new file mode 100644 index 000000000..fcf416bdc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window0.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window0.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window0.xaml.cs new file mode 100644 index 000000000..01b155172 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window0.xaml.cs @@ -0,0 +1,40 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Window0 +//* クラス日本語名 :Window0 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Windows; + +namespace WSClientWPF_sample +{ + /// + /// Window0.xaml の相互作用ロジック + /// + public partial class Window0 : Window + { + public Window0() + { + InitializeComponent(); + } + + private void button1_Click(object sender, RoutedEventArgs e) + { + Window w = new Window1(); + w.Show(); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml new file mode 100644 index 000000000..e10f02d84 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml.cs new file mode 100644 index 000000000..a69bba5ba --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml.cs @@ -0,0 +1,682 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Window1 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using WSIFType_sample; + +using System; +using System.Data; +using System.Threading; +using System.Windows.Controls; +using System.Windows; + +using Touryo.Infrastructure.Business.RichClient.Asynchronous; +using Touryo.Infrastructure.Business.RichClient.Util; +using Touryo.Infrastructure.Business.Util; + +using Touryo.Infrastructure.Framework.RichClient.Asynchronous; +using Touryo.Infrastructure.Framework.Transmission; +using Touryo.Infrastructure.Framework.Util; + +namespace WSClientWPF_sample +{ + /// Window1.xaml の相互作用(サンプル アプリ画面) + public partial class Window1 : Window + { + /// ユーザ情報 + MyUserInfo myUserInfo; + + /// 呼出し制御部品 + CallController CallCtrl; + + #region 初期処理 + + /// コンストラクタ + public Window1() + { + InitializeComponent(); + } + + /// ロード イベント + private void Window_Loaded(object sender, RoutedEventArgs e) + { + // ddlDap + this.ddlDap.Items.Add(new ComboBoxItem("SQL Server / SQL Client", "SQL")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / OLEDB.NET", "OLE")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / ODCB.NET", "ODB")); + this.ddlDap.Items.Add(new ComboBoxItem("Oracle / ODP.NET", "ODP")); + this.ddlDap.Items.Add(new ComboBoxItem("DB2 / DB2.NET", "DB2")); + this.ddlDap.Items.Add(new ComboBoxItem("HiRDB / HiRDB-DP", "HIR")); + this.ddlDap.Items.Add(new ComboBoxItem("MySQL Cnn/NET", "MCN")); + this.ddlDap.Items.Add(new ComboBoxItem("PostgreSQL / Npgsql", "NPS")); + this.ddlDap.SelectedIndex = 0; + + // ddlMode1 + this.ddlMode1.Items.Add(new ComboBoxItem("個別Dao", "individual")); + this.ddlMode1.Items.Add(new ComboBoxItem("共通Dao", "common")); + this.ddlMode1.Items.Add(new ComboBoxItem("自動生成Dao(更新のみ)", "generate")); + this.ddlMode1.SelectedIndex = 0; + + // ddlMode2 + this.ddlMode2.Items.Add(new ComboBoxItem("静的クエリ", "static")); + this.ddlMode2.Items.Add(new ComboBoxItem("動的クエリ", "dynamic")); + this.ddlMode2.SelectedIndex = 0; + + // ddlIso + this.ddlIso.Items.Add(new ComboBoxItem("ノットコネクト", "NC")); + this.ddlIso.Items.Add(new ComboBoxItem("ノートランザクション", "NT")); + this.ddlIso.Items.Add(new ComboBoxItem("ダーティリード", "RU")); + this.ddlIso.Items.Add(new ComboBoxItem("リードコミット", "RC")); + this.ddlIso.Items.Add(new ComboBoxItem("リピータブルリード", "RR")); + this.ddlIso.Items.Add(new ComboBoxItem("シリアライザブル", "SZ")); + this.ddlIso.Items.Add(new ComboBoxItem("スナップショット", "SS")); + this.ddlIso.Items.Add(new ComboBoxItem("デフォルト", "DF")); + this.ddlIso.SelectedIndex = 1; + + // WSでは使用しない(設定できないので)。 + this.ddlIso.IsEnabled = false; + + // ddlExRollback + this.ddlExRollback.Items.Add(new ComboBoxItem("正常時", "-")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外", "Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外", "System")); + this.ddlExRollback.Items.Add(new ComboBoxItem("その他、一般的な例外", "Other")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外への振替", "Other-Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外への振替", "Other-System")); + this.ddlExRollback.SelectedIndex = 0; + + // ddlTransmission + this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET Webサービス呼出", "testWebService")); + this.ddlTransmission.Items.Add(new ComboBoxItem("WCF Webサービス呼出", "testWebService2")); + this.ddlTransmission.Items.Add(new ComboBoxItem("WCF TCPサービス呼出", "testWebService3")); + this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET WebAPI呼出", "testWebService4")); + this.ddlTransmission.Items.Add(new ComboBoxItem("インプロセス呼出", "testInProcess")); + this.ddlTransmission.SelectedIndex = 0; + + // ddlOrderColumn + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c1", "c1")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c2", "c2")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c3", "c3")); + this.ddlOrderColumn.SelectedIndex = 0; + + // ddlOrderSequence + this.ddlOrderSequence.Items.Add(new ComboBoxItem("ASC", "A")); + this.ddlOrderSequence.Items.Add(new ComboBoxItem("DESC", "D")); + this.ddlOrderSequence.SelectedIndex = 0; + + // ユーザ情報 + this.myUserInfo = new MyUserInfo("userName", Environment.MachineName); + + // 呼出し制御部品 + this.CallCtrl = new CallController(""); + + // スレッドプール + ThreadPool.SetMinThreads(10, 10); // 待機状態スレッド数 + ThreadPool.SetMaxThreads(10, 10); // 最大スレッド起動数 + } + + #region コンボボックス用 + + /// コンボボックス用インナークラス + private class ComboBoxItem + { + /// 表示名 + private string m_name = ""; + + /// + private string m_value = ""; + + /// コンストラクタ + public ComboBoxItem(string name, string value) + { + m_name = name; + m_value = value; + } + + /// 表示名 + public string Name + { + get + { + return m_name; + } + } + + /// + public string Value + { + get + { + return m_value; + } + } + + /// + /// オーバーライドしたメソッド + /// これがコンボボックスに表示される + /// + public override string ToString() + { + return m_name; + } + } + + #endregion + + #endregion + + #region CRUD処理メソッド + + #region 参照系 + + /// 件数取得 + /// + /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 + /// (非同期実行、結果表示の双方に匿名デリゲードを使用するパターン) + /// + private void button1_Click(object sender, RoutedEventArgs e) + { + // 非同期処理クラスを生成 + // 匿名デリゲードの場合は、ベース2で良い。 + MyBaseAsyncFunc af = new MyBaseAsyncFunc(this); + + // 引数を纏め非同期処理クラスに設定 + af.Parameter = (object)new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectCount", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 画面上のデータは退避する + //(オブジェクトであれば、クローンする。) + string logicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; + + // 非同期実行するメソッドを指定(匿名デリゲード) + // ここは副スレッドから実行されるので注意 + // (画面上のメンバに触らないこと!)。 + af.AsyncFunc = delegate(object param) + { + // 引数クラス(キャスト) + TestParameterValue testParameterValue = (TestParameterValue)param; + + // 戻り値 + TestReturnValue testReturnValue; + + // 呼出し制御部品(スレッドセーフでないため副スレッド内で作る) + CallController callCtrl = new CallController(""); + + // Invoke + testReturnValue = (TestReturnValue)callCtrl.Invoke( + logicalName, testParameterValue); + + //// 進捗表示のテスト + //af.ChangeProgress = delegate(object o) + //{ + // MessageBox.Show(o.ToString()); + //}; + + //af.ExecChangeProgress("進捗表示"); + + //// 非同期メッセージボックス表示のテスト + //MessageBoxResult mr = af.ShowAsyncMessageBoxWPF( + // "メッセージ", "タイトル", MessageBoxButton.YesNo, MessageBoxImage.Information); + //// 非同期メッセージボックス表示のテスト(エラー) + //System.Windows.Forms.DialogResult dr = af.ShowAsyncMessageBoxWin("メッセージ", "タイトル", + // System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Information); + + // 結果表示 + return testReturnValue; + }; + + // 結果表示のメソッドを指定(匿名デリゲード) + // このメソッドは必ず主スレッドで実行される。 + // (画面上のメンバを更新できる!)。 + af.SetResult = delegate(object retVal) + { + if (retVal is Exception) + { + // 例外発生時 + RcMyCmnFunction.ShowErrorMessageWPF((Exception)retVal, "非同期処理で例外発生!"); + } + else + { + // 正常時 + + // 戻り値(キャスト) + TestReturnValue testReturnValue = (TestReturnValue)retVal; + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.labelMessage.Content = testReturnValue.Obj.ToString() + "件のデータがあります"; + } + } + }; + + // 非同期実行する。 + if (!af.StartByThreadPool()) + { + MessageBox.Show("別の非同期処理が実行中です。"); + } + } + + /// 一覧取得(dt) + private void button2_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectAll_DT", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGrid1.Columns.Clear(); + this.dataGrid1.DataContext = testReturnValue.Obj; + } + } + + /// 一覧取得(ds) + private void button3_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectAll_DS", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGrid1.Columns.Clear(); + this.dataGrid1.DataContext = ((DataSet)testReturnValue.Obj).Tables[0]; + } + } + + /// 一覧取得(dr) + private void button4_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectAll_DR", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGrid1.Columns.Clear(); + this.dataGrid1.DataContext = testReturnValue.Obj; + } + } + + /// 一覧取得(動的sql) + private void button5_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "SelectAll_DSQL", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 動的SQLの要素を設定 + testParameterValue.OrderColumn = ((ComboBoxItem)this.ddlOrderColumn.SelectedItem).Value; + testParameterValue.OrderSequence = ((ComboBoxItem)this.ddlOrderSequence.SelectedItem).Value; + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGrid1.Columns.Clear(); + this.dataGrid1.DataContext = testReturnValue.Obj; + } + } + + /// 参照処理 + /// + /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 + /// (結果表示にだけ匿名デリゲードを使用するパターン) + /// + private void button6_Click(object sender, RoutedEventArgs e) + { + // 非同期処理クラスを生成 + AsyncFunc af = new AsyncFunc(this); + + // 引数を纏める + TestParameterValue testParameterValue = new TestParameterValue( + this.Name, ((Button)sender).Name, "Select", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + + // 引数を非同期処理クラスに設定 + af.Parameter = testParameterValue; + + // 画面上のデータは退避する(オブジェクトであれば、クローンする。) + af.LogicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; + + // 非同期実行するメソッドを指定 + // ここは副スレッドから実行されるので注意。 + af.AsyncFunc = new BaseAsyncFunc.AsyncFuncDelegate(af.btn6_Exec); + + // 結果表示のメソッドを指定(匿名デリゲード) + // このメソッドは必ず主スレッドで実行される。 + af.SetResult = delegate(object retVal) + { + if (retVal is Exception) + { + // 例外発生時 + RcMyCmnFunction.ShowErrorMessageWPF((Exception)retVal, "非同期処理で例外発生!"); + } + else + { + // 正常時 + + // 戻り値(キャスト) + TestReturnValue testReturnValue = (TestReturnValue)retVal; + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.textBox1.Text = testReturnValue.ShipperID.ToString(); + this.textBox2.Text = testReturnValue.CompanyName; + this.textBox3.Text = testReturnValue.Phone; + } + } + }; + + // 非同期実行する。 + if (!af.StartByThreadPool()) + { + MessageBox.Show("別の非同期処理が実行中です。"); + } + } + + #endregion + + #region 更新系 + + /// 追加処理 + private void button7_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "Insert", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 情報の設定 + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Content = testReturnValue.Obj.ToString() + "件追加"; + } + } + + /// 更新処理 + private void button8_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "Update", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Content = testReturnValue.Obj.ToString() + "件更新"; + } + } + + /// 削除処理 + private void button9_Click(object sender, RoutedEventArgs e) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, ((Button)sender).Name, "Delete", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + this.myUserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(textBox1.Text); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Content = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + labelMessage.Content = testReturnValue.Obj.ToString() + "件削除"; + } + } + + #endregion + + #endregion + + #region その他 + + /// クリア + private void button10_Click(object sender, RoutedEventArgs e) + { + this.dataGrid1.Columns.Clear(); + this.dataGrid1.DataContext = null; + } + + /// メッセージ取得(埋め込まれたリソース対応) + private void button11_Click(object sender, RoutedEventArgs e) + { + this.textBox5.Text = GetMessage.GetMessageDescription(this.textBox4.Text); + } + + /// 共有情報取得(埋め込まれたリソース対応) + private void button12_Click(object sender, RoutedEventArgs e) + { + this.textBox7.Text = GetSharedProperty.GetSharedPropertyValue(this.textBox6.Text); + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/app.config new file mode 100644 index 000000000..a3b4f1db5 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/app.config @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.Designer.cs new file mode 100644 index 000000000..8ef1d62c1 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.Designer.cs @@ -0,0 +1,73 @@ +namespace WSClientWin2_sample +{ + partial class ByReturn + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.btnStart = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(35, 12); + this.label1.TabIndex = 0; + this.label1.Text = "label1"; + // + // btnStart + // + this.btnStart.Location = new System.Drawing.Point(194, 9); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(86, 23); + this.btnStart.TabIndex = 1; + this.btnStart.Text = "開始します"; + this.btnStart.UseVisualStyleBackColor = true; + this.btnStart.Visible = false; + // + // ByReturn + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 37); + this.Controls.Add(this.btnStart); + this.Controls.Add(this.label1); + this.Name = "ByReturn"; + this.Text = "ByReturn"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnStart; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.cs new file mode 100644 index 000000000..d55fe759c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.cs @@ -0,0 +1,109 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :ByReturn +//* クラス日本語名 :初期化画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; + +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Business.RichClient.Asynchronous; +using Touryo.Infrastructure.Framework.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Asynchronous; + +namespace WSClientWin2_sample +{ + /// ByReturn + public partial class ByReturn : MyBaseControllerWin + { + /// コンストラクタ + public ByReturn() + { + InitializeComponent(); + + Program.FlagEnd = true; //フラグ初期化 + } + + /// 現在の折り返し処理回数 + private int Current = 1; + + /// フォームロードのUOCメソッド + protected override void UOC_FormInit() + { + int wait = 1; + int max = 5; + + MyBaseAsyncFunc af = new MyBaseAsyncFunc(this); + + // 非同期処理本体 + af.AsyncFunc = delegate(object param) + { + for (this.Current = 1; this.Current <= max; this.Current++) + { + // ダミー + System.Threading.Thread.Sleep(wait * 1000); + + // 進捗表示 + af.ExecChangeProgress(string.Format( + "処理中です・・・:{0}/{1}", this.Current.ToString(), max.ToString())); + } + + return "処理が完了しました。"; + }; + + // 進捗報告・無名関数デレゲード + af.ChangeProgress = delegate(object param) + { + this.label1.Text = (string)param; + }; + + // 結果設定・無名関数デレゲード + af.SetResult = delegate(object retVal) + { + if (retVal is Exception) + { + // 例外発生時 + this.label1.Text = (retVal as Exception).ToString(); + } + else + { + this.label1.Text = (string)retVal; + this.btnStart.Visible = true; + } + }; + + if (af.Start()) + { + //正常に実行 + this.label1.Text = string.Format( + "処理中です・・・:{0}/{1}", this.Current.ToString(), max.ToString()); + } + else + { + // ここは通らないが念のため + this.label1.Text = string.Format( + "非同期スレッドが最大数に達しています。:{0}", BaseAsyncFunc.ThreadCount.ToString()); + } + } + + /// 開始 + private void UOC_btnStart_Click(RcFxEventArgs rcFxEventArgs) + { + Program.FlagEnd = false; // フラグ完了 + this.Close(); + } + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/ByReturn.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.Designer.cs new file mode 100644 index 000000000..86b273a4c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.Designer.cs @@ -0,0 +1,83 @@ +namespace WSClientWin2_sample +{ + partial class Form0 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.btnOpenForm1 = new System.Windows.Forms.Button(); + this.btnClose = new System.Windows.Forms.Button(); + this.btnOpenForm3 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnOpenForm1 + // + this.btnOpenForm1.Location = new System.Drawing.Point(12, 12); + this.btnOpenForm1.Name = "btnOpenForm1"; + this.btnOpenForm1.Size = new System.Drawing.Size(518, 23); + this.btnOpenForm1.TabIndex = 0; + this.btnOpenForm1.Text = "Form1(スレッド制御と画面制御の動作確認サンプル)を開く"; + this.btnOpenForm1.UseVisualStyleBackColor = true; + // + // btnClose + // + this.btnClose.Location = new System.Drawing.Point(12, 70); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(518, 23); + this.btnClose.TabIndex = 2; + this.btnClose.Text = "終了"; + this.btnClose.UseVisualStyleBackColor = true; + // + // btnOpenForm3 + // + this.btnOpenForm3.Location = new System.Drawing.Point(12, 41); + this.btnOpenForm3.Name = "btnOpenForm3"; + this.btnOpenForm3.Size = new System.Drawing.Size(518, 23); + this.btnOpenForm3.TabIndex = 3; + this.btnOpenForm3.Text = "Form3(種々のコントロールのイベント動作サンプル)を開く"; + this.btnOpenForm3.UseVisualStyleBackColor = true; + // + // Form0 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(542, 103); + this.Controls.Add(this.btnOpenForm3); + this.Controls.Add(this.btnClose); + this.Controls.Add(this.btnOpenForm1); + this.Name = "Form0"; + this.Text = "Form0"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button btnOpenForm1; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOpenForm3; + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.cs new file mode 100644 index 000000000..ec6b1fb9b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.cs @@ -0,0 +1,61 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form0 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Presentation; + +namespace WSClientWin2_sample +{ + /// Form0 + public partial class Form0 : MyBaseControllerWin + { + /// コンストラクタ + public Form0() + { + InitializeComponent(); + } + + /// フォームロードのUOCメソッド + protected override void UOC_FormInit() + { + } + + /// Form1を表示 + private void UOC_btnOpenForm1_Click(RcFxEventArgs rcFxEventArgs) + { + Form f = new Form1(); + f.Show(); + } + + /// Form3を表示 + private void UOC_btnOpenForm3_Click(RcFxEventArgs rcFxEventArgs) + { + Form f = new Form3(); + f.Show(); + } + + /// 自分を閉じる + private void UOC_btnClose_Click(RcFxEventArgs rcFxEventArgs) + { + this.Close(); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form0.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.Designer.cs new file mode 100644 index 000000000..c94c0218b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.Designer.cs @@ -0,0 +1,299 @@ +namespace WSClientWin2_sample +{ + partial class Form1 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.btnSync = new System.Windows.Forms.Button(); + this.txtStatus = new System.Windows.Forms.TextBox(); + this.btnOpenForm2 = new System.Windows.Forms.Button(); + this.btnButton1 = new System.Windows.Forms.Button(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.btnASync = new System.Windows.Forms.Button(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.label1 = new System.Windows.Forms.Label(); + this.cbxDialog = new System.Windows.Forms.CheckBox(); + this.cbxWindow = new System.Windows.Forms.CheckBox(); + this.cbxClick = new System.Windows.Forms.CheckBox(); + this.cbxDoClick = new System.Windows.Forms.CheckBox(); + this.btnButton2 = new System.Windows.Forms.Button(); + this.btnHdnBtn1 = new Touryo.Infrastructure.Framework.RichClient.Presentation.HiddenButton(); + this.cbxDoClick2 = new System.Windows.Forms.CheckBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // btnSync + // + this.btnSync.Location = new System.Drawing.Point(201, 12); + this.btnSync.Name = "btnSync"; + this.btnSync.Size = new System.Drawing.Size(75, 23); + this.btnSync.TabIndex = 5; + this.btnSync.Text = "同期実行"; + this.btnSync.UseVisualStyleBackColor = true; + // + // txtStatus + // + this.txtStatus.Location = new System.Drawing.Point(18, 170); + this.txtStatus.MaxLength = 1000000000; + this.txtStatus.Multiline = true; + this.txtStatus.Name = "txtStatus"; + this.txtStatus.ReadOnly = true; + this.txtStatus.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtStatus.Size = new System.Drawing.Size(464, 257); + this.txtStatus.TabIndex = 6; + this.txtStatus.TextChanged += new System.EventHandler(this.txtStatus_TextChanged); + // + // btnOpenForm2 + // + this.btnOpenForm2.Location = new System.Drawing.Point(363, 12); + this.btnOpenForm2.Name = "btnOpenForm2"; + this.btnOpenForm2.Size = new System.Drawing.Size(119, 23); + this.btnOpenForm2.TabIndex = 10; + this.btnOpenForm2.Text = "Form2を開く"; + this.btnOpenForm2.UseVisualStyleBackColor = true; + // + // btnButton1 + // + this.btnButton1.Location = new System.Drawing.Point(19, 41); + this.btnButton1.Name = "btnButton1"; + this.btnButton1.Size = new System.Drawing.Size(256, 23); + this.btnButton1.TabIndex = 11; + this.btnButton1.Text = "メソッドの実装されているボタン"; + this.btnButton1.UseVisualStyleBackColor = true; + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "テスト(処理中も操作可能1)", + "テスト(処理中も操作可能2)", + "テスト(処理中も操作可能3)", + "テスト(処理中も操作可能4)", + "テスト(処理中も操作可能5)", + "テスト(処理中も操作可能6)", + "テスト(処理中も操作可能7)", + "テスト(処理中も操作可能8)", + "テスト(処理中も操作可能9)"}); + this.comboBox1.Location = new System.Drawing.Point(281, 41); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(201, 20); + this.comboBox1.TabIndex = 12; + // + // btnASync + // + this.btnASync.Location = new System.Drawing.Point(282, 12); + this.btnASync.Name = "btnASync"; + this.btnASync.Size = new System.Drawing.Size(75, 23); + this.btnASync.TabIndex = 13; + this.btnASync.Text = "非同期実行"; + this.btnASync.UseVisualStyleBackColor = true; + // + // numericUpDown1 + // + this.numericUpDown1.Location = new System.Drawing.Point(75, 15); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(120, 19); + this.numericUpDown1.TabIndex = 14; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(16, 17); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(53, 12); + this.label1.TabIndex = 15; + this.label1.Text = "実行時間"; + // + // cbxDialog + // + this.cbxDialog.AutoSize = true; + this.cbxDialog.Location = new System.Drawing.Point(18, 126); + this.cbxDialog.Name = "cbxDialog"; + this.cbxDialog.Size = new System.Drawing.Size(205, 16); + this.cbxDialog.TabIndex = 16; + this.cbxDialog.Text = "(2) 結果表示でダイアログを表示する。"; + this.cbxDialog.UseVisualStyleBackColor = true; + // + // cbxWindow + // + this.cbxWindow.AutoSize = true; + this.cbxWindow.Location = new System.Drawing.Point(18, 104); + this.cbxWindow.Name = "cbxWindow"; + this.cbxWindow.Size = new System.Drawing.Size(203, 16); + this.cbxWindow.TabIndex = 17; + this.cbxWindow.Text = "(1) 結果表示でウィンドウを表示する。"; + this.cbxWindow.UseVisualStyleBackColor = true; + // + // cbxClick + // + this.cbxClick.AutoSize = true; + this.cbxClick.Location = new System.Drawing.Point(233, 104); + this.cbxClick.Name = "cbxClick"; + this.cbxClick.Size = new System.Drawing.Size(230, 16); + this.cbxClick.TabIndex = 18; + this.cbxClick.Text = "(3) 結果表示でClickイベントを発生させる。"; + this.cbxClick.UseVisualStyleBackColor = true; + // + // cbxDoClick + // + this.cbxDoClick.AutoSize = true; + this.cbxDoClick.Location = new System.Drawing.Point(233, 126); + this.cbxDoClick.Name = "cbxDoClick"; + this.cbxDoClick.Size = new System.Drawing.Size(254, 16); + this.cbxDoClick.TabIndex = 19; + this.cbxDoClick.Text = "(4) 結果表示でDoClickでイベントを発生させる。"; + this.cbxDoClick.UseVisualStyleBackColor = true; + // + // btnButton2 + // + this.btnButton2.Location = new System.Drawing.Point(19, 70); + this.btnButton2.Name = "btnButton2"; + this.btnButton2.Size = new System.Drawing.Size(256, 23); + this.btnButton2.TabIndex = 20; + this.btnButton2.Text = "メソッドの実装されていないボタン"; + this.btnButton2.UseVisualStyleBackColor = true; + // + // btnHdnBtn1 + // + this.btnHdnBtn1.Location = new System.Drawing.Point(282, 70); + this.btnHdnBtn1.Name = "btnHdnBtn1"; + this.btnHdnBtn1.Size = new System.Drawing.Size(200, 23); + this.btnHdnBtn1.TabIndex = 21; + this.btnHdnBtn1.Text = "hiddenButton1"; + this.btnHdnBtn1.UseVisualStyleBackColor = true; + this.btnHdnBtn1.Visible = false; + // + // cbxDoClick2 + // + this.cbxDoClick2.AutoSize = true; + this.cbxDoClick2.Location = new System.Drawing.Point(18, 148); + this.cbxDoClick2.Name = "cbxDoClick2"; + this.cbxDoClick2.Size = new System.Drawing.Size(458, 16); + this.cbxDoClick2.TabIndex = 22; + this.cbxDoClick2.Text = "(5) 結果表示でDoClickでイベントを発生させ、そのイベント内で更に非同期呼び出しを行う。"; + this.cbxDoClick2.UseVisualStyleBackColor = true; + // + // panel1 + // + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.cbxDoClick2); + this.panel1.Controls.Add(this.btnSync); + this.panel1.Controls.Add(this.btnHdnBtn1); + this.panel1.Controls.Add(this.txtStatus); + this.panel1.Controls.Add(this.btnButton2); + this.panel1.Controls.Add(this.btnOpenForm2); + this.panel1.Controls.Add(this.cbxDoClick); + this.panel1.Controls.Add(this.btnButton1); + this.panel1.Controls.Add(this.cbxClick); + this.panel1.Controls.Add(this.comboBox1); + this.panel1.Controls.Add(this.cbxWindow); + this.panel1.Controls.Add(this.btnASync); + this.panel1.Controls.Add(this.cbxDialog); + this.panel1.Controls.Add(this.numericUpDown1); + this.panel1.Location = new System.Drawing.Point(12, 12); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(499, 441); + this.panel1.TabIndex = 23; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 459); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(119, 19); + this.textBox1.TabIndex = 24; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(137, 459); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(119, 19); + this.textBox2.TabIndex = 25; + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(267, 459); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(119, 19); + this.textBox3.TabIndex = 26; + // + // textBox4 + // + this.textBox4.Location = new System.Drawing.Point(392, 459); + this.textBox4.Name = "textBox4"; + this.textBox4.Size = new System.Drawing.Size(119, 19); + this.textBox4.TabIndex = 27; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(521, 494); + this.Controls.Add(this.textBox4); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.panel1); + this.Name = "Form1"; + this.Text = "Form1"; + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnSync; + private System.Windows.Forms.TextBox txtStatus; + private System.Windows.Forms.Button btnOpenForm2; + private System.Windows.Forms.Button btnButton1; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Button btnASync; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox cbxDialog; + private System.Windows.Forms.CheckBox cbxWindow; + private System.Windows.Forms.CheckBox cbxClick; + private System.Windows.Forms.CheckBox cbxDoClick; + private System.Windows.Forms.Button btnButton2; + private Touryo.Infrastructure.Framework.RichClient.Presentation.HiddenButton btnHdnBtn1; + private System.Windows.Forms.CheckBox cbxDoClick2; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TextBox textBox4; + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.cs new file mode 100644 index 000000000..4b464703e --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.cs @@ -0,0 +1,280 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form1 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Diagnostics; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Business.RichClient.Asynchronous; +using Touryo.Infrastructure.Framework.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Asynchronous; + +namespace WSClientWin2_sample +{ + /// Form1 + public partial class Form1 : MyBaseControllerWin + { + /// コンストラクタ + public Form1() + { + InitializeComponent(); + } + + /// フォームロードのUOCメソッド + protected override void UOC_FormInit() + { + this.numericUpDown1.Value = 5; + this.comboBox1.SelectedIndex = 0; + } + + /// 同期実行 + protected void UOC_btnSync_Click(RcFxEventArgs rcFxEventArgs) + { + int wait = (int)this.numericUpDown1.Value; + + this.AddStatus(string.Format("主スレッド実行中: {0}秒待つ", wait)); + + Thread.Sleep(wait * 1000); + + this.AddStatus("スレッド実行終了"); + + // 結果表示のテスト + this.TestOfResultDisplay(); + } + + /// 非同期実行 + private void UOC_btnASync_Click(RcFxEventArgs rcFxEventArgs) + { + int wait = (int)this.numericUpDown1.Value; + + MyBaseAsyncFunc af = new MyBaseAsyncFunc(this); + //MyBaseAsyncFunc af = new MyBaseAsyncFunc(this.panel1); + + // 非同期処理本体・無名関数デレゲード + af.AsyncFunc = delegate(object param) + { + // 進捗報告 + af.ExecChangeProgress(string.Format("スレッド実行中: {0}秒待つ", wait)); + + System.Threading.Thread.Sleep(wait * 1000); + + return "終わり"; + }; + + // 進捗報告・無名関数デレゲード + af.ChangeProgress = delegate(object param) + { + string text = (string)param; + this.AddStatus(text); + }; + + // 結果設定・無名関数デレゲード + af.SetResult = delegate(object retVal) + { + if (retVal is Exception) + { + // 例外発生時 + Exception ex = (Exception)retVal; + this.AddStatus(string.Format("スレッド実行終了: エラー発生:{0}", ex.Message)); + } + else + { + this.AddStatus("スレッド実行終了"); + //throw new Exception("SetResultでエラーとなった場合。"); + } + + // 結果表示のテスト + this.TestOfResultDisplay(); + + // フォーカス制御をする場合、 + this.BeginInvoke(new MethodInvoker(this.SetForcus)); + + }; + + // 非同期処理を開始させる。 + if (af.Start()) + { + this.AddStatus(string.Format( + "キューイングされました、現在のスレッド数:{0}", + BaseAsyncFunc.ThreadCount.ToString())); + } + else + { + this.AddStatus(string.Format( + "非同期スレッドが最大数に達しています。:{0}", + BaseAsyncFunc.ThreadCount.ToString())); + } + } + + /// フォーカス制御のメソッド + private void SetForcus() + { + if (this.Enabled) + { + this.textBox3.Focus(); + } + else + { + // Form.Enabled=falseの場合、再キューイング + this.BeginInvoke(new MethodInvoker(this.SetForcus)); + } + } + + /// テキストボックスに書き込み + /// 追加するテキスト + private void AddStatus(string text) + { + this.txtStatus.Text = + string.Format("{0}{1}\r\n", this.txtStatus.Text, text); + } + + /// 結果表示のテスト + private void TestOfResultDisplay() + { + if (cbxWindow.Checked) + { + // ダイアログの表示 + Form2 f = new Form2(); + f.Show(); + return; + } + else if (cbxDialog.Checked) + { + // フォームの表示 + Form2 f = new Form2(); + f.ShowDialog(); + return; + } + else if (cbxClick.Checked) + { + // PerformClickは動作しない。 + this.btnButton1.PerformClick(); + return; + } + else if (cbxDoClick.Checked || cbxDoClick2.Checked) + { + // DoClickは動作する。 + this.btnHdnBtn1.DoClick(); + return; + } + } + + /// 画面起動 + protected void UOC_btnOpenForm2_Click(RcFxEventArgs rcFxEventArgs) + { + if (MyBaseControllerWin.GetWindowsCount(typeof(Form2)) > 3) + { + MessageBox.Show("5画面以上は起動できません。"); + } + else + { + Form2 f = new Form2(); + f.Show(); + + //// イベント二重登録対策のテスト + //f.ShowDialog(); + //f.Hide(); + //f.ShowDialog(); + //// ココで、Form2のイベントが2回実行される。 + //f.Hide(); + } + } + + /// メソッド実装あり + protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) + { + MessageBox.Show("UOC_btnButton1_Click"); + } + + /// 隠しボタンのイベント実装 + protected void UOC_btnHdnBtn1_Click(RcFxEventArgs rcFxEventArgs) + { + MessageBox.Show("UOC_btnHdnBtn1_Click"); + + if (cbxDoClick2.Checked && txtStatus.Text.Length < 500) + { + //// 反転 + //cbxDoClick2.Checked = !cbxDoClick2.Checked; + + int wait = (int)this.numericUpDown1.Value; + + //MyBaseAsyncFunc af = new MyBaseAsyncFunc(this); + MyBaseAsyncFunc af = new MyBaseAsyncFunc(this.panel1); + + // 非同期処理本体・無名関数デレゲード + af.AsyncFunc = delegate(object param) + { + // 進捗報告 + af.ExecChangeProgress(string.Format("スレッド実行中: {0}秒待つ", wait)); + + System.Threading.Thread.Sleep(wait * 1000); + + return "終わり"; + }; + + // 進捗報告・無名関数デレゲード + af.ChangeProgress = delegate(object param) + { + string text = (string)param; + this.AddStatus(text); + }; + + // 結果設定・無名関数デレゲード + af.SetResult = delegate(object retVal) + { + if (retVal is Exception) + { + // 例外発生時 + Exception ex = (Exception)retVal; + this.AddStatus(string.Format("スレッド実行終了: エラー発生:{0}", ex.Message)); + } + else + { + this.AddStatus("スレッド実行終了"); + } + + // 結果表示のテスト + this.TestOfResultDisplay(); + }; + + // 非同期処理を開始させる。 + if (af.Start()) + { + this.AddStatus(string.Format( + "キューイングされました、現在のスレッド数:{0}", + BaseAsyncFunc.ThreadCount.ToString())); + } + else + { + this.AddStatus(string.Format( + "非同期スレッドが最大数に達しています。:{0}", + BaseAsyncFunc.ThreadCount.ToString())); + } + } + } + + /// SetResultで動作するか確認する。 + private void txtStatus_TextChanged(object sender, EventArgs e) + { + Debug.WriteLine("txtStatus_TextChanged"); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.Designer.cs new file mode 100644 index 000000000..cfd56fd20 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.Designer.cs @@ -0,0 +1,106 @@ +namespace WSClientWin2_sample +{ + partial class Form2 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.btnClose = new System.Windows.Forms.Button(); + this.txtStatus = new System.Windows.Forms.TextBox(); + this.txtGuid = new System.Windows.Forms.TextBox(); + this.btnFormList = new System.Windows.Forms.Button(); + this.btnFormCount = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnClose + // + this.btnClose.Location = new System.Drawing.Point(318, 12); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(78, 52); + this.btnClose.TabIndex = 0; + this.btnClose.Text = "閉じる"; + this.btnClose.UseVisualStyleBackColor = true; + // + // txtStatus + // + this.txtStatus.Location = new System.Drawing.Point(12, 70); + this.txtStatus.Name = "txtStatus"; + this.txtStatus.ReadOnly = true; + this.txtStatus.Size = new System.Drawing.Size(384, 19); + this.txtStatus.TabIndex = 1; + // + // txtGuid + // + this.txtGuid.Location = new System.Drawing.Point(12, 95); + this.txtGuid.Name = "txtGuid"; + this.txtGuid.ReadOnly = true; + this.txtGuid.Size = new System.Drawing.Size(384, 19); + this.txtGuid.TabIndex = 2; + // + // btnFormList + // + this.btnFormList.Location = new System.Drawing.Point(12, 12); + this.btnFormList.Name = "btnFormList"; + this.btnFormList.Size = new System.Drawing.Size(300, 23); + this.btnFormList.TabIndex = 3; + this.btnFormList.Text = "Formを識別するIDをリストする。"; + this.btnFormList.UseVisualStyleBackColor = true; + // + // btnFormCount + // + this.btnFormCount.Location = new System.Drawing.Point(12, 41); + this.btnFormCount.Name = "btnFormCount"; + this.btnFormCount.Size = new System.Drawing.Size(300, 23); + this.btnFormCount.TabIndex = 4; + this.btnFormCount.Text = "全Formインスタンス数を表示する。"; + this.btnFormCount.UseVisualStyleBackColor = true; + // + // Form2 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(408, 126); + this.Controls.Add(this.btnFormCount); + this.Controls.Add(this.btnFormList); + this.Controls.Add(this.txtGuid); + this.Controls.Add(this.txtStatus); + this.Controls.Add(this.btnClose); + this.Name = "Form2"; + this.Text = "Form2"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.TextBox txtStatus; + private System.Windows.Forms.TextBox txtGuid; + private System.Windows.Forms.Button btnFormList; + private System.Windows.Forms.Button btnFormCount; + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.cs new file mode 100644 index 000000000..33f935677 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.cs @@ -0,0 +1,90 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form2 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Presentation; + +namespace WSClientWin2_sample +{ + /// Form2 + public partial class Form2 : MyBaseControllerWin + { + /// テストのため画面を識別するID + public string ID = ""; + + /// コンストラクタ + public Form2() + { + InitializeComponent(); + + // テストのため画面を識別するIDを付与する。 + this.ID = Guid.NewGuid().ToString(); + } + + /// フォームロードのUOCメソッド + protected override void UOC_FormInit() + { + //base.UOC_FormInit(); + + // 画面数とIDを画面に表示する。 + this.txtStatus.Text = string.Format("現在 {0}枚目の表示", + MyBaseControllerWin.GetWindowsCount(this.GetType())); + + this.txtGuid.Text = string.Format("画面を識別するID:{0}", this.ID); + } + + /// Formを識別するIDをリストする + protected void UOC_btnFormList_Click(RcFxEventArgs rcFxEventArgs) + { + string temp = ""; + + // 当該Formインスタンスリストを取得する。 + List
fl = + MyBaseControllerWin.GetWindowInstances(this.GetType()); + + // 表示する文字列を作成する。 + foreach (Form2 f2 in fl) + { + temp += "・" + f2.ID +"\r\n"; + } + + // メッセージボックスにリストする。 + MessageBox.Show(temp, "Form2のID一覧", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + /// 全Formインスタンス数を表示する + protected void UOC_btnFormCount_Click(RcFxEventArgs rcFxEventArgs) + { + // メッセージボックスに表示する。 + MessageBox.Show(BaseControllerWin.GetWindowsCount().ToString(), + "全Formインスタンス数", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + /// 自分を閉じる + protected void UOC_btnClose_Click(RcFxEventArgs rcFxEventArgs) + { + this.Close(); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form2.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.Designer.cs new file mode 100644 index 000000000..3ddd2d43a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.Designer.cs @@ -0,0 +1,473 @@ +namespace WSClientWin2_sample +{ + partial class Form3 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form3)); + this.btnButton1 = new System.Windows.Forms.Button(); + this.cbxCheckBox1 = new System.Windows.Forms.CheckBox(); + this.cbbComboBox1 = new System.Windows.Forms.ComboBox(); + this.lbxListBox1 = new System.Windows.Forms.ListBox(); + this.pbxPictureBox1 = new System.Windows.Forms.PictureBox(); + this.rbnRadioButton1 = new System.Windows.Forms.RadioButton(); + this.rbnRadioButton2 = new System.Windows.Forms.RadioButton(); + this.pbxPictureBox2 = new System.Windows.Forms.PictureBox(); + this.lbxListBox2 = new System.Windows.Forms.ListBox(); + this.cbbComboBox2 = new System.Windows.Forms.ComboBox(); + this.cbxCheckBox2 = new System.Windows.Forms.CheckBox(); + this.btnButton2 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.btnUCRemove = new System.Windows.Forms.Button(); + this.btnUCAdd = new System.Windows.Forms.Button(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.userControl31 = new WSClientWin2_sample.UserControl3(); + this.label3 = new System.Windows.Forms.Label(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.tsmiItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiItem21ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiItem22ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiItem221ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiItem222ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiItem3 = new System.Windows.Forms.ToolStripMenuItem(); + this.btnElse1 = new System.Windows.Forms.Button(); + this.btnElse2 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pbxPictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbxPictureBox2)).BeginInit(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // btnButton1 + // + this.btnButton1.Location = new System.Drawing.Point(33, 67); + this.btnButton1.Name = "btnButton1"; + this.btnButton1.Size = new System.Drawing.Size(75, 23); + this.btnButton1.TabIndex = 0; + this.btnButton1.Text = "button1"; + this.btnButton1.UseVisualStyleBackColor = true; + // + // cbxCheckBox1 + // + this.cbxCheckBox1.AutoSize = true; + this.cbxCheckBox1.Location = new System.Drawing.Point(33, 176); + this.cbxCheckBox1.Name = "cbxCheckBox1"; + this.cbxCheckBox1.Size = new System.Drawing.Size(80, 16); + this.cbxCheckBox1.TabIndex = 1; + this.cbxCheckBox1.Text = "checkBox1"; + this.cbxCheckBox1.UseVisualStyleBackColor = true; + // + // cbbComboBox1 + // + this.cbbComboBox1.FormattingEnabled = true; + this.cbbComboBox1.Items.AddRange(new object[] { + "あああ", + "いいい", + "ううう", + "えええ"}); + this.cbbComboBox1.Location = new System.Drawing.Point(33, 198); + this.cbbComboBox1.Name = "cbbComboBox1"; + this.cbbComboBox1.Size = new System.Drawing.Size(80, 20); + this.cbbComboBox1.TabIndex = 2; + // + // lbxListBox1 + // + this.lbxListBox1.FormattingEnabled = true; + this.lbxListBox1.ItemHeight = 12; + this.lbxListBox1.Items.AddRange(new object[] { + "あああ", + "いいい", + "ううう", + "えええ"}); + this.lbxListBox1.Location = new System.Drawing.Point(33, 224); + this.lbxListBox1.Name = "lbxListBox1"; + this.lbxListBox1.Size = new System.Drawing.Size(80, 40); + this.lbxListBox1.TabIndex = 3; + // + // pbxPictureBox1 + // + this.pbxPictureBox1.ErrorImage = null; + this.pbxPictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pbxPictureBox1.Image"))); + this.pbxPictureBox1.Location = new System.Drawing.Point(33, 103); + this.pbxPictureBox1.Name = "pbxPictureBox1"; + this.pbxPictureBox1.Size = new System.Drawing.Size(75, 45); + this.pbxPictureBox1.TabIndex = 4; + this.pbxPictureBox1.TabStop = false; + // + // rbnRadioButton1 + // + this.rbnRadioButton1.AutoSize = true; + this.rbnRadioButton1.Location = new System.Drawing.Point(33, 154); + this.rbnRadioButton1.Name = "rbnRadioButton1"; + this.rbnRadioButton1.Size = new System.Drawing.Size(88, 16); + this.rbnRadioButton1.TabIndex = 5; + this.rbnRadioButton1.TabStop = true; + this.rbnRadioButton1.Text = "radioButton1"; + this.rbnRadioButton1.UseVisualStyleBackColor = true; + // + // rbnRadioButton2 + // + this.rbnRadioButton2.AutoSize = true; + this.rbnRadioButton2.Location = new System.Drawing.Point(131, 154); + this.rbnRadioButton2.Name = "rbnRadioButton2"; + this.rbnRadioButton2.Size = new System.Drawing.Size(88, 16); + this.rbnRadioButton2.TabIndex = 11; + this.rbnRadioButton2.TabStop = true; + this.rbnRadioButton2.Text = "radioButton2"; + this.rbnRadioButton2.UseVisualStyleBackColor = true; + // + // pbxPictureBox2 + // + this.pbxPictureBox2.ErrorImage = null; + this.pbxPictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pbxPictureBox2.Image"))); + this.pbxPictureBox2.Location = new System.Drawing.Point(131, 103); + this.pbxPictureBox2.Name = "pbxPictureBox2"; + this.pbxPictureBox2.Size = new System.Drawing.Size(75, 45); + this.pbxPictureBox2.TabIndex = 10; + this.pbxPictureBox2.TabStop = false; + // + // lbxListBox2 + // + this.lbxListBox2.FormattingEnabled = true; + this.lbxListBox2.ItemHeight = 12; + this.lbxListBox2.Items.AddRange(new object[] { + "あああ", + "いいい", + "ううう", + "えええ"}); + this.lbxListBox2.Location = new System.Drawing.Point(131, 224); + this.lbxListBox2.Name = "lbxListBox2"; + this.lbxListBox2.Size = new System.Drawing.Size(80, 40); + this.lbxListBox2.TabIndex = 9; + // + // cbbComboBox2 + // + this.cbbComboBox2.FormattingEnabled = true; + this.cbbComboBox2.Items.AddRange(new object[] { + "あああ", + "いいい", + "ううう", + "えええ"}); + this.cbbComboBox2.Location = new System.Drawing.Point(131, 198); + this.cbbComboBox2.Name = "cbbComboBox2"; + this.cbbComboBox2.Size = new System.Drawing.Size(80, 20); + this.cbbComboBox2.TabIndex = 8; + // + // cbxCheckBox2 + // + this.cbxCheckBox2.AutoSize = true; + this.cbxCheckBox2.Location = new System.Drawing.Point(131, 176); + this.cbxCheckBox2.Name = "cbxCheckBox2"; + this.cbxCheckBox2.Size = new System.Drawing.Size(80, 16); + this.cbxCheckBox2.TabIndex = 7; + this.cbxCheckBox2.Text = "checkBox2"; + this.cbxCheckBox2.UseVisualStyleBackColor = true; + // + // btnButton2 + // + this.btnButton2.Location = new System.Drawing.Point(131, 67); + this.btnButton2.Name = "btnButton2"; + this.btnButton2.Size = new System.Drawing.Size(75, 23); + this.btnButton2.TabIndex = 6; + this.btnButton2.Text = "button2"; + this.btnButton2.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(31, 36); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 12); + this.label1.TabIndex = 13; + this.label1.Text = "メソッドあり"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(129, 36); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(57, 12); + this.label2.TabIndex = 14; + this.label2.Text = "メソッドなし"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.groupBox5); + this.groupBox1.Controls.Add(this.btnUCRemove); + this.groupBox1.Controls.Add(this.btnUCAdd); + this.groupBox1.Controls.Add(this.groupBox4); + this.groupBox1.Controls.Add(this.groupBox3); + this.groupBox1.Controls.Add(this.groupBox2); + this.groupBox1.Location = new System.Drawing.Point(264, 10); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(685, 342); + this.groupBox1.TabIndex = 15; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "ここは、ユーザコントロール"; + // + // groupBox5 + // + this.groupBox5.Location = new System.Drawing.Point(500, 99); + this.groupBox5.Margin = new System.Windows.Forms.Padding(2); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Padding = new System.Windows.Forms.Padding(2); + this.groupBox5.Size = new System.Drawing.Size(172, 62); + this.groupBox5.TabIndex = 4; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "userControlParent-Child2"; + this.groupBox5.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.groupBox_ControlAdded); + this.groupBox5.ControlRemoved += new System.Windows.Forms.ControlEventHandler(this.groupBox_ControlRemoved); + // + // btnUCRemove + // + this.btnUCRemove.Location = new System.Drawing.Point(575, 300); + this.btnUCRemove.Name = "btnUCRemove"; + this.btnUCRemove.Size = new System.Drawing.Size(91, 23); + this.btnUCRemove.TabIndex = 5; + this.btnUCRemove.Text = "btnUCRemove"; + this.btnUCRemove.UseVisualStyleBackColor = true; + // + // btnUCAdd + // + this.btnUCAdd.Location = new System.Drawing.Point(494, 300); + this.btnUCAdd.Name = "btnUCAdd"; + this.btnUCAdd.Size = new System.Drawing.Size(75, 23); + this.btnUCAdd.TabIndex = 4; + this.btnUCAdd.Text = "btnUCAdd"; + this.btnUCAdd.UseVisualStyleBackColor = true; + // + // groupBox4 + // + this.groupBox4.Location = new System.Drawing.Point(500, 33); + this.groupBox4.Margin = new System.Windows.Forms.Padding(2); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Padding = new System.Windows.Forms.Padding(2); + this.groupBox4.Size = new System.Drawing.Size(172, 62); + this.groupBox4.TabIndex = 3; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "userControlParent-Child1"; + this.groupBox4.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.groupBox_ControlAdded); + this.groupBox4.ControlRemoved += new System.Windows.Forms.ControlEventHandler(this.groupBox_ControlRemoved); + // + // groupBox3 + // + this.groupBox3.Location = new System.Drawing.Point(263, 33); + this.groupBox3.Margin = new System.Windows.Forms.Padding(2); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Padding = new System.Windows.Forms.Padding(2); + this.groupBox3.Size = new System.Drawing.Size(226, 290); + this.groupBox3.TabIndex = 2; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "userControl32"; + this.groupBox3.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.groupBox_ControlAdded); + this.groupBox3.ControlRemoved += new System.Windows.Forms.ControlEventHandler(this.groupBox_ControlRemoved); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.userControl31); + this.groupBox2.Location = new System.Drawing.Point(19, 33); + this.groupBox2.Margin = new System.Windows.Forms.Padding(2); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Padding = new System.Windows.Forms.Padding(2); + this.groupBox2.Size = new System.Drawing.Size(226, 290); + this.groupBox2.TabIndex = 1; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "userControl31"; + // + // userControl31 + // + this.userControl31.Location = new System.Drawing.Point(6, 18); + this.userControl31.Margin = new System.Windows.Forms.Padding(4); + this.userControl31.Name = "userControl31"; + this.userControl31.Size = new System.Drawing.Size(212, 264); + this.userControl31.TabIndex = 0; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(307, 356); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(214, 12); + this.label3.TabIndex = 16; + this.label3.Text = "このFormはKeyPreviewをTrueにしています。"; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmiItem1, + this.tsmiItem2, + this.tsmiItem3}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(126, 70); + // + // tsmiItem1 + // + this.tsmiItem1.Name = "tsmiItem1"; + this.tsmiItem1.Size = new System.Drawing.Size(125, 22); + this.tsmiItem1.Text = "tsmiItem1"; + // + // tsmiItem2 + // + this.tsmiItem2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmiItem21ToolStripMenuItem, + this.tsmiItem22ToolStripMenuItem}); + this.tsmiItem2.Name = "tsmiItem2"; + this.tsmiItem2.Size = new System.Drawing.Size(125, 22); + this.tsmiItem2.Text = "tsmiItem2"; + // + // tsmiItem21ToolStripMenuItem + // + this.tsmiItem21ToolStripMenuItem.Name = "tsmiItem21ToolStripMenuItem"; + this.tsmiItem21ToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.tsmiItem21ToolStripMenuItem.Text = "tsmiItem21"; + // + // tsmiItem22ToolStripMenuItem + // + this.tsmiItem22ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmiItem221ToolStripMenuItem, + this.tsmiItem222ToolStripMenuItem}); + this.tsmiItem22ToolStripMenuItem.Name = "tsmiItem22ToolStripMenuItem"; + this.tsmiItem22ToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.tsmiItem22ToolStripMenuItem.Text = "tsmiItem22"; + // + // tsmiItem221ToolStripMenuItem + // + this.tsmiItem221ToolStripMenuItem.Name = "tsmiItem221ToolStripMenuItem"; + this.tsmiItem221ToolStripMenuItem.Size = new System.Drawing.Size(137, 22); + this.tsmiItem221ToolStripMenuItem.Text = "tsmiItem221"; + // + // tsmiItem222ToolStripMenuItem + // + this.tsmiItem222ToolStripMenuItem.Name = "tsmiItem222ToolStripMenuItem"; + this.tsmiItem222ToolStripMenuItem.Size = new System.Drawing.Size(137, 22); + this.tsmiItem222ToolStripMenuItem.Text = "tsmiItem222"; + // + // tsmiItem3 + // + this.tsmiItem3.Name = "tsmiItem3"; + this.tsmiItem3.Size = new System.Drawing.Size(125, 22); + this.tsmiItem3.Text = "tsmiItem3"; + // + // btnElse1 + // + this.btnElse1.Location = new System.Drawing.Point(12, 286); + this.btnElse1.Name = "btnElse1"; + this.btnElse1.Size = new System.Drawing.Size(236, 32); + this.btnElse1.TabIndex = 17; + this.btnElse1.Text = "いろいろテスト1"; + this.btnElse1.UseVisualStyleBackColor = true; + // + // btnElse2 + // + this.btnElse2.Location = new System.Drawing.Point(12, 324); + this.btnElse2.Name = "btnElse2"; + this.btnElse2.Size = new System.Drawing.Size(236, 32); + this.btnElse2.TabIndex = 18; + this.btnElse2.Text = "いろいろテスト2"; + this.btnElse2.UseVisualStyleBackColor = true; + // + // Form3 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(959, 377); + this.Controls.Add(this.btnElse2); + this.Controls.Add(this.btnElse1); + this.Controls.Add(this.label1); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.label2); + this.Controls.Add(this.label3); + this.Controls.Add(this.btnButton1); + this.Controls.Add(this.rbnRadioButton2); + this.Controls.Add(this.pbxPictureBox2); + this.Controls.Add(this.lbxListBox2); + this.Controls.Add(this.cbbComboBox2); + this.Controls.Add(this.cbxCheckBox2); + this.Controls.Add(this.btnButton2); + this.Controls.Add(this.rbnRadioButton1); + this.Controls.Add(this.pbxPictureBox1); + this.Controls.Add(this.lbxListBox1); + this.Controls.Add(this.cbbComboBox1); + this.Controls.Add(this.cbxCheckBox1); + this.KeyPreview = true; + this.Name = "Form3"; + this.Text = "Form3"; + ((System.ComponentModel.ISupportInitialize)(this.pbxPictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbxPictureBox2)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnButton1; + private System.Windows.Forms.CheckBox cbxCheckBox1; + private System.Windows.Forms.ComboBox cbbComboBox1; + private System.Windows.Forms.ListBox lbxListBox1; + private System.Windows.Forms.PictureBox pbxPictureBox1; + private System.Windows.Forms.RadioButton rbnRadioButton1; + private System.Windows.Forms.RadioButton rbnRadioButton2; + private System.Windows.Forms.PictureBox pbxPictureBox2; + private System.Windows.Forms.ListBox lbxListBox2; + private System.Windows.Forms.ComboBox cbbComboBox2; + private System.Windows.Forms.CheckBox cbxCheckBox2; + private System.Windows.Forms.Button btnButton2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.GroupBox groupBox1; + private UserControl3 userControl31; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem tsmiItem1; + private System.Windows.Forms.ToolStripMenuItem tsmiItem2; + private System.Windows.Forms.ToolStripMenuItem tsmiItem3; + private System.Windows.Forms.Button btnElse1; + private System.Windows.Forms.Button btnElse2; + private System.Windows.Forms.ToolStripMenuItem tsmiItem21ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tsmiItem22ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tsmiItem221ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tsmiItem222ToolStripMenuItem; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.Button btnUCRemove; + private System.Windows.Forms.Button btnUCAdd; + private System.Windows.Forms.GroupBox groupBox5; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.cs new file mode 100644 index 000000000..0dfde877a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.cs @@ -0,0 +1,600 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form3 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Diagnostics; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Business.RichClient.Util; +using Touryo.Infrastructure.Framework.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Util; + +namespace WSClientWin2_sample +{ + public partial class Form3 : MyBaseControllerWin + { + /// コンストラクタ + public Form3() + { + InitializeComponent(); + } + + /// フォームロードのUOCメソッド + protected override void UOC_FormInit() + { + // 表示する。 + this.ContextMenuStrip = this.contextMenuStrip1; + + // ここで設定する。 + this.contextMenuStrip1.Items[0].Click += new EventHandler(this.Item_Click); + this.contextMenuStrip1.Items[1].Click += new EventHandler(this.Item_Click); + this.contextMenuStrip1.Items[2].Click += new EventHandler(this.Item_Click); + + this.tsmiItem21ToolStripMenuItem.Click += new EventHandler(this.Item_Click); + this.tsmiItem22ToolStripMenuItem.Click += new EventHandler(this.Item_Click); + this.tsmiItem221ToolStripMenuItem.Click += new EventHandler(this.Item_Click); + this.tsmiItem222ToolStripMenuItem.Click += new EventHandler(this.Item_Click); + } + + #region Ctrlイベント + + /// UOC_btnButton1_Click + /// RcFxEventArgs + protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_btnButton1_Click"); + } + + /// UOC_pbxPictureBox1_Click + /// RcFxEventArgs + protected void UOC_pbxPictureBox1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_pbxPictureBox1_Click"); + } + + /// UOC_rbnRadioButton1_CheckedChanged + /// RcFxEventArgs + protected void UOC_rbnRadioButton1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_rbnRadioButton1_CheckedChanged"); + } + + /// UOC_cbxCheckBox1_CheckedChanged + /// RcFxEventArgs + protected void UOC_cbxCheckBox1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_cbxCheckBox1_CheckedChanged"); + } + + /// UOC_cbbComboBox1_SelectedIndexChanged + /// RcFxEventArgs + protected void UOC_cbbComboBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_cbbComboBox1_SelectedIndexChanged"); + } + + /// UOC_lbxListBox1_SelectedIndexChanged + /// RcFxEventArgs + protected void UOC_lbxListBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_lbxListBox1_SelectedIndexChanged"); + } + + /// UOC_tsmiItem1_Click + /// RcFxEventArgs + protected void UOC_tsmiItem1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_tsmiItem1_Click"); + } + + /// UOC_tsmiItem2_Click + /// RcFxEventArgs + protected void UOC_tsmiItem2_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_tsmiItem2_Click"); + } + + /// UOC_tsmiItem21_Click + /// RcFxEventArgs + protected void UOC_tsmiItem21_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_tsmiItem21_Click"); + } + + /// UOC_tsmiItem22_Click + /// RcFxEventArgs + protected void UOC_tsmiItem22_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_tsmiItem22_Click"); + } + + /// UOC_tsmiItem221_Click + /// RcFxEventArgs + protected void UOC_tsmiItem221_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_tsmiItem221_Click"); + } + + /// UOC_tsmiItem222_Click + /// RcFxEventArgs + protected void UOC_tsmiItem222_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_tsmiItem222_Click"); + } + + /// UOC_tsmiItem3_Click + /// RcFxEventArgs + protected void UOC_tsmiItem3_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_tsmiItem3_Click"); + } + + /// テスト1 + protected void UOC_btnElse1_Click(RcFxEventArgs rcFxEventArgs) + { + // newだけした場合・・・ + Form f = new Form2(); + + MessageBox.Show("画面総数:" + BaseControllerWin.GetWindowsCount().ToString() + + ", Form2総数:" + BaseControllerWin.GetWindowsCount(typeof(Form2)).ToString()); + } + + /// テスト2 + protected void UOC_btnElse2_Click(RcFxEventArgs rcFxEventArgs) + { + //throw new Exception("てすと"); + + Thread th = new Thread(new ThreadStart(this.ThMe)); + th.Start(); + } + + /// バックグラウンド・スレッド + private void ThMe() + { + throw new Exception("てすと"); + } + + #endregion + + #region Formイベント + // プロジェクト独自 + + /// UOC_Form_Enter_KeyDown + /// RcFxEventArgs + protected void UOC_Form_Enter_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_Enter_KeyDown"); + } + + /// UOC_Form_F1_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F1_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F1_KeyDown"); + } + + /// UOC_Form_F2_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F2_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F2_KeyDown"); + } + + /// UOC_Form_F3_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F3_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F3_KeyDown"); + } + + /// UOC_Form_F4_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F4_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F4_KeyDown"); + } + + /// UOC_Form_F5_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F5_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F5_KeyDown"); + } + + /// UOC_Form_F6_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F6_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F6_KeyDown"); + } + + /// UOC_Form_F7_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F7_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F7_KeyDown"); + } + + /// UOC_Form_F8_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F8_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F8_KeyDown"); + } + + /// UOC_Form_F9_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F9_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F9_KeyDown"); + } + + /// UOC_Form_F10_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F10_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F10_KeyDown"); + } + + /// UOC_Form_F11_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F11_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F11_KeyDown"); + } + + /// UOC_Form_F12_KeyDown + /// RcFxEventArgs + protected void UOC_Form_F12_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_F12_KeyDown"); + } + + /// UOC_Form_AltAndF4_KeyDown + /// RcFxEventArgs + protected void UOC_Form_AltAndF4_KeyDown(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_AltAndF4_KeyDown"); + } + + /// UOC_Form_Closing + /// RcFxEventArgs + protected void UOC_Form_Closing(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_Form_Closing"); + } + + #endregion + + #region 未解放イベント + + // ログが出過ぎるので + + ///// UOC_Form_KeyDown + ///// RcFxEventArgs + //protected void UOC_Form_KeyDown(RcFxEventArgs rcFxEventArgs) + //{ + // Debug.WriteLine("UOC_Form_KeyDown"); + //} + + ///// UOC_Form_KeyPress + ///// RcFxEventArgs + //protected void UOC_Form_KeyPress(RcFxEventArgs rcFxEventArgs) + //{ + // Debug.WriteLine("UOC_Form_KeyPress"); + //} + + ///// UOC_Form_KeyUp + ///// RcFxEventArgs + //protected void UOC_Form_KeyUp(RcFxEventArgs rcFxEventArgs) + //{ + // Debug.WriteLine("UOC_Form_KeyUp"); + //} + + #endregion + + #region UserControlイベント + + // UserControlよりFormに実装されたメソッドが優先される。 + // ※ ボタン名は一意である必要がある(イベントを識別できなくなる)。 + + // #region UserControlイベント ~ #endregionをコメント・アウトすると、 + // User Control上のイベント・ハンドラが呼び出される。 + + #region userControl3 + + /// UOC_userControl31_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_userControl3_btnUCButton1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl3_btnUCButton1_Click"); + } + + /// UOC_userControl31_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_userControl3_pbxUCPictureBox1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl3_pbxUCPictureBox1_Click"); + } + + /// UOC_userControl31_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_userControl3_rbnUCRadioButton1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl3_rbnUCRadioButton1_CheckedChanged"); + } + + /// UOC_userControl31_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_userControl3_cbxUCCheckBox1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl3_cbxUCCheckBox1_CheckedChanged"); + } + + /// UOC_userControl31_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_userControl3_cbbUCComboBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl3_cbbUCComboBox1_SelectedIndexChanged"); + } + + /// UOC_userControl31_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_userControl3_lbxUCListBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl3_lbxUCListBox1_SelectedIndexChanged"); + } + + #endregion + + #region userControl31 + + /// UOC_userControl31_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_userControl31_btnUCButton1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl31_btnUCButton1_Click"); + } + + /// UOC_userControl31_pbxUCPictureBox1_Click + /// RcFxEventArgs + protected void UOC_userControl31_pbxUCPictureBox1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl31_pbxUCPictureBox1_Click"); + } + + /// UOC_userControl31_rbnUCRadioButton1_CheckedChanged + /// RcFxEventArgs + protected void UOC_userControl31_rbnUCRadioButton1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl31_rbnUCRadioButton1_CheckedChanged"); + } + + /// UOC_userControl31_cbxUCCheckBox1_CheckedChanged + /// RcFxEventArgs + protected void UOC_userControl31_cbxUCCheckBox1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl31_cbxUCCheckBox1_CheckedChanged"); + } + + /// UOC_userControl31_cbbUCComboBox1_SelectedIndexChanged + /// RcFxEventArgs + protected void UOC_userControl31_cbbUCComboBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl31_cbbUCComboBox1_SelectedIndexChanged"); + } + + /// UOC_userControl31_lbxUCListBox1_SelectedIndexChanged + /// RcFxEventArgs + protected void UOC_userControl31_lbxUCListBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl31_lbxUCListBox1_SelectedIndexChanged"); + } + + #endregion + + #region userControl32 + + /// UOC_userControl32_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_userControl32_btnUCButton1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl32_btnUCButton1_Click"); + } + + /// UOC_userControl32_pbxUCPictureBox1_Click + /// RcFxEventArgs + protected void UOC_userControl32_pbxUCPictureBox1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl32_pbxUCPictureBox1_Click"); + } + + /// UOC_userControl32_rbnUCRadioButton1_CheckedChanged + /// RcFxEventArgs + protected void UOC_userControl32_rbnUCRadioButton1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl32_rbnUCRadioButton1_CheckedChanged"); + } + + /// UOC_userControl32_cbxUCCheckBox1_CheckedChanged + /// RcFxEventArgs + protected void UOC_userControl32_cbxUCCheckBox1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl32_cbxUCCheckBox1_CheckedChanged"); + } + + /// UOC_userControl32_cbbUCComboBox1_SelectedIndexChanged + /// RcFxEventArgs + protected void UOC_userControl32_cbbUCComboBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl32_cbbUCComboBox1_SelectedIndexChanged"); + } + + /// UOC_userControl32_lbxUCListBox1_SelectedIndexChanged + /// RcFxEventArgs + protected void UOC_userControl32_lbxUCListBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_userControl32_lbxUCListBox1_SelectedIndexChanged"); + } + + #endregion + + #region userControlChild + + ///// UOC_userControlChild_btnUCButton1_Click + ///// RcFxEventArgs + //protected void UOC_userControlChild_btnUCButton1_Click(RcFxEventArgs rcFxEventArgs) + //{ + // Debug.WriteLine("UOC_userControlChild_btnUCButton1_Click"); + //} + + #endregion + + #endregion + + #region UserControlの動的な追加/削除 + + /// UOC_btnUCAdd_Click + /// RcFxEventArgs + protected void UOC_btnUCAdd_Click(RcFxEventArgs rcFxEventArgs) + { + // userControl32の動的ロード + UserControl3 userControl32 = new UserControl3(); + userControl32.Location = new System.Drawing.Point(8, 23); + userControl32.Margin = new Padding(5); + userControl32.Name = "userControl32"; + userControl32.Size = new System.Drawing.Size(283, 330); + userControl32.TabIndex = 0; + this.groupBox3.Controls.Add(userControl32); + + + // userControlParentの動的ロード + UserControlParent userControlParent = null; + + userControlParent = new UserControlParent(); + userControlParent.Location = new System.Drawing.Point(5, 17); + userControlParent.Name = "userControlParent1"; + userControlParent.Size = new System.Drawing.Size(160, 40); + userControlParent.TabIndex = 0; + this.groupBox4.Controls.Add(userControlParent); + + userControlParent = new UserControlParent(); + userControlParent.Location = new System.Drawing.Point(5, 17); + userControlParent.Name = "userControlParent2"; + userControlParent.Size = new System.Drawing.Size(160, 40); + userControlParent.TabIndex = 0; + this.groupBox5.Controls.Add(userControlParent); + } + + /// UOC_btnUCRemove_Click + /// RcFxEventArgs + protected void UOC_btnUCRemove_Click(RcFxEventArgs rcFxEventArgs) + { + this.groupBox3.Controls.RemoveByKey("userControl32"); + this.groupBox4.Controls.RemoveByKey("userControlParent1"); + this.groupBox5.Controls.RemoveByKey("userControlParent2"); + } + + /// MethodInvoker + /// Type + /// T + delegate void MethodInvoker(T obj); + + /// 動的に追加したコントロールをLstUserControlに追加する + /// object + /// ControlEventArgs + private void groupBox_ControlAdded(object sender, ControlEventArgs e) + { + // UOC_イベントハンドラ内で追加/削除すると例外が発生するのでBeginInvokeで書く。 + this.BeginInvoke( + (MethodInvoker)((x) => + { + // UserControlの追加処理 + if (x is UserControl) + { + // コントロール検索&イベントハンドラ設定(ルートから1回だけ行う) + RcFxCmnFunction.GetCtrlAndSetClickEventHandler2( + x, this.CreatePrefixAndEvtHndHt(), this.ControlHt); // Base + RcMyCmnFunction.GetCtrlAndSetClickEventHandler2( + x, this.MyCreatePrefixAndEvtHndHt(), this.ControlHt); // MyBase + + // UserControlのLstUserControlへの追加(は再帰的に行う) + this.AddToLstUserControl(x); + } + }), + new object[] { e.Control }); + } + + /// AddToLstUserControl + /// Control + private void AddToLstUserControl(Control c) + { + // UserControlの追加 + if (c is UserControl) + { + this.LstUserControl.Add((UserControl)c); + } + + // 再帰検索 + foreach (Control _c in c.Controls) + { + this.AddToLstUserControl(_c); + } + } + + /// 動的に追加したコントロールをLstUserControlから削除する + /// object + /// ControlEventArgs + private void groupBox_ControlRemoved(object sender, ControlEventArgs e) + { + // UOC_イベントハンドラ内で追加/削除すると例外が発生するのでBeginInvokeで書く。 + this.BeginInvoke( + (MethodInvoker) ((x) => + { + // UserControlのLstUserControlからの削除(は再帰的に行う) + if (x is UserControl) + { + this.RemoveFromLstUserControl(x); + } + }), + new object[] { e.Control }); + } + + /// RemoveFromLstUserControl + /// Control + private void RemoveFromLstUserControl(Control c) + { + // UserControlの削除 + if (c is UserControl) + { + this.LstUserControl.Remove((UserControl)c); + } + + // 再帰検索 + foreach (Control _c in c.Controls) + { + this.RemoveFromLstUserControl(_c); + } + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.resx new file mode 100644 index 000000000..2d404e16c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Form3.resx @@ -0,0 +1,1040 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + /9j/4AAQSkZJRgABAgEBLAEsAAD/7gAOQWRvYmUAZAAAAAAB/+EASkV4aWYAAE1NACoAAAAIAAMBGgAF + AAAAAQAAADIBGwAFAAAAAQAAADoBKAADAAAAAQACAAAAAAAAASwAAAABAAABLAAAAAEAAP/bAEMADAgI + CAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM + DP/bAEMBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwM + DAwMDAwMDAwMDP/AABEIAlgDIAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJ + Cgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKC + CQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImK + kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T1 + 9vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncA + AQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RF + RkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 + tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APTc0Zpu + 4Um7861scnMPzRmmZFLmiwcw7NGabmjNFg5h2aM03NGaVg5h3NGabmjNOwcw7NGabmjNKwXHZozTc0Zo + sHMOzRmkzRmgdx2aM03NGaLC5h2aKbmjNFguOzRmm5ozRYdx2aM03NGaLBcdmjNJmigdxaM0maM0WDmH + ZpM0maM0WDmFzRSZozQFxaM0lJmgLjs0ZpuaM0WDmHUZpM0ZosFxc0ZpuaXIosHMOzRTc0ZosFx2aM03 + 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 + KKbCJIh/KhumBz60UUdCeo126Ainbcrx1oooH0VhCPl96YaKKQ0Oj/8A106TnpRRT6CfxCIvQn/IqTI7 + 9aKKaFLcjY8j+VAwf60UUdR9Bw54pCCMiiimIOc5o7ZoooAXn6U3ndj9KKKARJjOBSMMMQP0oooEJjAp + o6cdKKKBocPu/U0inBOKKKA7iv60IPlxjmiigOgEfJnFC8j3oooDp8xV5GDxmmZx+VFFALqPTsPzpq8H + H4UUUB3F6MR6d6XqQaKKBDSMNx3NPPFFFAPoMY4x705TRRQPof/Z + + + + + /9j/4AAQSkZJRgABAgEBLAEsAAD/7gAOQWRvYmUAZAAAAAAB/+EASkV4aWYAAE1NACoAAAAIAAMBGgAF + AAAAAQAAADIBGwAFAAAAAQAAADoBKAADAAAAAQACAAAAAAAAASwAAAABAAABLAAAAAEAAP/bAEMADAgI + CAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM + DP/bAEMBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwM + DAwMDAwMDAwMDP/AABEIAlgDIAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJ + Cgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKC + CQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImK + kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T1 + 9vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncA + AQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RF + RkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 + 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 + + + + 17, 17 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.Designer.cs new file mode 100644 index 000000000..9e28cf6d0 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.Designer.cs @@ -0,0 +1,81 @@ +namespace WSClientWin2_sample +{ + partial class Login + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.btnButton1 = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // btnButton1 + // + this.btnButton1.Location = new System.Drawing.Point(118, 12); + this.btnButton1.Name = "btnButton1"; + this.btnButton1.Size = new System.Drawing.Size(75, 44); + this.btnButton1.TabIndex = 2; + this.btnButton1.Text = "ログイン"; + this.btnButton1.UseVisualStyleBackColor = true; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(100, 19); + this.textBox1.TabIndex = 0; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(12, 37); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(100, 19); + this.textBox2.TabIndex = 1; + this.textBox2.UseSystemPasswordChar = true; + // + // Login + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(202, 70); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.btnButton1); + this.Name = "Login"; + this.Text = "login"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnButton1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.cs new file mode 100644 index 000000000..94d9d1575 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.cs @@ -0,0 +1,55 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :login +//* クラス日本語名 :ログイン画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* +//********************************************************************************** + +using System; + +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Presentation; + +namespace WSClientWin2_sample +{ + /// login + public partial class Login : MyBaseControllerWin + { + /// コンストラクタ + public Login() + { + InitializeComponent(); + + Program.FlagEnd = true; //フラグ初期化 + } + + /// フォームロードのUOCメソッド + protected override void UOC_FormInit() + { + } + + /// ログイン + /// イベントハンドラの共通引数 + protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) + { + MyBaseControllerWin.UserInfo.UserName = this.textBox1.Text; + MyBaseControllerWin.UserInfo.IPAddress = Environment.MachineName; + + Program.FlagEnd = false; // フラグ完了 + this.Close(); + } + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Login.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/MSGDefinition.xml new file mode 100644 index 000000000..f2283b409 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/MSGDefinition.xml @@ -0,0 +1,23 @@ + + + + +]> + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Program.cs new file mode 100644 index 000000000..af7942923 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Program.cs @@ -0,0 +1,126 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :アプリケーションのメイン エントリ ポイント +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Util; + +namespace WSClientWin2_sample +{ + /// アプリケーションのメイン エントリ ポイント + static class Program + { + /// 終了するかどうかを表すフラグ + public static bool FlagEnd = true; + + /// + /// アプリケーションのメイン エントリ ポイントです。 + /// + [STAThread] + static void Main() + { + // 既定の処理 + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + // UnhandledExceptionイベント・ハンドラを登録する + Thread.GetDomain().UnhandledException += new + UnhandledExceptionEventHandler(Application_UnhandledException); + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // スプラッシュ画面の表示 + Splash.ShowSplash(new Login()); + + // <スピンロック> + // SleepすればCPUオーバヘッドはほとんど無いが + // Sleep時間を長く、ループ回数を短くする + // ことでよりCPUオーバヘッドを軽減できる。 + + for (int i = 0; i < 30; i++ ) + { + if (Splash.SpinLock) + { + break; // 直ちに抜ける + } + + Thread.Sleep(100); + } + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // 次の画面(ログイン画面)の表示 + Application.Run(Splash.NextForm); + if(Program.FlagEnd) + { + return; // ログインしないで終わった場合 + } + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // 初期化画面の表示 + Application.Run(new ByReturn()); + if (Program.FlagEnd) + { + return; // 初期化しないで終わった場合 + } + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // 業務画面の表示(業務の開始) + Application.Run(new Form0()); + } + + // .NET TIPS > 適切に処理されなかった例外をキャッチするには? + // http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html + + /// + /// 未処理例外をキャッチするイベント・ハンドラ + /// + public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) + { + RcMyCmnFunction.ShowErrorMessageWin(e.Exception, "Application_ThreadExceptionによる例外通知です。"); + } + + /// + /// 未処理例外をキャッチするイベント・ハンドラ + /// + /// + /// メイン・スレッド以外の例外はUnhandledExceptionでハンドル + /// + public static void Application_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + Exception ex = e.ExceptionObject as Exception; + if (ex != null) + { + RcMyCmnFunction.ShowErrorMessageWin(ex, "Application_UnhandledExceptionによる例外通知です。"); + } + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..6a6f6fb69 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Properties/AssemblyInfo.cs @@ -0,0 +1,51 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("WSClientWin2_sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("WSClientWin2_sample")] +[assembly: AssemblyCopyright("Copyright (C) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です +[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SPDefinition.xml new file mode 100644 index 000000000..6baf634bc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SPDefinition.xml @@ -0,0 +1,15 @@ + + + + +]> + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SampleLogConf2CS.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SampleLogConf2CS.xml new file mode 100644 index 000000000..e39f2b3fe --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SampleLogConf2CS.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.Designer.cs new file mode 100644 index 000000000..56ca97661 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.Designer.cs @@ -0,0 +1,60 @@ +namespace WSClientWin2_sample +{ + partial class Splash + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("MS UI Gothic", 64F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label1.Location = new System.Drawing.Point(15, 93); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(262, 86); + this.label1.TabIndex = 0; + this.label1.Text = "splash"; + // + // Splash + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 273); + this.Controls.Add(this.label1); + this.Name = "Splash"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.cs new file mode 100644 index 000000000..a71905989 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.cs @@ -0,0 +1,188 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Splash +//* クラス日本語名 :スプラッシュ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Windows.Forms; + +using Touryo.Infrastructure.Public.Log; + +namespace WSClientWin2_sample +{ + /// + /// スプラッシュ画面 + /// + /// + /// DOBON.NET > プログラミング道 > .NET Tips + /// > フォーム > スプラッシュウィンドウを表示する + /// http://dobon.net/vb/dotnet/form/splashwindow.html + /// + /// ここでは、フレームワークは使用しない。 + /// + public partial class Splash : Form + { + /// コンストラクタ + public Splash() + { + InitializeComponent(); + + // プロパティの初期化 + this.TopMost = true; + this.ShowInTaskbar = false; + this.FormBorderStyle = FormBorderStyle.None; + this.StartPosition = FormStartPosition.CenterScreen; + + // イベントの設定 + this.Click += new System.EventHandler(Splash.Splash_Click); + this.label1.Click += new System.EventHandler(Splash.Splash_Click); + + // ログの初期化 + LogIF.InfoLog("ACCESS", "Splash"); + } + + /// + /// スプラッシュ画面のクリックイベント + /// + private static void Splash_Click(object sender, EventArgs e) + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // スピンロックを終了させ次画面を表示する。 + Splash._spinLock = true; + } + + #region 静的変数 + + /// 実行済みフラグ + private static bool _hasExecuted = false; + + /// スプラッシュ画面表示スレッド + private static Thread _thread = null; + + /// スピンロック用フラグ + /// volatile:スレッドセーフ + private static volatile bool _spinLock = false; + + /// スピンロック用フラグ(Getter) + public static bool SpinLock + { + get { return Splash._spinLock; } + } + + /// スプラッシュ画面(シングルトン) + /// volatile:スレッドセーフ + private static volatile Splash _splashForm = new Splash(); + + /// 次の画面(シングルトン) + /// volatile:スレッドセーフ + private static volatile Form _nextForm = null; + + /// 次の画面(Getter) + public static Form NextForm + { + get { return Splash._nextForm; } + } + + #endregion + + #region スプラッシュ画面を表示する + + /// スプラッシュ画面を表示する + /// 次の画面 + public static void ShowSplash(Form nextForm) + { + // 主スレッド(スプラッシュ画面を生成していないスレッド) + + // 二回以上は起動できない。 + if (Splash._hasExecuted) + { + return; + } + else + { + Splash._hasExecuted = true; + } + + #region スプラッシュ画面を表示 + + // 次の画面を設定する。 + Splash._nextForm = nextForm; +   + // スレッドの作成 + Splash._thread = new Thread( + new ThreadStart(ShowSplashByThread)); + + // スレッドの開始 + Splash._thread.Start(); + + #endregion + } + + /// Thread関数でスプラッシュ画面を表示する。 + private static void ShowSplashByThread() + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // スプラッシュ画面を + + // ・作成 + Splash._splashForm = new Splash(); + + // ・閉じるイベントハンドラを仕掛 + Splash._nextForm.Activated += new EventHandler(Splash.Login_Activated); + + // ・表示 + Application.Run(Splash._splashForm); + } + + #endregion + + #region スプラッシュ画面を閉じる + + /// + /// ログイン画面がアクティブになった時、スプラッシュ画面を閉じる + /// + private static void Login_Activated(object sender, EventArgs e) + { + // 主スレッド(スプラッシュ画面を生成していないスレッド) + + // なので、スプラッシュ画面を閉じるメソッドをInvoke + if (Splash._splashForm != null && !Splash._splashForm.IsDisposed) + { + Splash._splashForm.Invoke(new MethodInvoker(Splash.CloseSplash)); + } + + // nullクリア + Splash._splashForm = null; + Splash._nextForm = null; + Splash._thread = null; + } + + /// スプラッシュ画面を閉じる。 + private static void CloseSplash() + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // なので、スプラッシュ画面をそのまま閉じる + Splash._splashForm.Close(); + } + + #endregion + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Splash.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.Designer.cs new file mode 100644 index 000000000..5f60f7fc0 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.Designer.cs @@ -0,0 +1,247 @@ +namespace WSClientWin2_sample +{ + partial class UserControl3 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region コンポーネント デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UserControl3)); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.rbnUCRadioButton2 = new System.Windows.Forms.RadioButton(); + this.pbxUCPictureBox2 = new System.Windows.Forms.PictureBox(); + this.lbxUCListBox2 = new System.Windows.Forms.ListBox(); + this.cbbUCComboBox2 = new System.Windows.Forms.ComboBox(); + this.cbxUCCheckBox2 = new System.Windows.Forms.CheckBox(); + this.btnUCButton2 = new System.Windows.Forms.Button(); + this.rbnUCRadioButton1 = new System.Windows.Forms.RadioButton(); + this.pbxUCPictureBox1 = new System.Windows.Forms.PictureBox(); + this.lbxUCListBox1 = new System.Windows.Forms.ListBox(); + this.cbbUCComboBox1 = new System.Windows.Forms.ComboBox(); + this.cbxUCCheckBox1 = new System.Windows.Forms.CheckBox(); + this.btnUCButton1 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pbxUCPictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbxUCPictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(115, 17); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(57, 12); + this.label2.TabIndex = 28; + this.label2.Text = "メソッドなし"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(17, 17); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 12); + this.label1.TabIndex = 27; + this.label1.Text = "メソッドあり"; + // + // rbnUCRadioButton2 + // + this.rbnUCRadioButton2.AutoSize = true; + this.rbnUCRadioButton2.Location = new System.Drawing.Point(117, 135); + this.rbnUCRadioButton2.Name = "rbnUCRadioButton2"; + this.rbnUCRadioButton2.Size = new System.Drawing.Size(88, 16); + this.rbnUCRadioButton2.TabIndex = 26; + this.rbnUCRadioButton2.TabStop = true; + this.rbnUCRadioButton2.Text = "radioButton2"; + this.rbnUCRadioButton2.UseVisualStyleBackColor = true; + // + // pbxUCPictureBox2 + // + this.pbxUCPictureBox2.ErrorImage = null; + this.pbxUCPictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pbxUCPictureBox2.Image"))); + this.pbxUCPictureBox2.Location = new System.Drawing.Point(117, 84); + this.pbxUCPictureBox2.Name = "pbxUCPictureBox2"; + this.pbxUCPictureBox2.Size = new System.Drawing.Size(75, 45); + this.pbxUCPictureBox2.TabIndex = 25; + this.pbxUCPictureBox2.TabStop = false; + // + // lbxUCListBox2 + // + this.lbxUCListBox2.FormattingEnabled = true; + this.lbxUCListBox2.ItemHeight = 12; + this.lbxUCListBox2.Items.AddRange(new object[] { + "あああ", + "いいい", + "ううう", + "えええ"}); + this.lbxUCListBox2.Location = new System.Drawing.Point(117, 205); + this.lbxUCListBox2.Name = "lbxUCListBox2"; + this.lbxUCListBox2.Size = new System.Drawing.Size(80, 40); + this.lbxUCListBox2.TabIndex = 24; + // + // cbbUCComboBox2 + // + this.cbbUCComboBox2.FormattingEnabled = true; + this.cbbUCComboBox2.Items.AddRange(new object[] { + "あああ", + "いいい", + "ううう", + "えええ"}); + this.cbbUCComboBox2.Location = new System.Drawing.Point(117, 179); + this.cbbUCComboBox2.Name = "cbbUCComboBox2"; + this.cbbUCComboBox2.Size = new System.Drawing.Size(80, 20); + this.cbbUCComboBox2.TabIndex = 23; + // + // cbxUCCheckBox2 + // + this.cbxUCCheckBox2.AutoSize = true; + this.cbxUCCheckBox2.Location = new System.Drawing.Point(117, 157); + this.cbxUCCheckBox2.Name = "cbxUCCheckBox2"; + this.cbxUCCheckBox2.Size = new System.Drawing.Size(80, 16); + this.cbxUCCheckBox2.TabIndex = 22; + this.cbxUCCheckBox2.Text = "checkBox2"; + this.cbxUCCheckBox2.UseVisualStyleBackColor = true; + // + // btnUCButton2 + // + this.btnUCButton2.Location = new System.Drawing.Point(117, 48); + this.btnUCButton2.Name = "btnUCButton2"; + this.btnUCButton2.Size = new System.Drawing.Size(75, 23); + this.btnUCButton2.TabIndex = 21; + this.btnUCButton2.Text = "button2"; + this.btnUCButton2.UseVisualStyleBackColor = true; + // + // rbnUCRadioButton1 + // + this.rbnUCRadioButton1.AutoSize = true; + this.rbnUCRadioButton1.Location = new System.Drawing.Point(19, 135); + this.rbnUCRadioButton1.Name = "rbnUCRadioButton1"; + this.rbnUCRadioButton1.Size = new System.Drawing.Size(88, 16); + this.rbnUCRadioButton1.TabIndex = 20; + this.rbnUCRadioButton1.TabStop = true; + this.rbnUCRadioButton1.Text = "radioButton1"; + this.rbnUCRadioButton1.UseVisualStyleBackColor = true; + // + // pbxUCPictureBox1 + // + this.pbxUCPictureBox1.ErrorImage = null; + this.pbxUCPictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pbxUCPictureBox1.Image"))); + this.pbxUCPictureBox1.Location = new System.Drawing.Point(19, 84); + this.pbxUCPictureBox1.Name = "pbxUCPictureBox1"; + this.pbxUCPictureBox1.Size = new System.Drawing.Size(75, 45); + this.pbxUCPictureBox1.TabIndex = 19; + this.pbxUCPictureBox1.TabStop = false; + // + // lbxUCListBox1 + // + this.lbxUCListBox1.FormattingEnabled = true; + this.lbxUCListBox1.ItemHeight = 12; + this.lbxUCListBox1.Items.AddRange(new object[] { + "あああ", + "いいい", + "ううう", + "えええ"}); + this.lbxUCListBox1.Location = new System.Drawing.Point(19, 205); + this.lbxUCListBox1.Name = "lbxUCListBox1"; + this.lbxUCListBox1.Size = new System.Drawing.Size(80, 40); + this.lbxUCListBox1.TabIndex = 18; + // + // cbbUCComboBox1 + // + this.cbbUCComboBox1.FormattingEnabled = true; + this.cbbUCComboBox1.Items.AddRange(new object[] { + "あああ", + "いいい", + "ううう", + "えええ"}); + this.cbbUCComboBox1.Location = new System.Drawing.Point(19, 179); + this.cbbUCComboBox1.Name = "cbbUCComboBox1"; + this.cbbUCComboBox1.Size = new System.Drawing.Size(80, 20); + this.cbbUCComboBox1.TabIndex = 17; + // + // cbxUCCheckBox1 + // + this.cbxUCCheckBox1.AutoSize = true; + this.cbxUCCheckBox1.Location = new System.Drawing.Point(19, 157); + this.cbxUCCheckBox1.Name = "cbxUCCheckBox1"; + this.cbxUCCheckBox1.Size = new System.Drawing.Size(80, 16); + this.cbxUCCheckBox1.TabIndex = 16; + this.cbxUCCheckBox1.Text = "checkBox1"; + this.cbxUCCheckBox1.UseVisualStyleBackColor = true; + // + // btnUCButton1 + // + this.btnUCButton1.Location = new System.Drawing.Point(19, 48); + this.btnUCButton1.Name = "btnUCButton1"; + this.btnUCButton1.Size = new System.Drawing.Size(75, 23); + this.btnUCButton1.TabIndex = 15; + this.btnUCButton1.Text = "button1"; + this.btnUCButton1.UseVisualStyleBackColor = true; + // + // UserControl3 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.rbnUCRadioButton2); + this.Controls.Add(this.pbxUCPictureBox2); + this.Controls.Add(this.lbxUCListBox2); + this.Controls.Add(this.cbbUCComboBox2); + this.Controls.Add(this.cbxUCCheckBox2); + this.Controls.Add(this.btnUCButton2); + this.Controls.Add(this.rbnUCRadioButton1); + this.Controls.Add(this.pbxUCPictureBox1); + this.Controls.Add(this.lbxUCListBox1); + this.Controls.Add(this.cbbUCComboBox1); + this.Controls.Add(this.cbxUCCheckBox1); + this.Controls.Add(this.btnUCButton1); + this.Name = "UserControl3"; + this.Size = new System.Drawing.Size(212, 264); + ((System.ComponentModel.ISupportInitialize)(this.pbxUCPictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbxUCPictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.RadioButton rbnUCRadioButton2; + private System.Windows.Forms.PictureBox pbxUCPictureBox2; + private System.Windows.Forms.ListBox lbxUCListBox2; + private System.Windows.Forms.ComboBox cbbUCComboBox2; + private System.Windows.Forms.CheckBox cbxUCCheckBox2; + private System.Windows.Forms.Button btnUCButton2; + private System.Windows.Forms.RadioButton rbnUCRadioButton1; + private System.Windows.Forms.PictureBox pbxUCPictureBox1; + private System.Windows.Forms.ListBox lbxUCListBox1; + private System.Windows.Forms.ComboBox cbbUCComboBox1; + private System.Windows.Forms.CheckBox cbxUCCheckBox1; + private System.Windows.Forms.Button btnUCButton1; + + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.cs new file mode 100644 index 000000000..56502b097 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.cs @@ -0,0 +1,78 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :UserControl3 +//* クラス日本語名 :UserControl3 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//* +//********************************************************************************** + +using System.Diagnostics; +using System.Windows.Forms; +using Touryo.Infrastructure.Framework.RichClient.Presentation; + +namespace WSClientWin2_sample +{ + /// UserControl3 + public partial class UserControl3 : UserControl + { + /// constructor + public UserControl3() + { + InitializeComponent(); + } + + /// UOC_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_btnUCButton1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_btnUCButton1_Click"); + } + + /// UOC_pbxUCPictureBox1_Click + /// RcFxEventArgs + protected void UOC_pbxUCPictureBox1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_pbxUCPictureBox1_Click"); + } + + /// UOC_rbnUCRadioButton1_CheckedChanged + /// RcFxEventArgs + protected void UOC_rbnUCRadioButton1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_rbnUCRadioButton1_CheckedChanged"); + } + + /// UOC_cbxUCCheckBox1_CheckedChanged + /// RcFxEventArgs + protected void UOC_cbxUCCheckBox1_CheckedChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_cbxUCCheckBox1_CheckedChanged"); + } + + /// UOC_cbbUCComboBox1_SelectedIndexChanged + /// RcFxEventArgs + protected void UOC_cbbUCComboBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_cbbUCComboBox1_SelectedIndexChanged"); + } + + /// UOC_lbxUCListBox1_SelectedIndexChanged + /// RcFxEventArgs + protected void UOC_lbxUCListBox1_SelectedIndexChanged(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine("UOC_lbxUCListBox1_SelectedIndexChanged"); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.resx new file mode 100644 index 000000000..aa6999f66 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControl3.resx @@ -0,0 +1,1115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QlMUGhvdG9zaG9wIDMuMAA4QklNA+0KUmVzb2x1dGlvbgAAAAAQ + ASwAAAABAAEBLAAAAAEAAThCSU0EDRhGWCBHbG9iYWwgTGlnaHRpbmcgQW5nbGUAAAAABAAAAHg4QklN + BBkSRlggR2xvYmFsIEFsdGl0dWRlAAAAAAQAAAAeOEJJTQPzC1ByaW50IEZsYWdzAAAACQAAAAAAAAAA + AQA4QklNBAoOQ29weXJpZ2h0IEZsYWcAAAAAAQAAOEJJTScQFEphcGFuZXNlIFByaW50IEZsYWdzAAAA + AAoAAQAAAAAAAAACOEJJTQP1F0NvbG9yIEhhbGZ0b25lIFNldHRpbmdzAAAASAAvZmYAAQBsZmYABgAA + AAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThC + SU0D+BdDb2xvciBUcmFuc2ZlciBTZXR0aW5ncwAAAHAAAP////////////////////////////8D6AAA + AAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP// + //////////////////////////8D6AAAOEJJTQQIBkd1aWRlcwAAAAAQAAAAAQAAAkAAAAJAAAAAADhC + SU0EHg1VUkwgb3ZlcnJpZGVzAAAABAAAAAA4QklNBBoGU2xpY2VzAAAAAHUAAAAGAAAAAAAAAAAAAAJY + AAADIAAAAAoAVQBuAHQAaQB0AGwAZQBkAC0AMQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA + AAADIAAAAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOEJJTQQREUlDQyBVbnRhZ2dl + ZCBGbGFnAAAAAQEAOEJJTQQUF0xheWVyIElEIEdlbmVyYXRvciBCYXNlAAAABAAAAAI4QklNBAwVTmV3 + IFdpbmRvd3MgVGh1bWJuYWlsAAAFpAAAAAEAAABwAAAAVAAAAVAAAG5AAAAFiAAYAAH/2P/gABBKRklG + AAECAQBIAEgAAP/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgR + 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 + WVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfI + ycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYH + CAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy + 0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz + 9PX29/j5+v/aAAwDAQACEQMRAD8A9NzRmm7hSbvzrWxycw/NGaZkUuaLBzDs0ZpuaM0WDmHZozTc0ZpW + DmHc0ZpuaM07BzDs0ZpuaM0rBcdmjNNzRmiwcw7NGaTNGaB3HZozTc0ZosLmHZopuaM0WC47NGabmjNF + h3HZozTc0ZosFx2aM0maKB3FozSZozRYOYdmkzSZozRYOYXNFJmjNAXFozSUmaAuOzRmm5ozRYOYdRmk + zRmiwXFzRmm5pciiwcw7NFNzRmiwXHZozTc0ZpDuOozTc0ZoC46jNNzRmgLjs0ZpuaWgLi5ozTc0ZoC4 + 7NGabmjNAXHZpKTNFMLjs0ZptFAXHZozTc0ZoC47NGaTNJmkFx2aM0lGaAuLRmm0ZoC47NGabmjNAXHU + U3NLmgLi5ozSZozQFxaM03NLmgLi0ZpuaXNA7i0ZpM0ZoC4tGaTNGaAuLmjNJmkzRYVxc0ZpM0hbr3p2 + FzDs0ZqJpHA4Xk9BUOydjktj2qlHu7ESq22TZbzRmqghlB+/+NSRhh1Yn3ocV3uJVW94tE+aM0wZHejd + zU2L5h+aMmm5ozRYLjt1G6m5pM0WDmH7qM0zNGaLBzD80ZpmaM0WDnH5ozTM0ZosPnI80ZNNJNANXYxu + OzzRmm5//XSmiwri5Of5UZpM0Z/SiwXFzS7u1NzRmiwXHZozTetGfyosFx27mjdTKM8UWHcfuo3cVHmg + HmiwXJN35Uu7io93AoBNFguSbqN1MzxijNFguP3UbqZn8aM0WC4/NG6mUZPaiwXH7qN1MzQCaLBckzRu + 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 + FA+h/9k= + + + + + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QlMUGhvdG9zaG9wIDMuMAA4QklNA+0KUmVzb2x1dGlvbgAAAAAQ + ASwAAAABAAEBLAAAAAEAAThCSU0EDRhGWCBHbG9iYWwgTGlnaHRpbmcgQW5nbGUAAAAABAAAAHg4QklN + BBkSRlggR2xvYmFsIEFsdGl0dWRlAAAAAAQAAAAeOEJJTQPzC1ByaW50IEZsYWdzAAAACQAAAAAAAAAA + AQA4QklNBAoOQ29weXJpZ2h0IEZsYWcAAAAAAQAAOEJJTScQFEphcGFuZXNlIFByaW50IEZsYWdzAAAA + AAoAAQAAAAAAAAACOEJJTQP1F0NvbG9yIEhhbGZ0b25lIFNldHRpbmdzAAAASAAvZmYAAQBsZmYABgAA + AAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThC + SU0D+BdDb2xvciBUcmFuc2ZlciBTZXR0aW5ncwAAAHAAAP////////////////////////////8D6AAA + AAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP// + //////////////////////////8D6AAAOEJJTQQIBkd1aWRlcwAAAAAQAAAAAQAAAkAAAAJAAAAAADhC + SU0EHg1VUkwgb3ZlcnJpZGVzAAAABAAAAAA4QklNBBoGU2xpY2VzAAAAAHUAAAAGAAAAAAAAAAAAAAJY + AAADIAAAAAoAVQBuAHQAaQB0AGwAZQBkAC0AMQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA + AAADIAAAAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOEJJTQQREUlDQyBVbnRhZ2dl + ZCBGbGFnAAAAAQEAOEJJTQQUF0xheWVyIElEIEdlbmVyYXRvciBCYXNlAAAABAAAAAI4QklNBAwVTmV3 + IFdpbmRvd3MgVGh1bWJuYWlsAAAFpAAAAAEAAABwAAAAVAAAAVAAAG5AAAAFiAAYAAH/2P/gABBKRklG + AAECAQBIAEgAAP/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgR + 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 + WVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfI + ycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYH + CAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy + 0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz + 9PX29/j5+v/aAAwDAQACEQMRAD8A9NzRmm7hSbvzrWxycw/NGaZkUuaLBzDs0ZpuaM0WDmHZozTc0ZpW + DmHc0ZpuaM07BzDs0ZpuaM0rBcdmjNNzRmiwcw7NGaTNGaB3HZozTc0ZosLmHZopuaM0WC47NGabmjNF + h3HZozTc0ZosFx2aM0maKB3FozSZozRYOYdmkzSZozRYOYXNFJmjNAXFozSUmaAuOzRmm5ozRYOYdRmk + zRmiwXFzRmm5pciiwcw7NFNzRmiwXHZozTc0ZpDuOozTc0ZoC46jNNzRmgLjs0ZpuaWgLi5ozTc0ZoC4 + 7NGabmjNAXHZpKTNFMLjs0ZptFAXHZozTc0ZoC47NGaTNJmkFx2aM0lGaAuLRmm0ZoC47NGabmjNAXHU + U3NLmgLi5ozSZozQFxaM03NLmgLi0ZpuaXNA7i0ZpM0ZoC4tGaTNGaAuLmjNJmkzRYVxc0ZpM0hbr3p2 + FzDs0ZqJpHA4Xk9BUOydjktj2qlHu7ESq22TZbzRmqghlB+/+NSRhh1Yn3ocV3uJVW94tE+aM0wZHejd + zU2L5h+aMmm5ozRYLjt1G6m5pM0WDmH7qM0zNGaLBzD80ZpmaM0WDnH5ozTM0ZosPnI80ZNNJNANXYxu + OzzRmm5//XSmiwri5Of5UZpM0Z/SiwXFzS7u1NzRmiwXHZozTetGfyosFx27mjdTKM8UWHcfuo3cVHmg + HmiwXJN35Uu7io93AoBNFguSbqN1MzxijNFguP3UbqZn8aM0WC4/NG6mUZPaiwXH7qN1MzQCaLBckzRu + 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 + FA+h/9k= + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.Designer.cs new file mode 100644 index 000000000..e309aac50 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.Designer.cs @@ -0,0 +1,58 @@ +namespace WSClientWin2_sample +{ + partial class UserControlChild + { + /// + /// 必要なデザイナー変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースを破棄する場合は true を指定し、その他の場合は false を指定します。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region コンポーネント デザイナーで生成されたコード + + /// + /// デザイナー サポートに必要なメソッドです。このメソッドの内容を + /// コード エディターで変更しないでください。 + /// + private void InitializeComponent() + { + this.btnUCButton1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnUCButton1 + // + this.btnUCButton1.Location = new System.Drawing.Point(3, 3); + this.btnUCButton1.Name = "btnUCButton1"; + this.btnUCButton1.Size = new System.Drawing.Size(144, 23); + this.btnUCButton1.TabIndex = 0; + this.btnUCButton1.Text = "button1"; + this.btnUCButton1.UseVisualStyleBackColor = true; + // + // UserControlChild + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.btnUCButton1); + this.Name = "UserControlChild"; + this.Size = new System.Drawing.Size(150, 30); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button btnUCButton1; + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.cs new file mode 100644 index 000000000..ee427d112 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.cs @@ -0,0 +1,44 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :UserControlChild +//* クラス日本語名 :UserControlChild +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Diagnostics; +using System.Windows.Forms; +using Touryo.Infrastructure.Framework.RichClient.Presentation; + +namespace WSClientWin2_sample +{ + /// UserControlChild + public partial class UserControlChild : UserControl + { + /// constructor + public UserControlChild() + { + InitializeComponent(); + } + + /// UOC_btnUCButton1_Click + /// RcFxEventArgs + protected void UOC_btnUCButton1_Click(RcFxEventArgs rcFxEventArgs) + { + Debug.WriteLine( + (((Control)rcFxEventArgs.Sender).Parent.Parent.Parent).Name + + " : UOC_btnUCButton1_Click"); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlChild.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.Designer.cs new file mode 100644 index 000000000..9075cfc75 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.Designer.cs @@ -0,0 +1,68 @@ +namespace WSClientWin2_sample +{ + partial class UserControlParent + { + /// + /// 必要なデザイナー変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースを破棄する場合は true を指定し、その他の場合は false を指定します。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region コンポーネント デザイナーで生成されたコード + + /// + /// デザイナー サポートに必要なメソッドです。このメソッドの内容を + /// コード エディターで変更しないでください。 + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.userControlChild = new WSClientWin2_sample.UserControlChild(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.userControlChild); + this.panel1.Location = new System.Drawing.Point(3, 3); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(155, 35); + this.panel1.TabIndex = 0; + // + // userControlChild + // + this.userControlChild.Location = new System.Drawing.Point(3, 3); + this.userControlChild.Name = "userControlChild"; + this.userControlChild.Size = new System.Drawing.Size(150, 30); + this.userControlChild.TabIndex = 0; + // + // UserControlParent + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panel1); + this.Name = "UserControlParent"; + this.Size = new System.Drawing.Size(160, 40); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private UserControlChild userControlChild; + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.cs new file mode 100644 index 000000000..c307e9666 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.cs @@ -0,0 +1,33 @@ +//********************************************************************************** +//* Windows Forms用 P層 フレームワーク・テスト アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :UserControlParent +//* クラス日本語名 :UserControlParent +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Windows.Forms; + +namespace WSClientWin2_sample +{ + /// UserControlParent + public partial class UserControlParent : UserControl + { + /// constructor + public UserControlParent() + { + InitializeComponent(); + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/UserControlParent.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj new file mode 100644 index 000000000..db68c015a --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj @@ -0,0 +1,211 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {386EA604-40DB-44A8-87AE-F29B209BA9CF} + WinExe + Properties + WSClientWin2_sample + WSClientWin2_sample + v4.6 + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + + + + Form + + + ByReturn.cs + + + Form + + + Form0.cs + + + Form + + + Form1.cs + + + Form + + + Form2.cs + + + Form + + + Form3.cs + + + Form + + + Login.cs + + + + + Form + + + Splash.cs + + + UserControl + + + UserControl3.cs + + + UserControl + + + UserControlChild.cs + + + UserControl + + + UserControlParent.cs + + + + + Designer + Form0.cs + + + Designer + Form1.cs + + + Designer + Form2.cs + + + UserControlChild.cs + + + UserControlParent.cs + + + + + Designer + ByReturn.cs + + + Login.cs + Designer + + + Designer + Splash.cs + + + + + Designer + Form3.cs + + + Designer + UserControl3.cs + + + + + + + + Always + + + Always + + + Always + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.sln new file mode 100644 index 000000000..01c2ce261 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.sln @@ -0,0 +1,35 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WSClientWin2_sample", "WSClientWin2_sample.csproj", "{386EA604-40DB-44A8-87AE-F29B209BA9CF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|.NET = Debug|.NET + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Release|.NET = Release|.NET + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|.NET.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|.NET.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.Build.0 = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/app.config new file mode 100644 index 000000000..543368267 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/app.config @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/AsyncFunc.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/AsyncFunc.cs new file mode 100644 index 000000000..f32aff560 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/AsyncFunc.cs @@ -0,0 +1,78 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AsyncFunc +//* クラス日本語名 :サンプル アプリ 非同期処理クラス +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using WSIFType_sample; + +using Touryo.Infrastructure.Business.RichClient.Asynchronous; +using Touryo.Infrastructure.Framework.Transmission; + +namespace WSClientWinCone_sample +{ + public class AsyncFunc : MyBaseAsyncFunc + { + /// サービスの論理名称 + public string LogicalName; + + /// コンストラクタ + /// WPFやWinFormの要素 + public AsyncFunc(object _this) : base(_this) { } + + /// 非同期 + /// 引数 + /// 結果 + /// + /// ここは副スレッドから実行されるので注意。 + /// 非同期処理クラスに非同期処理を定義すると、 + /// メンバ変数を引数として利用できる。 + /// + public object btn6_Exec(object param) + { + // 戻り値(キャスト) + TestParameterValue testParameterValue = (TestParameterValue)param; + + // 戻り値 + TestReturnValue testReturnValue; + + // 呼出し制御部品(スレッドセーフでないため副スレッド内で作る) + CallController callCtrl = new CallController(Program.AccessToken); + + // Invoke + testReturnValue = (TestReturnValue)callCtrl.Invoke( + this.LogicalName, testParameterValue); + + //// 進捗表示のテスト + //this.ChangeProgress = delegate(object o) + //{ + // MessageBox.Show(o.ToString()); + //}; + + //this.ExecChangeProgress("進捗表示"); + + //// 非同期メッセージボックス表示のテスト + //DialogResult dr = this.ShowAsyncMessageBoxWin( + // "メッセージ", "タイトル", MessageBoxButtons.YesNo, MessageBoxIcon.Information); + //// 非同期メッセージボックス表示のテスト(エラー) + //System.Windows.MessageBoxResult mr = this.ShowAsyncMessageBoxWPF("メッセージ", "タイトル", + // System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Information); + + // 結果表示 + return testReturnValue; + } + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.Designer.cs new file mode 100644 index 000000000..9583cade5 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.Designer.cs @@ -0,0 +1,443 @@ +namespace WSClientWinCone_sample +{ + partial class Form1 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.label11 = new System.Windows.Forms.Label(); + this.labelMessage = new System.Windows.Forms.Label(); + this.btnButton10 = new System.Windows.Forms.Button(); + this.btnButton9 = new System.Windows.Forms.Button(); + this.btnButton8 = new System.Windows.Forms.Button(); + this.btnButton7 = new System.Windows.Forms.Button(); + this.btnButton6 = new System.Windows.Forms.Button(); + this.btnButton5 = new System.Windows.Forms.Button(); + this.btnButton4 = new System.Windows.Forms.Button(); + this.btnButton3 = new System.Windows.Forms.Button(); + this.btnButton2 = new System.Windows.Forms.Button(); + this.btnButton1 = new System.Windows.Forms.Button(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.label10 = new System.Windows.Forms.Label(); + this.ddlOrderSequence = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.ddlOrderColumn = new System.Windows.Forms.ComboBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.ddlExRollback = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.ddlIso = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.ddlMode2 = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.ddlMode1 = new System.Windows.Forms.ComboBox(); + this.ddlDap = new System.Windows.Forms.ComboBox(); + this.label16 = new System.Windows.Forms.Label(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.btnButton12 = new System.Windows.Forms.Button(); + this.label15 = new System.Windows.Forms.Label(); + this.textBox6 = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.btnButton11 = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.ddlTransmission = new System.Windows.Forms.ComboBox(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.SuspendLayout(); + // + // label11 + // + resources.ApplyResources(this.label11, "label11"); + this.label11.Name = "label11"; + // + // labelMessage + // + resources.ApplyResources(this.labelMessage, "labelMessage"); + this.labelMessage.Name = "labelMessage"; + // + // btnButton10 + // + resources.ApplyResources(this.btnButton10, "btnButton10"); + this.btnButton10.Name = "btnButton10"; + this.btnButton10.UseVisualStyleBackColor = true; + // + // btnButton9 + // + resources.ApplyResources(this.btnButton9, "btnButton9"); + this.btnButton9.Name = "btnButton9"; + this.btnButton9.UseVisualStyleBackColor = true; + // + // btnButton8 + // + resources.ApplyResources(this.btnButton8, "btnButton8"); + this.btnButton8.Name = "btnButton8"; + this.btnButton8.UseVisualStyleBackColor = true; + // + // btnButton7 + // + resources.ApplyResources(this.btnButton7, "btnButton7"); + this.btnButton7.Name = "btnButton7"; + this.btnButton7.UseVisualStyleBackColor = true; + // + // btnButton6 + // + resources.ApplyResources(this.btnButton6, "btnButton6"); + this.btnButton6.Name = "btnButton6"; + this.btnButton6.UseVisualStyleBackColor = true; + // + // btnButton5 + // + resources.ApplyResources(this.btnButton5, "btnButton5"); + this.btnButton5.Name = "btnButton5"; + this.btnButton5.UseVisualStyleBackColor = true; + // + // btnButton4 + // + resources.ApplyResources(this.btnButton4, "btnButton4"); + this.btnButton4.Name = "btnButton4"; + this.btnButton4.UseVisualStyleBackColor = true; + // + // btnButton3 + // + resources.ApplyResources(this.btnButton3, "btnButton3"); + this.btnButton3.Name = "btnButton3"; + this.btnButton3.UseVisualStyleBackColor = true; + // + // btnButton2 + // + resources.ApplyResources(this.btnButton2, "btnButton2"); + this.btnButton2.Name = "btnButton2"; + this.btnButton2.UseVisualStyleBackColor = true; + // + // btnButton1 + // + resources.ApplyResources(this.btnButton1, "btnButton1"); + this.btnButton1.Name = "btnButton1"; + this.btnButton1.UseVisualStyleBackColor = true; + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + resources.ApplyResources(this.dataGridView1, "dataGridView1"); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.RowTemplate.Height = 21; + // + // label10 + // + resources.ApplyResources(this.label10, "label10"); + this.label10.Name = "label10"; + // + // ddlOrderSequence + // + this.ddlOrderSequence.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlOrderSequence.FormattingEnabled = true; + resources.ApplyResources(this.ddlOrderSequence, "ddlOrderSequence"); + this.ddlOrderSequence.Name = "ddlOrderSequence"; + // + // label9 + // + resources.ApplyResources(this.label9, "label9"); + this.label9.Name = "label9"; + // + // ddlOrderColumn + // + this.ddlOrderColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlOrderColumn.FormattingEnabled = true; + resources.ApplyResources(this.ddlOrderColumn, "ddlOrderColumn"); + this.ddlOrderColumn.Name = "ddlOrderColumn"; + // + // textBox3 + // + resources.ApplyResources(this.textBox3, "textBox3"); + this.textBox3.Name = "textBox3"; + // + // textBox2 + // + resources.ApplyResources(this.textBox2, "textBox2"); + this.textBox2.Name = "textBox2"; + // + // label8 + // + resources.ApplyResources(this.label8, "label8"); + this.label8.Name = "label8"; + // + // label7 + // + resources.ApplyResources(this.label7, "label7"); + this.label7.Name = "label7"; + // + // label6 + // + resources.ApplyResources(this.label6, "label6"); + this.label6.Name = "label6"; + // + // textBox1 + // + resources.ApplyResources(this.textBox1, "textBox1"); + this.textBox1.Name = "textBox1"; + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // ddlExRollback + // + this.ddlExRollback.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlExRollback.FormattingEnabled = true; + resources.ApplyResources(this.ddlExRollback, "ddlExRollback"); + this.ddlExRollback.Name = "ddlExRollback"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // ddlIso + // + this.ddlIso.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlIso.FormattingEnabled = true; + resources.ApplyResources(this.ddlIso, "ddlIso"); + this.ddlIso.Name = "ddlIso"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // ddlMode2 + // + this.ddlMode2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlMode2.FormattingEnabled = true; + resources.ApplyResources(this.ddlMode2, "ddlMode2"); + this.ddlMode2.Name = "ddlMode2"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // ddlMode1 + // + this.ddlMode1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlMode1.FormattingEnabled = true; + resources.ApplyResources(this.ddlMode1, "ddlMode1"); + this.ddlMode1.Name = "ddlMode1"; + // + // ddlDap + // + this.ddlDap.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlDap.FormattingEnabled = true; + resources.ApplyResources(this.ddlDap, "ddlDap"); + this.ddlDap.Name = "ddlDap"; + // + // label16 + // + resources.ApplyResources(this.label16, "label16"); + this.label16.Name = "label16"; + // + // textBox7 + // + resources.ApplyResources(this.textBox7, "textBox7"); + this.textBox7.Name = "textBox7"; + // + // btnButton12 + // + resources.ApplyResources(this.btnButton12, "btnButton12"); + this.btnButton12.Name = "btnButton12"; + this.btnButton12.UseVisualStyleBackColor = true; + // + // label15 + // + resources.ApplyResources(this.label15, "label15"); + this.label15.Name = "label15"; + // + // textBox6 + // + resources.ApplyResources(this.textBox6, "textBox6"); + this.textBox6.Name = "textBox6"; + // + // label14 + // + resources.ApplyResources(this.label14, "label14"); + this.label14.Name = "label14"; + // + // textBox5 + // + resources.ApplyResources(this.textBox5, "textBox5"); + this.textBox5.Name = "textBox5"; + // + // btnButton11 + // + resources.ApplyResources(this.btnButton11, "btnButton11"); + this.btnButton11.Name = "btnButton11"; + this.btnButton11.UseVisualStyleBackColor = true; + // + // label13 + // + resources.ApplyResources(this.label13, "label13"); + this.label13.Name = "label13"; + // + // textBox4 + // + resources.ApplyResources(this.textBox4, "textBox4"); + this.textBox4.Name = "textBox4"; + // + // label12 + // + resources.ApplyResources(this.label12, "label12"); + this.label12.Name = "label12"; + // + // ddlTransmission + // + this.ddlTransmission.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlTransmission.FormattingEnabled = true; + resources.ApplyResources(this.ddlTransmission, "ddlTransmission"); + this.ddlTransmission.Name = "ddlTransmission"; + // + // Form1 + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label12); + this.Controls.Add(this.ddlTransmission); + this.Controls.Add(this.label16); + this.Controls.Add(this.textBox7); + this.Controls.Add(this.btnButton12); + this.Controls.Add(this.label15); + this.Controls.Add(this.textBox6); + this.Controls.Add(this.label14); + this.Controls.Add(this.textBox5); + this.Controls.Add(this.btnButton11); + this.Controls.Add(this.label13); + this.Controls.Add(this.textBox4); + this.Controls.Add(this.label11); + this.Controls.Add(this.labelMessage); + this.Controls.Add(this.btnButton10); + this.Controls.Add(this.btnButton9); + this.Controls.Add(this.btnButton8); + this.Controls.Add(this.btnButton7); + this.Controls.Add(this.btnButton6); + this.Controls.Add(this.btnButton5); + this.Controls.Add(this.btnButton4); + this.Controls.Add(this.btnButton3); + this.Controls.Add(this.btnButton2); + this.Controls.Add(this.btnButton1); + this.Controls.Add(this.dataGridView1); + this.Controls.Add(this.label10); + this.Controls.Add(this.ddlOrderSequence); + this.Controls.Add(this.label9); + this.Controls.Add(this.ddlOrderColumn); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.label8); + this.Controls.Add(this.label7); + this.Controls.Add(this.label6); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label5); + this.Controls.Add(this.ddlExRollback); + this.Controls.Add(this.label4); + this.Controls.Add(this.ddlIso); + this.Controls.Add(this.label3); + this.Controls.Add(this.ddlMode2); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.ddlMode1); + this.Controls.Add(this.ddlDap); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Form1"; + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label labelMessage; + private System.Windows.Forms.Button btnButton10; + private System.Windows.Forms.Button btnButton9; + private System.Windows.Forms.Button btnButton8; + private System.Windows.Forms.Button btnButton7; + private System.Windows.Forms.Button btnButton6; + private System.Windows.Forms.Button btnButton5; + private System.Windows.Forms.Button btnButton4; + private System.Windows.Forms.Button btnButton3; + private System.Windows.Forms.Button btnButton2; + private System.Windows.Forms.Button btnButton1; + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.ComboBox ddlOrderSequence; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.ComboBox ddlOrderColumn; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ComboBox ddlExRollback; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox ddlIso; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox ddlMode2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox ddlMode1; + private System.Windows.Forms.ComboBox ddlDap; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.Button btnButton12; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox textBox6; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.Button btnButton11; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.ComboBox ddlTransmission; + } +} + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.cs new file mode 100644 index 000000000..5999e0d83 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.cs @@ -0,0 +1,699 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form1 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using WSIFType_sample; + +using System; +using System.Data; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Business.RichClient.Asynchronous; +using Touryo.Infrastructure.Business.RichClient.Util; + +using Touryo.Infrastructure.Framework.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Asynchronous; +using Touryo.Infrastructure.Framework.Transmission; +using Touryo.Infrastructure.Framework.Util; + +namespace WSClientWinCone_sample +{ + /// サンプル アプリ画面 + public partial class Form1 : MyBaseControllerWin + { + /// 呼出し制御部品 + CallController CallCtrl; + + #region 初期処理 + + public Form1() + { + InitializeComponent(); + } + + /// + /// フォームロードのUOCメソッド + /// + protected override void UOC_FormInit() + { + // フォーム初期化(初回ロード)時に実行する処理を実装する + + // TODO: + MyBaseControllerWin.CanOutPutLog = false; + + // ddlDap + this.ddlDap.Items.Add(new ComboBoxItem("SQL Server / SQL Client", "SQL")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / OLEDB.NET", "OLE")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / ODCB.NET", "ODB")); + this.ddlDap.Items.Add(new ComboBoxItem("Oracle / ODP.NET", "ODP")); + this.ddlDap.Items.Add(new ComboBoxItem("DB2 / DB2.NET", "DB2")); + this.ddlDap.Items.Add(new ComboBoxItem("HiRDB / HiRDB-DP", "HIR")); + this.ddlDap.Items.Add(new ComboBoxItem("MySQL Cnn/NET", "MCN")); + this.ddlDap.Items.Add(new ComboBoxItem("PostgreSQL / Npgsql", "NPS")); + this.ddlDap.SelectedIndex = 0; + + // ddlMode1 + this.ddlMode1.Items.Add(new ComboBoxItem("個別Dao", "individual")); + this.ddlMode1.Items.Add(new ComboBoxItem("共通Dao", "common")); + this.ddlMode1.Items.Add(new ComboBoxItem("自動生成Dao(更新のみ)", "generate")); + this.ddlMode1.SelectedIndex = 0; + + // ddlMode2 + this.ddlMode2.Items.Add(new ComboBoxItem("静的クエリ", "static")); + this.ddlMode2.Items.Add(new ComboBoxItem("動的クエリ", "dynamic")); + this.ddlMode2.SelectedIndex = 0; + + // ddlIso + this.ddlIso.Items.Add(new ComboBoxItem("ノットコネクト", "NC")); + this.ddlIso.Items.Add(new ComboBoxItem("ノートランザクション", "NT")); + this.ddlIso.Items.Add(new ComboBoxItem("ダーティリード", "RU")); + this.ddlIso.Items.Add(new ComboBoxItem("リードコミット", "RC")); + this.ddlIso.Items.Add(new ComboBoxItem("リピータブルリード", "RR")); + this.ddlIso.Items.Add(new ComboBoxItem("シリアライザブル", "SZ")); + this.ddlIso.Items.Add(new ComboBoxItem("スナップショット", "SS")); + this.ddlIso.Items.Add(new ComboBoxItem("デフォルト", "DF")); + this.ddlIso.SelectedIndex = 1; + + // WSでは使用しない(設定できないので)。 + this.ddlIso.Enabled = false; + + // ddlExRollback + this.ddlExRollback.Items.Add(new ComboBoxItem("正常時", "-")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外", "Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外", "System")); + this.ddlExRollback.Items.Add(new ComboBoxItem("その他、一般的な例外", "Other")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外への振替", "Other-Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外への振替", "Other-System")); + this.ddlExRollback.SelectedIndex = 0; + + // ddlTransmission + this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET Webサービス呼出", "testWebService")); + this.ddlTransmission.Items.Add(new ComboBoxItem("WCF Webサービス呼出", "testWebService2")); + this.ddlTransmission.Items.Add(new ComboBoxItem("WCF TCPサービス呼出", "testWebService3")); + this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET WebAPI呼出", "testWebService4")); + this.ddlTransmission.SelectedIndex = 0; + + // ddlOrderColumn + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c1", "c1")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c2", "c2")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c3", "c3")); + this.ddlOrderColumn.SelectedIndex = 0; + + // ddlOrderSequence + this.ddlOrderSequence.Items.Add(new ComboBoxItem("ASC", "A")); + this.ddlOrderSequence.Items.Add(new ComboBoxItem("DESC", "D")); + this.ddlOrderSequence.SelectedIndex = 0; + + // 呼出し制御部品 + if (string.IsNullOrEmpty(Program.AccessToken)) + { + this.CallCtrl = new CallController(MyBaseControllerWin.UserInfo); + } + else + { + this.CallCtrl = new CallController(Program.AccessToken); + } + } + + #region コンボボックス用 + + /// コンボボックス用インナークラス + private class ComboBoxItem + { + /// 表示名 + private string m_name = ""; + + /// + private string m_value = ""; + + /// コンストラクタ + public ComboBoxItem(string name, string value) + { + m_name = name; + m_value = value; + } + + /// 表示名 + public string Name + { + get + { + return m_name; + } + } + + /// + public string Value + { + get + { + return m_value; + } + } + + /// + /// オーバーライドしたメソッド + /// これがコンボボックスに表示される + /// + public override string ToString() + { + return m_name; + } + } + + #endregion + + #endregion + + #region CRUD処理メソッド + + #region 参照系 + + /// 件数取得 + /// イベントハンドラの共通引数 + /// + /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 + /// (非同期実行、結果表示の双方に匿名デリゲードを使用するパターン) + /// + protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) + { + // 非同期処理クラスを生成 + // 匿名デリゲードの場合は、ベース2で良い。 + MyBaseAsyncFunc af = new MyBaseAsyncFunc(this); + + // 引数を纏める + af.Parameter = (object)new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectCount", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 画面上のデータは退避する + //(オブジェクトであれば、クローンする。) + string logicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; + + // 非同期実行するメソッドを指定(匿名デリゲード) + // ここは副スレッドから実行されるので注意 + // (画面上のメンバに触らないこと!)。 + af.AsyncFunc = delegate(object param) + { + // 引数クラス(キャスト) + TestParameterValue testParameterValue = (TestParameterValue)param; + + // 戻り値 + TestReturnValue testReturnValue; + + // 呼出し制御部品(スレッドセーフでないため副スレッド内で作る) + CallController callCtrl = null; + if (string.IsNullOrEmpty(Program.AccessToken)) + { + callCtrl = new CallController(MyBaseControllerWin.UserInfo); + } + else + { + callCtrl = new CallController(Program.AccessToken); + } + + // Invoke + testReturnValue = (TestReturnValue)callCtrl.Invoke( + logicalName, testParameterValue); + + //// 進捗表示のテスト + //af.ChangeProgress = delegate(object o) + //{ + // MessageBox.Show(o.ToString()); + //}; + + //af.ExecChangeProgress("進捗表示"); + + //// 非同期メッセージボックス表示のテスト + //DialogResult dr = af.ShowAsyncMessageBoxWin( + // "メッセージ", "タイトル", MessageBoxButtons.YesNo, MessageBoxIcon.Information); + //// 非同期メッセージボックス表示のテスト(エラー) + //System.Windows.MessageBoxResult mr = af.ShowAsyncMessageBoxWPF("メッセージ", "タイトル", + // System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Information); + + // 結果表示 + return testReturnValue; + }; + + // 結果表示のメソッドを指定(匿名デリゲード) + // このメソッドは必ず主スレッドで実行される。 + // (画面上のメンバを更新できる!)。 + af.SetResult = delegate(object retVal) + { + if (retVal is Exception) + { + // 例外発生時 + RcMyCmnFunction.ShowErrorMessageWin((Exception)retVal, "非同期処理で例外発生!"); + } + else + { + // 正常時 + + // 戻り値(キャスト) + TestReturnValue testReturnValue = (TestReturnValue)retVal; + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.labelMessage.Text = testReturnValue.Obj.ToString() + "件のデータがあります"; + } + } + }; + + // 非同期実行する。 + if (!af.Start()) + { + MessageBox.Show("別の非同期処理が実行中です。"); + } + } + + /// 一覧取得(dt) + /// イベントハンドラの共通引数 + protected void UOC_btnButton2_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DT", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = testReturnValue.Obj; + } + } + + /// 一覧取得(ds) + /// イベントハンドラの共通引数 + protected void UOC_btnButton3_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DS", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = ((DataSet)testReturnValue.Obj).Tables[0]; + } + } + + /// 一覧取得(dr) + /// イベントハンドラの共通引数 + protected void UOC_btnButton4_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DR", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = testReturnValue.Obj; + } + } + + /// 一覧取得(動的sql) + /// イベントハンドラの共通引数 + protected void UOC_btnButton5_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DSQL", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 動的SQLの要素を設定 + testParameterValue.OrderColumn = ((ComboBoxItem)this.ddlOrderColumn.SelectedItem).Value; + testParameterValue.OrderSequence = ((ComboBoxItem)this.ddlOrderSequence.SelectedItem).Value; + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = testReturnValue.Obj; + } + } + + /// 参照処理 + /// イベントハンドラの共通引数 + /// + /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 + /// (結果表示にだけ匿名デリゲードを使用するパターン) + /// + protected void UOC_btnButton6_Click(RcFxEventArgs rcFxEventArgs) + { + // 非同期処理クラスを生成 + AsyncFunc af = new AsyncFunc(this); + + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Select", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + + // 引数を非同期処理クラスに設定 + af.Parameter = testParameterValue; + + // 画面上のデータは退避する(オブジェクトであれば、クローンする。) + af.LogicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; + + // 非同期実行するメソッドを指定 + // ここは副スレッドから実行されるので注意。 + af.AsyncFunc = new BaseAsyncFunc.AsyncFuncDelegate(af.btn6_Exec); + + // 結果表示のメソッドを指定(匿名デリゲード) + // このメソッドは必ず主スレッドで実行される。 + af.SetResult = delegate(object retVal) + { + if (retVal is Exception) + { + // 例外発生時 + RcMyCmnFunction.ShowErrorMessageWin((Exception)retVal, "非同期処理で例外発生!"); + } + else + { + // 正常時 + + // 戻り値(キャスト) + TestReturnValue testReturnValue = (TestReturnValue)retVal; + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.textBox1.Text = testReturnValue.ShipperID.ToString(); + this.textBox2.Text = testReturnValue.CompanyName; + this.textBox3.Text = testReturnValue.Phone; + } + } + }; + + // 非同期実行する。 + if (!af.Start()) + { + MessageBox.Show("別の非同期処理が実行中です。"); + } + } + + #endregion + + #region 更新系 + + /// 追加処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton7_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Insert", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.labelMessage.Text = testReturnValue.Obj.ToString() + "件追加"; + } + } + + /// 更新処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton8_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Update", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.labelMessage.Text = testReturnValue.Obj.ToString() + "件更新"; + } + } + + /// 削除処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton9_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Delete", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(textBox1.Text); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.labelMessage.Text = testReturnValue.Obj.ToString() + "件削除"; + } + } + + #endregion + + #endregion + + #region その他 + + /// クリア + /// イベントハンドラの共通引数 + protected void UOC_btnButton10_Click(RcFxEventArgs rcFxEventArgs) + { + this.dataGridView1.DataSource = null; + } + + /// メッセージ取得(埋め込まれたリソース対応) + /// イベントハンドラの共通引数 + protected void UOC_btnButton11_Click(RcFxEventArgs rcFxEventArgs) + { + this.textBox5.Text = GetMessage.GetMessageDescription(this.textBox4.Text); + } + + /// 共有情報取得(埋め込まれたリソース対応) + /// イベントハンドラの共通引数 + protected void UOC_btnButton12_Click(RcFxEventArgs rcFxEventArgs) + { + this.textBox7.Text = GetSharedProperty.GetSharedPropertyValue(this.textBox6.Text); + } + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.resx new file mode 100644 index 000000000..0ba2be576 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.resx @@ -0,0 +1,1311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + True + + + + NoControl + + + + 10, 406 + + + 59, 12 + + + 74 + + + 処理結果: + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 12 + + + True + + + NoControl + + + 108, 406 + + + 23, 12 + + + 73 + + + *** + + + labelMessage + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 13 + + + NoControl + + + 274, 373 + + + 464, 23 + + + 72 + + + クリア + + + btnButton10 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 14 + + + NoControl + + + 450, 470 + + + 140, 23 + + + 71 + + + 削除 + + + btnButton9 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 15 + + + NoControl + + + 304, 470 + + + 140, 23 + + + 70 + + + 更新 + + + btnButton8 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 16 + + + NoControl + + + 158, 470 + + + 140, 23 + + + 69 + + + 追加 + + + btnButton7 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 17 + + + NoControl + + + 12, 470 + + + 140, 23 + + + 68 + + + 一件参照(非同期化) + + + btnButton6 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 18 + + + NoControl + + + 596, 441 + + + 140, 23 + + + 67 + + + 一覧取得(動的SQL) + + + btnButton5 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 19 + + + NoControl + + + 450, 441 + + + 140, 23 + + + 66 + + + 一覧取得(dr) + + + btnButton4 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 20 + + + NoControl + + + 304, 441 + + + 140, 23 + + + 65 + + + 一覧取得(ds) + + + btnButton3 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 21 + + + NoControl + + + 158, 441 + + + 140, 23 + + + 64 + + + 一覧取得(dt) + + + btnButton2 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 22 + + + NoControl + + + 12, 441 + + + 140, 23 + + + 63 + + + 件数取得(非同期化) + + + btnButton1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 23 + + + 274, 9 + + + 464, 358 + + + 62 + + + dataGridView1 + + + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 24 + + + True + + + NoControl + + + 10, 355 + + + 59, 12 + + + 61 + + + 昇順・降順 + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 25 + + + 12, 370 + + + 250, 20 + + + 60 + + + ddlOrderSequence + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 26 + + + True + + + NoControl + + + 10, 313 + + + 84, 12 + + + 59 + + + 並び替え対象列 + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 27 + + + 12, 328 + + + 250, 20 + + + 58 + + + ddlOrderColumn + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 28 + + + 110, 283 + + + 152, 19 + + + 57 + + + textBox3 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 29 + + + 110, 262 + + + 152, 19 + + + 56 + + + textBox2 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 30 + + + True + + + NoControl + + + 10, 286 + + + 42, 12 + + + 55 + + + Phone: + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 31 + + + True + + + NoControl + + + 10, 265 + + + 87, 12 + + + 54 + + + CompanyName: + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 32 + + + True + + + NoControl + + + 10, 245 + + + 60, 12 + + + 53 + + + ShipperID: + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 33 + + + 110, 242 + + + 152, 19 + + + 52 + + + textBox1 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 34 + + + True + + + NoControl + + + 10, 161 + + + 258, 12 + + + 51 + + + コミット、ロールバックを設定(例外発生時、ロールバック + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 35 + + + 12, 176 + + + 250, 20 + + + 50 + + + ddlExRollback + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 36 + + + True + + + NoControl + + + 10, 123 + + + 91, 12 + + + 49 + + + 分離レベルを選択 + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 37 + + + 12, 138 + + + 250, 20 + + + 48 + + + ddlIso + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 38 + + + True + + + NoControl + + + 10, 85 + + + 252, 12 + + + 47 + + + 静的、動的のクエリ モードを選択(共通Dao選択時) + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 39 + + + 12, 100 + + + 250, 20 + + + 46 + + + ddlMode2 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 40 + + + True + + + NoControl + + + 10, 47 + + + 151, 12 + + + 45 + + + 個別、共通のDao種別を選択 + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 41 + + + True + + + NoControl + + + 12, 9 + + + 237, 12 + + + 44 + + + データアクセス制御クラス(データプロバイダ)を選択 + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 42 + + + 12, 62 + + + 250, 20 + + + 43 + + + ddlMode1 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 43 + + + 12, 24 + + + 250, 20 + + + 42 + + + ddlDap + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 44 + + + True + + + NoControl + + + 237, 538 + + + 23, 12 + + + 91 + + + 値: + + + label16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 299, 535 + + + 439, 19 + + + 89 + + + textBox7 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + NoControl + + + 189, 533 + + + 42, 23 + + + 88 + + + + + + btnButton12 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + True + + + NoControl + + + 10, 538 + + + 31, 12 + + + 90 + + + キー: + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + 83, 535 + + + 100, 19 + + + 87 + + + textBox6 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + True + + + NoControl + + + 237, 513 + + + 56, 12 + + + 86 + + + メッセージ: + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + 299, 510 + + + 439, 19 + + + 84 + + + textBox5 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + NoControl + + + 189, 508 + + + 42, 23 + + + 83 + + + + + + btnButton11 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + True + + + NoControl + + + 10, 513 + + + 67, 12 + + + 85 + + + メッセージID: + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + + + 83, 510 + + + 100, 19 + + + 82 + + + textBox4 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 11 + + + True + + + NoControl + + + 10, 199 + + + 53, 12 + + + 93 + + + 通信制御 + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 12, 214 + + + 250, 20 + + + 92 + + + ddlTransmission + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 6, 12 + + + 750, 565 + + + Form1 + + + Form1 + + + Touryo.Infrastructure.Business.RichClient.Presentation.MyBaseControllerWin, Business.RichClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.Designer.cs new file mode 100644 index 000000000..67eb5ca1d --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.Designer.cs @@ -0,0 +1,93 @@ +namespace WSClientWinCone_sample +{ + partial class Login + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.btnButton1 = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.btnButton2 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnButton1 + // + this.btnButton1.Location = new System.Drawing.Point(118, 12); + this.btnButton1.Name = "btnButton1"; + this.btnButton1.Size = new System.Drawing.Size(75, 44); + this.btnButton1.TabIndex = 2; + this.btnButton1.Text = "ログイン"; + this.btnButton1.UseVisualStyleBackColor = true; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(100, 19); + this.textBox1.TabIndex = 0; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(12, 37); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(100, 19); + this.textBox2.TabIndex = 1; + this.textBox2.UseSystemPasswordChar = true; + // + // btnButton2 + // + this.btnButton2.Location = new System.Drawing.Point(199, 12); + this.btnButton2.Name = "btnButton2"; + this.btnButton2.Size = new System.Drawing.Size(75, 44); + this.btnButton2.TabIndex = 3; + this.btnButton2.Text = "外部ログイン"; + this.btnButton2.UseVisualStyleBackColor = true; + // + // Login + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(285, 78); + this.Controls.Add(this.btnButton2); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.btnButton1); + this.Name = "Login"; + this.Text = "Login"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnButton1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button btnButton2; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.cs new file mode 100644 index 000000000..e403ab570 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.cs @@ -0,0 +1,121 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Login +//* クラス日本語名 :ログイン画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +using System.Net.Http; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using Touryo.Infrastructure.Framework.Authentication; +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Presentation; + +namespace WSClientWinCone_sample +{ + /// Login + public partial class Login : MyBaseControllerWin + { + /// コンストラクタ + public Login() + { + InitializeComponent(); + + Program.FlagEnd = true; //フラグ初期化 + } + + /// フォームロードのUOCメソッド + protected override void UOC_FormInit() + { + } + + /// ログイン + /// イベントハンドラの共通引数 + protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) + { + MyBaseControllerWin.UserInfo.UserName = this.textBox1.Text; + MyBaseControllerWin.UserInfo.IPAddress = Environment.MachineName; + + Program.FlagEnd = false; // フラグ完了 + this.Close(); + } + + /// 外部ログイン + /// イベントハンドラの共通引数 + protected void UOC_btnButton2_Click(RcFxEventArgs rcFxEventArgs) + { + string access_token = this.ExLogin(this.textBox1.Text, this.textBox2.Text).Result; + if (!string.IsNullOrEmpty(access_token)) + { + MyBaseControllerWin.UserInfo.UserName = this.textBox1.Text; + MyBaseControllerWin.UserInfo.IPAddress = Environment.MachineName; + + Program.FlagEnd = false; // フラグ完了 + Program.AccessToken = access_token; // AccessToken + this.Close(); + } + } + + /// 外部ログイン + /// string + /// string + /// access_token + private async Task ExLogin(string userId, string password) + { + OAuth2AndOIDCClient.HttpClient = new HttpClient(); + string response = await OAuth2AndOIDCClient.ResourceOwnerPasswordCredentialsGrantAsync( + new Uri("https://localhost:44300/MultiPurposeAuthSite/token"), + OAuth2AndOIDCParams.ClientID, OAuth2AndOIDCParams.ClientSecret, + userId, password, "profile email phone address roles").ConfigureAwait(false); + + // access_tokenを取得し、検証 + Dictionary dic = JsonConvert.DeserializeObject>(response); + + // access_tokenの検証コード + if (dic.ContainsKey("access_token")) + { + string access_token = dic["access_token"]; + + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; + + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + { + // ログインに成功 + return access_token; + } + else + { + // ログインに失敗 + return ""; + } + } + else + { + // ログインに失敗 + return ""; + } + } + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/MSGDefinition.xml new file mode 100644 index 000000000..f2283b409 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/MSGDefinition.xml @@ -0,0 +1,23 @@ + + + + +]> + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Program.cs new file mode 100644 index 000000000..f5fcca6a4 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Program.cs @@ -0,0 +1,118 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :アプリケーションのメイン エントリ ポイント +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Util; + +namespace WSClientWinCone_sample +{ + /// アプリケーションのメイン エントリ ポイント + static class Program + { + /// AccessToken + public static string AccessToken = ""; + + /// 終了するかどうかを表すフラグ + public static bool FlagEnd = true; + + /// + /// アプリケーションのメイン エントリ ポイントです。 + /// + [STAThread] + static void Main() + { + // 既定の処理 + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + // UnhandledExceptionイベント・ハンドラを登録する + Thread.GetDomain().UnhandledException += new + UnhandledExceptionEventHandler(Application_UnhandledException); + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // スプラッシュ画面の表示 + Splash.ShowSplash(new Login()); + + // <スピンロック> + // SleepすればCPUオーバヘッドはほとんど無いが + // Sleep時間を長く、ループ回数を短くする + // ことでよりCPUオーバヘッドを軽減できる。 + + for (int i = 0; i < 30; i++ ) + { + if (Splash.SpinLock) + { + break; // 直ちに抜ける + } + + Thread.Sleep(100); + } + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // 次の画面(ログイン画面)の表示 + Application.Run(Splash.NextForm); + if(Program.FlagEnd) + { + return; // ログインしないで終わった場合 + } + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // 業務画面の表示(業務の開始) + Application.Run(new Form1()); + } + + // .NET TIPS > 適切に処理されなかった例外をキャッチするには? + // http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html + + /// + /// 未処理例外をキャッチするイベント・ハンドラ + /// + public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) + { + RcMyCmnFunction.ShowErrorMessageWin(e.Exception, "Application_ThreadExceptionによる例外通知です。"); + } + + /// + /// 未処理例外をキャッチするイベント・ハンドラ + /// + /// + /// メイン・スレッド以外の例外はUnhandledExceptionでハンドル + /// + public static void Application_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + Exception ex = e.ExceptionObject as Exception; + if (ex != null) + { + RcMyCmnFunction.ShowErrorMessageWin(ex, "Application_UnhandledExceptionによる例外通知です。"); + } + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..b72cc6a96 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/AssemblyInfo.cs @@ -0,0 +1,51 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("WSClientWinCone_sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("WSClientWinCone_sample")] +[assembly: AssemblyCopyright("Copyright (C) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です +[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/app.manifest b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/app.manifest new file mode 100644 index 000000000..5a90f2dee --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/app.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SPDefinition.xml new file mode 100644 index 000000000..6baf634bc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SPDefinition.xml @@ -0,0 +1,15 @@ + + + + +]> + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SampleLogConf2CS.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SampleLogConf2CS.xml new file mode 100644 index 000000000..e39f2b3fe --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SampleLogConf2CS.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.Designer.cs new file mode 100644 index 000000000..5c69b2ac5 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.Designer.cs @@ -0,0 +1,60 @@ +namespace WSClientWinCone_sample +{ + partial class Splash + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("MS UI Gothic", 64F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label1.Location = new System.Drawing.Point(15, 93); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(262, 86); + this.label1.TabIndex = 0; + this.label1.Text = "splash"; + // + // Splash + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 273); + this.Controls.Add(this.label1); + this.Name = "Splash"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.cs new file mode 100644 index 000000000..fa90ea1ab --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.cs @@ -0,0 +1,188 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Splash +//* クラス日本語名 :スプラッシュ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Windows.Forms; + +using Touryo.Infrastructure.Public.Log; + +namespace WSClientWinCone_sample +{ + /// + /// スプラッシュ画面 + /// + /// + /// DOBON.NET > プログラミング道 > .NET Tips + /// > フォーム > スプラッシュウィンドウを表示する + /// http://dobon.net/vb/dotnet/form/splashwindow.html + /// + /// ここでは、フレームワークは使用しない。 + /// + public partial class Splash : Form + { + /// コンストラクタ + public Splash() + { + InitializeComponent(); + + // プロパティの初期化 + this.TopMost = true; + this.ShowInTaskbar = false; + this.FormBorderStyle = FormBorderStyle.None; + this.StartPosition = FormStartPosition.CenterScreen; + + // イベントの設定 + this.Click += new System.EventHandler(Splash.Splash_Click); + this.label1.Click += new System.EventHandler(Splash.Splash_Click); + + // ログの初期化 + LogIF.InfoLog("ACCESS", "Splash"); + } + + /// + /// スプラッシュ画面のクリックイベント + /// + private static void Splash_Click(object sender, EventArgs e) + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // スピンロックを終了させ次画面を表示する。 + Splash._spinLock = true; + } + + #region 静的変数 + + /// 実行済みフラグ + private static bool _hasExecuted = false; + + /// スプラッシュ画面表示スレッド + private static Thread _thread = null; + + /// スピンロック用フラグ + /// volatile:スレッドセーフ + private static volatile bool _spinLock = false; + + /// スピンロック用フラグ(Getter) + public static bool SpinLock + { + get { return Splash._spinLock; } + } + + /// スプラッシュ画面(シングルトン) + /// volatile:スレッドセーフ + private static volatile Splash _splashForm = new Splash(); + + /// 次の画面(シングルトン) + /// volatile:スレッドセーフ + private static volatile Form _nextForm = null; + + /// 次の画面(Getter) + public static Form NextForm + { + get { return Splash._nextForm; } + } + + #endregion + + #region スプラッシュ画面を表示する + + /// スプラッシュ画面を表示する + /// 次の画面 + public static void ShowSplash(Form nextForm) + { + // 主スレッド(スプラッシュ画面を生成していないスレッド) + + // 二回以上は起動できない。 + if (Splash._hasExecuted) + { + return; + } + else + { + Splash._hasExecuted = true; + } + + #region スプラッシュ画面を表示 + + // 次の画面を設定する。 + Splash._nextForm = nextForm; +   + // スレッドの作成 + Splash._thread = new Thread( + new ThreadStart(ShowSplashByThread)); + + // スレッドの開始 + Splash._thread.Start(); + + #endregion + } + + /// Thread関数でスプラッシュ画面を表示する。 + private static void ShowSplashByThread() + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // スプラッシュ画面を + + // ・作成 + Splash._splashForm = new Splash(); + + // ・閉じるイベントハンドラを仕掛 + Splash._nextForm.Activated += new EventHandler(Splash.Login_Activated); + + // ・表示 + Application.Run(Splash._splashForm); + } + + #endregion + + #region スプラッシュ画面を閉じる + + /// + /// ログイン画面がアクティブになった時、スプラッシュ画面を閉じる + /// + private static void Login_Activated(object sender, EventArgs e) + { + // 主スレッド(スプラッシュ画面を生成していないスレッド) + + // なので、スプラッシュ画面を閉じるメソッドをInvoke + if (Splash._splashForm != null && !Splash._splashForm.IsDisposed) + { + Splash._splashForm.Invoke(new MethodInvoker(Splash.CloseSplash)); + } + + // nullクリア + Splash._splashForm = null; + Splash._nextForm = null; + Splash._thread = null; + } + + /// スプラッシュ画面を閉じる。 + private static void CloseSplash() + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // なので、スプラッシュ画面をそのまま閉じる + Splash._splashForm.Close(); + } + + #endregion + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition.xml new file mode 100644 index 000000000..4a6e66334 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition.xml @@ -0,0 +1,44 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition2.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition2.xml new file mode 100644 index 000000000..4207915e3 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition2.xml @@ -0,0 +1,44 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.csproj new file mode 100644 index 000000000..c4798e14e --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.csproj @@ -0,0 +1,167 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {386EA604-40DB-44A8-87AE-F29B209BA9CF} + WinExe + Properties + WSClientWinCone_sample + WSClientWinCone_sample + true + 7A5F68587972EC9A9F4493D3C883F9A865E8C3E1 + Internet + true + true + false + WSClientWinCone_sample_TemporaryKey.pfx + v4.6 + + + 2.0 + + + http://localhost/WSClientWinCone_sample/ + false + Web + true + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + packages\Microsoft.Owin.4.0.0\lib\net451\Microsoft.Owin.dll + + + packages\Microsoft.Owin.Security.4.0.0\lib\net451\Microsoft.Owin.Security.dll + + + packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + + packages\Owin.1.0\lib\net40\Owin.dll + True + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + + + ..\..\Build\WSIFType_sample.dll + + + + + + Form + + + Form1.cs + + + Form + + + Login.cs + + + + + Form + + + Splash.cs + + + Designer + Form1.cs + + + + + + + + + + + + + + + + + Login.cs + Designer + + + + + Splash.cs + Designer + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.sln new file mode 100644 index 000000000..6d1640ae4 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.sln @@ -0,0 +1,77 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WSClientWinCone_sample", "WSClientWinCone_sample.csproj", "{386EA604-40DB-44A8-87AE-F29B209BA9CF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASPNETWebService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService\ASPNETWebService.csproj", "{C24BC2FA-D423-4F0F-B2B0-E647B621683D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCFService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\WCFService\WCFService.csproj", "{096A202A-72E4-41D8-8B61-970E48E38135}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|.NET = Debug|.NET + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|.NET = Release|.NET + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|.NET.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|x86.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|x86.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|.NET.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.Build.0 = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|x86.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|x86.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|.NET.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|.NET.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|x86.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|x86.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|.NET.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|.NET.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Any CPU.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|.NET.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|.NET.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|.NET.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|.NET.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config new file mode 100644 index 000000000..5395b3d87 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/packages.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/packages.config new file mode 100644 index 000000000..01670b67c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/packages.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/AsyncFunc.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/AsyncFunc.cs new file mode 100644 index 000000000..03cb05b93 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/AsyncFunc.cs @@ -0,0 +1,78 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AsyncFunc +//* クラス日本語名 :サンプル アプリ 非同期処理クラス +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using WSIFType_sample; + +using Touryo.Infrastructure.Business.RichClient.Asynchronous; +using Touryo.Infrastructure.Framework.Transmission; + +namespace WSClientWin_sample +{ + public class AsyncFunc : MyBaseAsyncFunc + { + /// コンストラクタ + /// WPFやWinFormの要素 + public AsyncFunc(object _this) : base(_this) { } + + /// サービスの論理名 + public string LogicalName = ""; + + /// 非同期 + /// 引数 + /// 結果 + /// + /// ここは副スレッドから実行されるので注意。 + /// 非同期処理クラスに非同期処理を定義すると、 + /// メンバ変数を引数として利用できる。 + /// + public object btn6_Exec(object param) + { + // 戻り値(キャスト) + TestParameterValue testParameterValue = (TestParameterValue)param; + + // 戻り値 + TestReturnValue testReturnValue; + + // 呼出し制御部品(スレッドセーフでないため副スレッド内で作る) + CallController callCtrl = new CallController(Program.AccessToken); + + // Invoke + testReturnValue = (TestReturnValue)callCtrl.Invoke( + this.LogicalName, testParameterValue); + + //// 進捗表示のテスト + //this.ChangeProgress = delegate(object o) + //{ + // MessageBox.Show(o.ToString()); + //}; + + //this.ExecChangeProgress("進捗表示"); + + //// 非同期メッセージボックス表示のテスト + //DialogResult dr = this.ShowAsyncMessageBoxWin( + // "メッセージ", "タイトル", MessageBoxButtons.YesNo, MessageBoxIcon.Information); + ////// 非同期メッセージボックス表示のテスト(エラー) + ////System.Windows.MessageBoxResult mr = this.ShowAsyncMessageBoxWPF("メッセージ", "タイトル", + //// System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Information); + + // 結果表示 + return testReturnValue; + } + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Blue hills.jpg b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Blue hills.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a678f29832b6dbab8dc626477d6cbc42665482a GIT binary patch literal 28521 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 W7$KYHyuU;*5HrBLAJ6^!>i+>xlLI>d literal 0 HcmV?d00001 diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.Designer.cs new file mode 100644 index 000000000..8b594d1bf --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.Designer.cs @@ -0,0 +1,443 @@ +namespace WSClientWin_sample +{ + partial class Form1 + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.btnButton11 = new System.Windows.Forms.Button(); + this.label14 = new System.Windows.Forms.Label(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.ddlTransmission = new System.Windows.Forms.ComboBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.labelMessage = new System.Windows.Forms.Label(); + this.btnButton10 = new System.Windows.Forms.Button(); + this.btnButton9 = new System.Windows.Forms.Button(); + this.btnButton8 = new System.Windows.Forms.Button(); + this.btnButton7 = new System.Windows.Forms.Button(); + this.btnButton6 = new System.Windows.Forms.Button(); + this.btnButton5 = new System.Windows.Forms.Button(); + this.btnButton4 = new System.Windows.Forms.Button(); + this.btnButton3 = new System.Windows.Forms.Button(); + this.btnButton2 = new System.Windows.Forms.Button(); + this.btnButton1 = new System.Windows.Forms.Button(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.label10 = new System.Windows.Forms.Label(); + this.ddlOrderSequence = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.ddlOrderColumn = new System.Windows.Forms.ComboBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.ddlExRollback = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.ddlIso = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.ddlMode2 = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.ddlMode1 = new System.Windows.Forms.ComboBox(); + this.ddlDap = new System.Windows.Forms.ComboBox(); + this.label16 = new System.Windows.Forms.Label(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.btnButton12 = new System.Windows.Forms.Button(); + this.label15 = new System.Windows.Forms.Label(); + this.textBox6 = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.SuspendLayout(); + // + // textBox4 + // + resources.ApplyResources(this.textBox4, "textBox4"); + this.textBox4.Name = "textBox4"; + // + // label13 + // + resources.ApplyResources(this.label13, "label13"); + this.label13.Name = "label13"; + // + // btnButton11 + // + resources.ApplyResources(this.btnButton11, "btnButton11"); + this.btnButton11.Name = "btnButton11"; + this.btnButton11.UseVisualStyleBackColor = true; + // + // label14 + // + resources.ApplyResources(this.label14, "label14"); + this.label14.Name = "label14"; + // + // textBox5 + // + resources.ApplyResources(this.textBox5, "textBox5"); + this.textBox5.Name = "textBox5"; + // + // ddlTransmission + // + this.ddlTransmission.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlTransmission.FormattingEnabled = true; + resources.ApplyResources(this.ddlTransmission, "ddlTransmission"); + this.ddlTransmission.Name = "ddlTransmission"; + // + // label6 + // + resources.ApplyResources(this.label6, "label6"); + this.label6.Name = "label6"; + // + // label11 + // + resources.ApplyResources(this.label11, "label11"); + this.label11.Name = "label11"; + // + // labelMessage + // + resources.ApplyResources(this.labelMessage, "labelMessage"); + this.labelMessage.Name = "labelMessage"; + // + // btnButton10 + // + resources.ApplyResources(this.btnButton10, "btnButton10"); + this.btnButton10.Name = "btnButton10"; + this.btnButton10.UseVisualStyleBackColor = true; + // + // btnButton9 + // + resources.ApplyResources(this.btnButton9, "btnButton9"); + this.btnButton9.Name = "btnButton9"; + this.btnButton9.UseVisualStyleBackColor = true; + // + // btnButton8 + // + resources.ApplyResources(this.btnButton8, "btnButton8"); + this.btnButton8.Name = "btnButton8"; + this.btnButton8.UseVisualStyleBackColor = true; + // + // btnButton7 + // + resources.ApplyResources(this.btnButton7, "btnButton7"); + this.btnButton7.Name = "btnButton7"; + this.btnButton7.UseVisualStyleBackColor = true; + // + // btnButton6 + // + resources.ApplyResources(this.btnButton6, "btnButton6"); + this.btnButton6.Name = "btnButton6"; + this.btnButton6.UseVisualStyleBackColor = true; + // + // btnButton5 + // + resources.ApplyResources(this.btnButton5, "btnButton5"); + this.btnButton5.Name = "btnButton5"; + this.btnButton5.UseVisualStyleBackColor = true; + // + // btnButton4 + // + resources.ApplyResources(this.btnButton4, "btnButton4"); + this.btnButton4.Name = "btnButton4"; + this.btnButton4.UseVisualStyleBackColor = true; + // + // btnButton3 + // + resources.ApplyResources(this.btnButton3, "btnButton3"); + this.btnButton3.Name = "btnButton3"; + this.btnButton3.UseVisualStyleBackColor = true; + // + // btnButton2 + // + resources.ApplyResources(this.btnButton2, "btnButton2"); + this.btnButton2.Name = "btnButton2"; + this.btnButton2.UseVisualStyleBackColor = true; + // + // btnButton1 + // + resources.ApplyResources(this.btnButton1, "btnButton1"); + this.btnButton1.Name = "btnButton1"; + this.btnButton1.UseVisualStyleBackColor = true; + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + resources.ApplyResources(this.dataGridView1, "dataGridView1"); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.RowTemplate.Height = 21; + // + // label10 + // + resources.ApplyResources(this.label10, "label10"); + this.label10.Name = "label10"; + // + // ddlOrderSequence + // + this.ddlOrderSequence.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlOrderSequence.FormattingEnabled = true; + resources.ApplyResources(this.ddlOrderSequence, "ddlOrderSequence"); + this.ddlOrderSequence.Name = "ddlOrderSequence"; + // + // label9 + // + resources.ApplyResources(this.label9, "label9"); + this.label9.Name = "label9"; + // + // ddlOrderColumn + // + this.ddlOrderColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlOrderColumn.FormattingEnabled = true; + resources.ApplyResources(this.ddlOrderColumn, "ddlOrderColumn"); + this.ddlOrderColumn.Name = "ddlOrderColumn"; + // + // textBox3 + // + resources.ApplyResources(this.textBox3, "textBox3"); + this.textBox3.Name = "textBox3"; + // + // textBox2 + // + resources.ApplyResources(this.textBox2, "textBox2"); + this.textBox2.Name = "textBox2"; + // + // label8 + // + resources.ApplyResources(this.label8, "label8"); + this.label8.Name = "label8"; + // + // label7 + // + resources.ApplyResources(this.label7, "label7"); + this.label7.Name = "label7"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.Name = "label1"; + // + // textBox1 + // + resources.ApplyResources(this.textBox1, "textBox1"); + this.textBox1.Name = "textBox1"; + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // ddlExRollback + // + this.ddlExRollback.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlExRollback.FormattingEnabled = true; + resources.ApplyResources(this.ddlExRollback, "ddlExRollback"); + this.ddlExRollback.Name = "ddlExRollback"; + // + // label4 + // + resources.ApplyResources(this.label4, "label4"); + this.label4.Name = "label4"; + // + // ddlIso + // + this.ddlIso.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlIso.FormattingEnabled = true; + resources.ApplyResources(this.ddlIso, "ddlIso"); + this.ddlIso.Name = "ddlIso"; + // + // label3 + // + resources.ApplyResources(this.label3, "label3"); + this.label3.Name = "label3"; + // + // ddlMode2 + // + this.ddlMode2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlMode2.FormattingEnabled = true; + resources.ApplyResources(this.ddlMode2, "ddlMode2"); + this.ddlMode2.Name = "ddlMode2"; + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // + // label12 + // + resources.ApplyResources(this.label12, "label12"); + this.label12.Name = "label12"; + // + // ddlMode1 + // + this.ddlMode1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlMode1.FormattingEnabled = true; + resources.ApplyResources(this.ddlMode1, "ddlMode1"); + this.ddlMode1.Name = "ddlMode1"; + // + // ddlDap + // + this.ddlDap.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ddlDap.FormattingEnabled = true; + resources.ApplyResources(this.ddlDap, "ddlDap"); + this.ddlDap.Name = "ddlDap"; + // + // label16 + // + resources.ApplyResources(this.label16, "label16"); + this.label16.Name = "label16"; + // + // textBox7 + // + resources.ApplyResources(this.textBox7, "textBox7"); + this.textBox7.Name = "textBox7"; + // + // btnButton12 + // + resources.ApplyResources(this.btnButton12, "btnButton12"); + this.btnButton12.Name = "btnButton12"; + this.btnButton12.UseVisualStyleBackColor = true; + // + // label15 + // + resources.ApplyResources(this.label15, "label15"); + this.label15.Name = "label15"; + // + // textBox6 + // + resources.ApplyResources(this.textBox6, "textBox6"); + this.textBox6.Name = "textBox6"; + // + // Form1 + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label16); + this.Controls.Add(this.textBox7); + this.Controls.Add(this.btnButton12); + this.Controls.Add(this.label15); + this.Controls.Add(this.textBox6); + this.Controls.Add(this.label11); + this.Controls.Add(this.labelMessage); + this.Controls.Add(this.btnButton10); + this.Controls.Add(this.btnButton9); + this.Controls.Add(this.btnButton8); + this.Controls.Add(this.btnButton7); + this.Controls.Add(this.btnButton6); + this.Controls.Add(this.btnButton5); + this.Controls.Add(this.btnButton4); + this.Controls.Add(this.btnButton3); + this.Controls.Add(this.btnButton2); + this.Controls.Add(this.btnButton1); + this.Controls.Add(this.dataGridView1); + this.Controls.Add(this.label10); + this.Controls.Add(this.ddlOrderSequence); + this.Controls.Add(this.label9); + this.Controls.Add(this.ddlOrderColumn); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.label8); + this.Controls.Add(this.label7); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label5); + this.Controls.Add(this.ddlExRollback); + this.Controls.Add(this.label4); + this.Controls.Add(this.ddlIso); + this.Controls.Add(this.label3); + this.Controls.Add(this.ddlMode2); + this.Controls.Add(this.label2); + this.Controls.Add(this.label12); + this.Controls.Add(this.ddlMode1); + this.Controls.Add(this.ddlDap); + this.Controls.Add(this.label6); + this.Controls.Add(this.ddlTransmission); + this.Controls.Add(this.label14); + this.Controls.Add(this.textBox5); + this.Controls.Add(this.btnButton11); + this.Controls.Add(this.label13); + this.Controls.Add(this.textBox4); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Form1"; + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Button btnButton11; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.ComboBox ddlTransmission; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label labelMessage; + private System.Windows.Forms.Button btnButton10; + private System.Windows.Forms.Button btnButton9; + private System.Windows.Forms.Button btnButton8; + private System.Windows.Forms.Button btnButton7; + private System.Windows.Forms.Button btnButton6; + private System.Windows.Forms.Button btnButton5; + private System.Windows.Forms.Button btnButton4; + private System.Windows.Forms.Button btnButton3; + private System.Windows.Forms.Button btnButton2; + private System.Windows.Forms.Button btnButton1; + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.ComboBox ddlOrderSequence; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.ComboBox ddlOrderColumn; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ComboBox ddlExRollback; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox ddlIso; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox ddlMode2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.ComboBox ddlMode1; + private System.Windows.Forms.ComboBox ddlDap; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.Button btnButton12; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox textBox6; + } +} + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.cs new file mode 100644 index 000000000..b6690f580 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.cs @@ -0,0 +1,734 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Form1 +//* クラス日本語名 :サンプル アプリ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using WSIFType_sample; + +using System; +using System.Data; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Business.RichClient.Asynchronous; +using Touryo.Infrastructure.Business.RichClient.Util; + +using Touryo.Infrastructure.Framework.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Asynchronous; +using Touryo.Infrastructure.Framework.Transmission; +using Touryo.Infrastructure.Framework.Util; + +namespace WSClientWin_sample +{ + /// サンプル アプリ画面 + public partial class Form1 : MyBaseControllerWin + { + /// 呼出し制御部品 + CallController CallCtrl; + + #region 初期処理 + + public Form1() + { + InitializeComponent(); + } + + /// + /// フォームロードのUOCメソッド + /// + protected override void UOC_FormInit() + { + // フォーム初期化(初回ロード)時に実行する処理を実装する + + // TODO: + + // ddlDap + this.ddlDap.Items.Add(new ComboBoxItem("SQL Server / SQL Client", "SQL")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / OLEDB.NET", "OLE")); + this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / ODCB.NET", "ODB")); + this.ddlDap.Items.Add(new ComboBoxItem("Oracle / ODP.NET", "ODP")); + this.ddlDap.Items.Add(new ComboBoxItem("DB2 / DB2.NET", "DB2")); + this.ddlDap.Items.Add(new ComboBoxItem("HiRDB / HiRDB-DP", "HIR")); + this.ddlDap.Items.Add(new ComboBoxItem("MySQL Cnn/NET", "MCN")); + this.ddlDap.Items.Add(new ComboBoxItem("PostgreSQL / Npgsql", "NPS")); + this.ddlDap.SelectedIndex = 0; + + // ddlMode1 + this.ddlMode1.Items.Add(new ComboBoxItem("個別Dao", "individual")); + this.ddlMode1.Items.Add(new ComboBoxItem("共通Dao", "common")); + this.ddlMode1.Items.Add(new ComboBoxItem("自動生成Dao(更新のみ)", "generate")); + this.ddlMode1.SelectedIndex = 0; + + // ddlMode2 + this.ddlMode2.Items.Add(new ComboBoxItem("静的クエリ", "static")); + this.ddlMode2.Items.Add(new ComboBoxItem("動的クエリ", "dynamic")); + this.ddlMode2.SelectedIndex = 0; + + // ddlIso + this.ddlIso.Items.Add(new ComboBoxItem("ノットコネクト", "NC")); + this.ddlIso.Items.Add(new ComboBoxItem("ノートランザクション", "NT")); + this.ddlIso.Items.Add(new ComboBoxItem("ダーティリード", "RU")); + this.ddlIso.Items.Add(new ComboBoxItem("リードコミット", "RC")); + this.ddlIso.Items.Add(new ComboBoxItem("リピータブルリード", "RR")); + this.ddlIso.Items.Add(new ComboBoxItem("シリアライザブル", "SZ")); + this.ddlIso.Items.Add(new ComboBoxItem("スナップショット", "SS")); + this.ddlIso.Items.Add(new ComboBoxItem("デフォルト", "DF")); + this.ddlIso.SelectedIndex = 1; + + // WSでは使用しない(設定できないので)。 + this.ddlIso.Enabled = false; + + // ddlExRollback + this.ddlExRollback.Items.Add(new ComboBoxItem("正常時", "-")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外", "Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外", "System")); + this.ddlExRollback.Items.Add(new ComboBoxItem("その他、一般的な例外", "Other")); + this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外への振替", "Other-Business")); + this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外への振替", "Other-System")); + this.ddlExRollback.SelectedIndex = 0; + + // ddlTransmission + this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET Webサービス呼出", "testWebService")); + this.ddlTransmission.Items.Add(new ComboBoxItem("WCF Webサービス呼出", "testWebService2")); + this.ddlTransmission.Items.Add(new ComboBoxItem("WCF TCPサービス呼出", "testWebService3")); + this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET WebAPI呼出", "testWebService4")); + this.ddlTransmission.Items.Add(new ComboBoxItem("インプロセス呼出", "testInProcess")); + this.ddlTransmission.SelectedIndex = 0; + + // ddlOrderColumn + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c1", "c1")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c2", "c2")); + this.ddlOrderColumn.Items.Add(new ComboBoxItem("c3", "c3")); + this.ddlOrderColumn.SelectedIndex = 0; + + // ddlOrderSequence + this.ddlOrderSequence.Items.Add(new ComboBoxItem("ASC", "A")); + this.ddlOrderSequence.Items.Add(new ComboBoxItem("DESC", "D")); + this.ddlOrderSequence.SelectedIndex = 0; + + // 呼出し制御部品 + if (string.IsNullOrEmpty(Program.AccessToken)) + { + this.CallCtrl = new CallController(MyBaseControllerWin.UserInfo); + } + else + { + this.CallCtrl = new CallController(Program.AccessToken); + } + } + + #region コンボボックス用 + + /// コンボボックス用インナークラス + private class ComboBoxItem + { + /// 表示名 + private string m_name = ""; + + /// + private string m_value = ""; + + /// コンストラクタ + public ComboBoxItem(string name, string value) + { + m_name = name; + m_value = value; + } + + /// 表示名 + public string Name + { + get + { + return m_name; + } + } + + /// + public string Value + { + get + { + return m_value; + } + } + + /// + /// オーバーライドしたメソッド + /// これがコンボボックスに表示される + /// + public override string ToString() + { + return m_name; + } + } + + #endregion + + #endregion + + #region CRUD処理メソッド + + #region 参照系 + + /// 件数取得 + /// イベントハンドラの共通引数 + /// + /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 + /// (非同期実行、結果表示の双方に匿名デリゲードを使用するパターン) + /// + protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) + { + // ↓カバレージ上げ + + //// Web認証情報 + //this.CallCtrl.NetworkCredentialToWAS + // = new NetworkCredential("test", "test", "test"); + + //// プロキシ(認証)情報 + //this.CallCtrl.ProxyUrl = "http://xxx.xxx.xxx.xxx:8080"; + //this.CallCtrl.NetworkCredentialToProxy + // = new NetworkCredential("ptest", "ptest", "ptest"); + + // 非同期処理クラスを生成 + // 匿名デリゲードの場合は、ベース2で良い。 + MyBaseAsyncFunc af = new MyBaseAsyncFunc(this); + + // 引数を纏める + af.Parameter = (object)new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectCount", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 画面上のデータは退避する + //(オブジェクトであれば、クローンする。) + string logicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; + + // 非同期実行するメソッドを指定(匿名デリゲード) + // ここは副スレッドから実行されるので注意 + // (画面上のメンバに触らないこと!)。 + af.AsyncFunc = delegate(object param) + { + // 引数クラス(キャスト) + TestParameterValue testParameterValue = (TestParameterValue)param; + + // 戻り値 + TestReturnValue testReturnValue; + + // 呼出し制御部品(スレッドセーフでないため副スレッド内で作る) + CallController callCtrl = null; + if (string.IsNullOrEmpty(Program.AccessToken)) + { + callCtrl = new CallController(MyBaseControllerWin.UserInfo); + } + else + { + callCtrl = new CallController(Program.AccessToken); + } + + // Invoke + testReturnValue = (TestReturnValue)callCtrl.Invoke( + logicalName, testParameterValue); + + //// 進捗表示のテスト + //af.ChangeProgress = delegate(object o) + //{ + // MessageBox.Show(o.ToString()); + //}; + + //af.ExecChangeProgress("進捗表示"); + + //// 非同期メッセージボックス表示のテスト + //DialogResult dr = af.ShowAsyncMessageBoxWin( + // "メッセージ", "タイトル", MessageBoxButtons.YesNo, MessageBoxIcon.Information); + //// 非同期メッセージボックス表示のテスト(エラー) + //System.Windows.MessageBoxResult mr = af.ShowAsyncMessageBoxWPF("メッセージ", "タイトル", + // System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Information); + + // 結果表示 + return testReturnValue; + }; + + // 結果表示のメソッドを指定(匿名デリゲード) + // このメソッドは必ず主スレッドで実行される。 + // (画面上のメンバを更新できる!)。 + af.SetResult = delegate(object retVal) + { + if (retVal is Exception) + { + // 例外発生時 + RcMyCmnFunction.ShowErrorMessageWin((Exception)retVal, "非同期処理で例外発生!"); + } + else + { + // 正常時 + + // 戻り値(キャスト) + TestReturnValue testReturnValue = (TestReturnValue)retVal; + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.labelMessage.Text = testReturnValue.Obj.ToString() + "件のデータがあります"; + } + } + }; + + // 非同期実行する。 + if (!af.Start()) + { + MessageBox.Show("別の非同期処理が実行中です。"); + } + } + + /// 一覧取得(dt) + /// イベントハンドラの共通引数 + protected void UOC_btnButton2_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DT", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = testReturnValue.Obj; + } + } + + /// 一覧取得(ds) + /// イベントハンドラの共通引数 + protected void UOC_btnButton3_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DS", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = ((DataSet)testReturnValue.Obj).Tables[0]; + } + } + + /// 一覧取得(dr) + /// イベントハンドラの共通引数 + protected void UOC_btnButton4_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DR", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = testReturnValue.Obj; + } + } + + /// 一覧取得(動的sql) + /// イベントハンドラの共通引数 + protected void UOC_btnButton5_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "SelectAll_DSQL", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 動的SQLの要素を設定 + testParameterValue.OrderColumn = ((ComboBoxItem)this.ddlOrderColumn.SelectedItem).Value; + testParameterValue.OrderSequence = ((ComboBoxItem)this.ddlOrderSequence.SelectedItem).Value; + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.dataGridView1.DataSource = testReturnValue.Obj; + } + } + + /// 参照処理 + /// イベントハンドラの共通引数 + /// + /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 + /// (結果表示にだけ匿名デリゲードを使用するパターン) + /// + protected void UOC_btnButton6_Click(RcFxEventArgs rcFxEventArgs) + { + // 非同期処理クラスを生成 + AsyncFunc af = new AsyncFunc(this); + + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Select", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + + // 引数を非同期処理クラスに設定 + af.Parameter = testParameterValue; + + // 画面上のデータは退避する(オブジェクトであれば、クローンする。) + af.LogicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; + + // 非同期実行するメソッドを指定 + // ここは副スレッドから実行されるので注意。 + af.AsyncFunc = new BaseAsyncFunc.AsyncFuncDelegate(af.btn6_Exec); + + // 結果表示のメソッドを指定(匿名デリゲード) + // このメソッドは必ず主スレッドで実行される。 + af.SetResult = delegate(object retVal) + { + if (retVal is Exception) + { + // 例外発生時 + RcMyCmnFunction.ShowErrorMessageWin((Exception)retVal, "非同期処理で例外発生!"); + } + else + { + // 正常時 + + // 戻り値(キャスト) + TestReturnValue testReturnValue = (TestReturnValue)retVal; + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.textBox1.Text = testReturnValue.ShipperID.ToString(); + this.textBox2.Text = testReturnValue.CompanyName; + this.textBox3.Text = testReturnValue.Phone; + } + } + }; + + // 非同期実行する。 + if (!af.Start()) + { + MessageBox.Show("別の非同期処理が実行中です。"); + } + } + + #endregion + + #region 更新系 + + /// 追加処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton7_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Insert", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.labelMessage.Text = testReturnValue.Obj.ToString() + "件追加"; + } + } + + /// 更新処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton8_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Update", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(this.textBox1.Text); + testParameterValue.CompanyName = this.textBox2.Text; + testParameterValue.Phone = this.textBox3.Text; + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.labelMessage.Text = testReturnValue.Obj.ToString() + "件更新"; + } + } + + /// 削除処理 + /// イベントハンドラの共通引数 + protected void UOC_btnButton9_Click(RcFxEventArgs rcFxEventArgs) + { + // 引数クラスを生成 + // 下位(B・D層)は、テスト クラスを流用する + TestParameterValue testParameterValue + = new TestParameterValue( + this.Name, rcFxEventArgs.ControlName, "Delete", + ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, + MyBaseControllerWin.UserInfo); + + // 情報の設定 + testParameterValue.ShipperID = int.Parse(textBox1.Text); + + // 戻り値 + TestReturnValue testReturnValue; + + // Invoke + testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( + ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); + + // 結果表示するメッセージ エリア + this.labelMessage.Text = ""; + + if (testReturnValue.ErrorFlag == true) + { + // 結果(業務続行可能なエラー) + this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; + this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; + this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; + } + else + { + // 結果(正常系) + this.labelMessage.Text = testReturnValue.Obj.ToString() + "件削除"; + } + } + + #endregion + + #endregion + + #region その他 + + /// クリア + /// イベントハンドラの共通引数 + protected void UOC_btnButton10_Click(RcFxEventArgs rcFxEventArgs) + { + this.dataGridView1.DataSource = null; + } + + /// メッセージ取得(埋め込まれたリソース対応) + /// イベントハンドラの共通引数 + protected void UOC_btnButton11_Click(RcFxEventArgs rcFxEventArgs) + { + this.textBox5.Text = GetMessage.GetMessageDescription(this.textBox4.Text); + } + + /// 共有情報取得(埋め込まれたリソース対応) + /// イベントハンドラの共通引数 + protected void UOC_btnButton12_Click(RcFxEventArgs rcFxEventArgs) + { + this.textBox7.Text = GetSharedProperty.GetSharedPropertyValue(this.textBox6.Text); + } + + //private void button12_Click(object sender, EventArgs e) + //{ + // // EmbeddedResourceLoader.Existsのテスト + // // ・あり:false + // MessageBox.Show(EmbeddedResourceLoader.Exists("WSClientWin_sample.TMProtocolDefinition.xml", false).ToString()); + // // ・なし:false + // MessageBox.Show(EmbeddedResourceLoader.Exists("WSClientWin_sample.TMProtocolDefinition.xmla", false).ToString()); + // // ・あり:true + // MessageBox.Show(EmbeddedResourceLoader.Exists("WSClientWin_sample.TMProtocolDefinition.xml", true).ToString()); + // // ・なし:true + // MessageBox.Show(EmbeddedResourceLoader.Exists("WSClientWin_sample.TMProtocolDefinition.xmla", true).ToString()); + + // // EmbeddedResourceLoader.LoadAsStringのテスト + // MessageBox.Show( + // EmbeddedResourceLoader.LoadAsString( + // "WSClientWin_sample.TMProtocolDefinition.xml", + // Encoding.GetEncoding(CustomEncode.shift_jis))); + + // // EmbeddedResourceLoader.LoadXMLAsStringのテスト + // MessageBox.Show( + // EmbeddedResourceLoader.LoadXMLAsString( + // "WSClientWin_sample.TMProtocolDefinition.xml")); + //} + + #endregion + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.resx new file mode 100644 index 000000000..6187b4fea --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.resx @@ -0,0 +1,1311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 83, 510 + + + 100, 19 + + + + 22 + + + textBox4 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 44 + + + True + + + + NoControl + + + 10, 513 + + + 67, 12 + + + 38 + + + メッセージID: + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 43 + + + NoControl + + + 189, 508 + + + 42, 23 + + + 23 + + + + + + btnButton11 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 42 + + + True + + + NoControl + + + 237, 513 + + + 56, 12 + + + 41 + + + メッセージ: + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 40 + + + 299, 510 + + + 439, 19 + + + 24 + + + textBox5 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 41 + + + 13, 216 + + + 250, 20 + + + 6 + + + ddlTransmission + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 39 + + + True + + + NoControl + + + 11, 201 + + + 53, 12 + + + 43 + + + 通信制御 + + + label6 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 38 + + + True + + + NoControl + + + 11, 415 + + + 59, 12 + + + 76 + + + 処理結果: + + + label11 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + True + + + NoControl + + + 109, 415 + + + 23, 12 + + + 75 + + + *** + + + labelMessage + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + NoControl + + + 275, 375 + + + 464, 23 + + + 74 + + + クリア + + + btnButton10 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + NoControl + + + 451, 472 + + + 140, 23 + + + 73 + + + 削除 + + + btnButton9 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + NoControl + + + 305, 472 + + + 140, 23 + + + 72 + + + 更新 + + + btnButton8 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + NoControl + + + 159, 472 + + + 140, 23 + + + 71 + + + 追加 + + + btnButton7 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + + + NoControl + + + 13, 472 + + + 140, 23 + + + 70 + + + 一件参照(非同期化) + + + btnButton6 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 11 + + + NoControl + + + 597, 443 + + + 140, 23 + + + 69 + + + 一覧取得(動的SQL) + + + btnButton5 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 12 + + + NoControl + + + 451, 443 + + + 140, 23 + + + 68 + + + 一覧取得(dr) + + + btnButton4 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 13 + + + NoControl + + + 305, 443 + + + 140, 23 + + + 67 + + + 一覧取得(ds) + + + btnButton3 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 14 + + + NoControl + + + 159, 443 + + + 140, 23 + + + 66 + + + 一覧取得(dt) + + + btnButton2 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 15 + + + NoControl + + + 13, 443 + + + 140, 23 + + + 65 + + + 件数取得(非同期化) + + + btnButton1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 16 + + + 275, 11 + + + 464, 358 + + + 64 + + + dataGridView1 + + + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 17 + + + True + + + NoControl + + + 11, 364 + + + 59, 12 + + + 63 + + + 昇順・降順 + + + label10 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 18 + + + 13, 379 + + + 250, 20 + + + 62 + + + ddlOrderSequence + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 19 + + + True + + + NoControl + + + 11, 322 + + + 84, 12 + + + 61 + + + 並び替え対象列 + + + label9 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 20 + + + 13, 337 + + + 250, 20 + + + 60 + + + ddlOrderColumn + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 21 + + + 111, 293 + + + 152, 19 + + + 59 + + + textBox3 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 22 + + + 111, 272 + + + 152, 19 + + + 58 + + + textBox2 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 23 + + + True + + + NoControl + + + 11, 296 + + + 42, 12 + + + 57 + + + Phone: + + + label8 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 24 + + + True + + + NoControl + + + 11, 275 + + + 87, 12 + + + 56 + + + CompanyName: + + + label7 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 25 + + + True + + + NoControl + + + 11, 255 + + + 60, 12 + + + 55 + + + ShipperID: + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 26 + + + 111, 252 + + + 152, 19 + + + 54 + + + textBox1 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 27 + + + True + + + NoControl + + + 11, 163 + + + 258, 12 + + + 53 + + + コミット、ロールバックを設定(例外発生時、ロールバック + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 28 + + + 13, 178 + + + 250, 20 + + + 52 + + + ddlExRollback + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 29 + + + True + + + NoControl + + + 11, 125 + + + 91, 12 + + + 51 + + + 分離レベルを選択 + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 30 + + + 13, 140 + + + 250, 20 + + + 50 + + + ddlIso + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 31 + + + True + + + NoControl + + + 11, 87 + + + 252, 12 + + + 49 + + + 静的、動的のクエリ モードを選択(共通Dao選択時) + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 32 + + + 13, 102 + + + 250, 20 + + + 48 + + + ddlMode2 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 33 + + + True + + + NoControl + + + 11, 49 + + + 151, 12 + + + 47 + + + 個別、共通のDao種別を選択 + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 34 + + + True + + + NoControl + + + 13, 11 + + + 237, 12 + + + 46 + + + データアクセス制御クラス(データプロバイダ)を選択 + + + label12 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 35 + + + 13, 64 + + + 250, 20 + + + 45 + + + ddlMode1 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 36 + + + 13, 26 + + + 250, 20 + + + 44 + + + ddlDap + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 37 + + + True + + + NoControl + + + 237, 538 + + + 23, 12 + + + 81 + + + 値: + + + label16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 299, 535 + + + 439, 19 + + + 79 + + + textBox7 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + NoControl + + + 189, 533 + + + 42, 23 + + + 78 + + + + + + btnButton12 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + True + + + NoControl + + + 10, 538 + + + 31, 12 + + + 80 + + + キー: + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 83, 535 + + + 100, 19 + + + 77 + + + textBox6 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + True + + + 6, 12 + + + 750, 565 + + + Form1 + + + Form1 + + + Touryo.Infrastructure.Business.RichClient.Presentation.MyBaseControllerWin, Business.RichClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.Designer.cs new file mode 100644 index 000000000..a75ff9c99 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.Designer.cs @@ -0,0 +1,93 @@ +namespace WSClientWin_sample +{ + partial class Login + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.btnButton1 = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.btnButton2 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnButton1 + // + this.btnButton1.Location = new System.Drawing.Point(118, 12); + this.btnButton1.Name = "btnButton1"; + this.btnButton1.Size = new System.Drawing.Size(75, 44); + this.btnButton1.TabIndex = 2; + this.btnButton1.Text = "ログイン"; + this.btnButton1.UseVisualStyleBackColor = true; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(12, 12); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(100, 19); + this.textBox1.TabIndex = 0; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(12, 37); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(100, 19); + this.textBox2.TabIndex = 1; + this.textBox2.UseSystemPasswordChar = true; + // + // btnButton2 + // + this.btnButton2.Location = new System.Drawing.Point(199, 12); + this.btnButton2.Name = "btnButton2"; + this.btnButton2.Size = new System.Drawing.Size(75, 44); + this.btnButton2.TabIndex = 3; + this.btnButton2.Text = "外部ログイン"; + this.btnButton2.UseVisualStyleBackColor = true; + // + // Login + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(285, 78); + this.Controls.Add(this.btnButton2); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.btnButton1); + this.Name = "Login"; + this.Text = "login"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnButton1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button btnButton2; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.cs new file mode 100644 index 000000000..81d428c4d --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.cs @@ -0,0 +1,121 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Login +//* クラス日本語名 :ログイン画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +using System.Net.Http; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using Touryo.Infrastructure.Framework.Authentication; +using Touryo.Infrastructure.Business.RichClient.Presentation; +using Touryo.Infrastructure.Framework.RichClient.Presentation; + +namespace WSClientWin_sample +{ + /// Login + public partial class Login : MyBaseControllerWin + { + /// コンストラクタ + public Login() + { + InitializeComponent(); + + Program.FlagEnd = true; //フラグ初期化 + } + + /// フォームロードのUOCメソッド + protected override void UOC_FormInit() + { + } + + /// ログイン + /// イベントハンドラの共通引数 + protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) + { + MyBaseControllerWin.UserInfo.UserName = this.textBox1.Text; + MyBaseControllerWin.UserInfo.IPAddress = Environment.MachineName; + + Program.FlagEnd = false; // フラグ完了 + this.Close(); + } + + /// 外部ログイン + /// イベントハンドラの共通引数 + protected void UOC_btnButton2_Click(RcFxEventArgs rcFxEventArgs) + { + string access_token = this.ExLogin(this.textBox1.Text, this.textBox2.Text).Result; + if (!string.IsNullOrEmpty(access_token)) + { + MyBaseControllerWin.UserInfo.UserName = this.textBox1.Text; + MyBaseControllerWin.UserInfo.IPAddress = Environment.MachineName; + + Program.FlagEnd = false; // フラグ完了 + Program.AccessToken = access_token; // AccessToken + this.Close(); + } + } + + /// 外部ログイン + /// string + /// string + /// access_token + private async Task ExLogin(string userId, string password) + { + OAuth2AndOIDCClient.HttpClient = new HttpClient(); + string response = await OAuth2AndOIDCClient.ResourceOwnerPasswordCredentialsGrantAsync( + new Uri("https://localhost:44300/MultiPurposeAuthSite/token"), + OAuth2AndOIDCParams.ClientID, OAuth2AndOIDCParams.ClientSecret, + userId, password, "profile email phone address roles").ConfigureAwait(false); + + // access_tokenを取得し、検証 + Dictionary dic = JsonConvert.DeserializeObject>(response); + + // access_tokenの検証コード + if (dic.ContainsKey("access_token")) + { + string access_token = dic["access_token"]; + + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; + + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + { + // ログインに成功 + return access_token; + } + else + { + // ログインに失敗 + return ""; + } + } + else + { + // ログインに失敗 + return ""; + } + } + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.resx new file mode 100644 index 000000000..d58980a38 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Login.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/MSGDefinition.xml new file mode 100644 index 000000000..f2283b409 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/MSGDefinition.xml @@ -0,0 +1,23 @@ + + + + +]> + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Program.cs new file mode 100644 index 000000000..64443e631 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Program.cs @@ -0,0 +1,118 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :アプリケーションのメイン エントリ ポイント +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Windows.Forms; + +using Touryo.Infrastructure.Business.RichClient.Util; + +namespace WSClientWin_sample +{ + /// アプリケーションのメイン エントリ ポイント + static class Program + { + /// AccessToken + public static string AccessToken = ""; + + /// 終了するかどうかを表すフラグ + public static bool FlagEnd = true; + + /// + /// アプリケーションのメイン エントリ ポイントです。 + /// + [STAThread] + static void Main() + { + // 既定の処理 + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + // UnhandledExceptionイベント・ハンドラを登録する + Thread.GetDomain().UnhandledException += new + UnhandledExceptionEventHandler(Application_UnhandledException); + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // スプラッシュ画面の表示 + Splash.ShowSplash(new Login()); + + // <スピンロック> + // SleepすればCPUオーバヘッドはほとんど無いが + // Sleep時間を長く、ループ回数を短くする + // ことでよりCPUオーバヘッドを軽減できる。 + + for (int i = 0; i < 30; i++ ) + { + if (Splash.SpinLock) + { + break; // 直ちに抜ける + } + + Thread.Sleep(100); + } + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // 次の画面(ログイン画面)の表示 + Application.Run(Splash.NextForm); + if(Program.FlagEnd) + { + return; // ログインしないで終わった場合 + } + + // ThreadExceptionイベント・ハンドラを登録する + Application.ThreadException += new + ThreadExceptionEventHandler(Application_ThreadException); + + // 業務画面の表示(業務の開始) + Application.Run(new Form1()); + } + + // .NET TIPS > 適切に処理されなかった例外をキャッチするには? + // http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html + + /// + /// 未処理例外をキャッチするイベント・ハンドラ + /// + public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) + { + RcMyCmnFunction.ShowErrorMessageWin(e.Exception, "Application_ThreadExceptionによる例外通知です。"); + } + + /// + /// 未処理例外をキャッチするイベント・ハンドラ + /// + /// + /// メイン・スレッド以外の例外はUnhandledExceptionでハンドル + /// + public static void Application_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + Exception ex = e.ExceptionObject as Exception; + if (ex != null) + { + RcMyCmnFunction.ShowErrorMessageWin(ex, "Application_UnhandledExceptionによる例外通知です。"); + } + } + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..e575e0d07 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Properties/AssemblyInfo.cs @@ -0,0 +1,51 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :AssemblyInfo +//* クラス日本語名 :AssemblyInfo設定 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Reflection; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("WSClientWin_sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("xxxx")] +[assembly: AssemblyProduct("WSClientWin_sample")] +[assembly: AssemblyCopyright("Copyright (C) xxxx")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには +// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です +[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/SPDefinition.xml new file mode 100644 index 000000000..6baf634bc --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/SPDefinition.xml @@ -0,0 +1,15 @@ + + + + +]> + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/SampleLogConf2CS.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/SampleLogConf2CS.xml new file mode 100644 index 000000000..e39f2b3fe --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/SampleLogConf2CS.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.Designer.cs new file mode 100644 index 000000000..f64c31c6c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.Designer.cs @@ -0,0 +1,60 @@ +namespace WSClientWin_sample +{ + partial class Splash + { + /// + /// 必要なデザイナ変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows フォーム デザイナで生成されたコード + + /// + /// デザイナ サポートに必要なメソッドです。このメソッドの内容を + /// コード エディタで変更しないでください。 + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("MS UI Gothic", 64F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label1.Location = new System.Drawing.Point(15, 93); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(262, 86); + this.label1.TabIndex = 0; + this.label1.Text = "splash"; + // + // Splash + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(292, 273); + this.Controls.Add(this.label1); + this.Name = "Splash"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.cs new file mode 100644 index 000000000..4ce71e0e1 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.cs @@ -0,0 +1,188 @@ +//********************************************************************************** +//* 3層型 サンプル アプリ画面 +//********************************************************************************** + +// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :Splash +//* クラス日本語名 :スプラッシュ画面 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System; +using System.Threading; +using System.Windows.Forms; + +using Touryo.Infrastructure.Public.Log; + +namespace WSClientWin_sample +{ + /// + /// スプラッシュ画面 + /// + /// + /// DOBON.NET > プログラミング道 > .NET Tips + /// > フォーム > スプラッシュウィンドウを表示する + /// http://dobon.net/vb/dotnet/form/splashwindow.html + /// + /// ここでは、フレームワークは使用しない。 + /// + public partial class Splash : Form + { + /// コンストラクタ + public Splash() + { + InitializeComponent(); + + // プロパティの初期化 + this.TopMost = true; + this.ShowInTaskbar = false; + this.FormBorderStyle = FormBorderStyle.None; + this.StartPosition = FormStartPosition.CenterScreen; + + // イベントの設定 + this.Click += new System.EventHandler(Splash.Splash_Click); + this.label1.Click += new System.EventHandler(Splash.Splash_Click); + + // ログの初期化 + LogIF.InfoLog("ACCESS", "Splash"); + } + + /// + /// スプラッシュ画面のクリックイベント + /// + private static void Splash_Click(object sender, EventArgs e) + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // スピンロックを終了させ次画面を表示する。 + Splash._spinLock = true; + } + + #region 静的変数 + + /// 実行済みフラグ + private static bool _hasExecuted = false; + + /// スプラッシュ画面表示スレッド + private static Thread _thread = null; + + /// スピンロック用フラグ + /// volatile:スレッドセーフ + private static volatile bool _spinLock = false; + + /// スピンロック用フラグ(Getter) + public static bool SpinLock + { + get { return Splash._spinLock; } + } + + /// スプラッシュ画面(シングルトン) + /// volatile:スレッドセーフ + private static volatile Splash _splashForm = new Splash(); + + /// 次の画面(シングルトン) + /// volatile:スレッドセーフ + private static volatile Form _nextForm = null; + + /// 次の画面(Getter) + public static Form NextForm + { + get { return Splash._nextForm; } + } + + #endregion + + #region スプラッシュ画面を表示する + + /// スプラッシュ画面を表示する + /// 次の画面 + public static void ShowSplash(Form nextForm) + { + // 主スレッド(スプラッシュ画面を生成していないスレッド) + + // 二回以上は起動できない。 + if (Splash._hasExecuted) + { + return; + } + else + { + Splash._hasExecuted = true; + } + + #region スプラッシュ画面を表示 + + // 次の画面を設定する。 + Splash._nextForm = nextForm; +   + // スレッドの作成 + Splash._thread = new Thread( + new ThreadStart(ShowSplashByThread)); + + // スレッドの開始 + Splash._thread.Start(); + + #endregion + } + + /// Thread関数でスプラッシュ画面を表示する。 + private static void ShowSplashByThread() + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // スプラッシュ画面を + + // ・作成 + Splash._splashForm = new Splash(); + + // ・閉じるイベントハンドラを仕掛 + Splash._nextForm.Activated += new EventHandler(Splash.Login_Activated); + + // ・表示 + Application.Run(Splash._splashForm); + } + + #endregion + + #region スプラッシュ画面を閉じる + + /// + /// ログイン画面がアクティブになった時、スプラッシュ画面を閉じる + /// + private static void Login_Activated(object sender, EventArgs e) + { + // 主スレッド(スプラッシュ画面を生成していないスレッド) + + // なので、スプラッシュ画面を閉じるメソッドをInvoke + if (Splash._splashForm != null && !Splash._splashForm.IsDisposed) + { + Splash._splashForm.Invoke(new MethodInvoker(Splash.CloseSplash)); + } + + // nullクリア + Splash._splashForm = null; + Splash._nextForm = null; + Splash._thread = null; + } + + /// スプラッシュ画面を閉じる。 + private static void CloseSplash() + { + // 副スレッド(スプラッシュ画面を生成したスレッド) + + // なので、スプラッシュ画面をそのまま閉じる + Splash._splashForm.Close(); + } + + #endregion + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.resx new file mode 100644 index 000000000..19dc0dd8b --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Splash.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMInProcessDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMInProcessDefinition.xml new file mode 100644 index 000000000..6748977c1 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMInProcessDefinition.xml @@ -0,0 +1,18 @@ + + + + +]> + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMProtocolDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMProtocolDefinition.xml new file mode 100644 index 000000000..4a6e66334 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMProtocolDefinition.xml @@ -0,0 +1,44 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMProtocolDefinition2.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMProtocolDefinition2.xml new file mode 100644 index 000000000..4207915e3 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/TMProtocolDefinition2.xml @@ -0,0 +1,44 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.csproj new file mode 100644 index 000000000..c90e195aa --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.csproj @@ -0,0 +1,186 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {386EA604-40DB-44A8-87AE-F29B209BA9CF} + WinExe + Properties + WSClientWin_sample + WSClientWin_sample + v4.6 + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + packages\Microsoft.Owin.4.0.0\lib\net451\Microsoft.Owin.dll + + + packages\Microsoft.Owin.Security.4.0.0\lib\net451\Microsoft.Owin.Security.dll + + + packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll + + + packages\Owin.1.0\lib\net40\Owin.dll + True + + + False + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + + + + + + + + + + ..\..\Build\WSIFType_sample.dll + + + ..\..\Build\WSServer_sample.dll + + + + + + Form + + + Form1.cs + + + Form + + + Login.cs + + + + + Form + + + Splash.cs + + + Designer + Form1.cs + + + + + Designer + + + + + + Always + + + + + Always + + + + + Always + + + + + + + + + Login.cs + Designer + + + Always + + + Splash.cs + Designer + + + + + Always + + + + + Always + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.sln new file mode 100644 index 000000000..61c361e35 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.sln @@ -0,0 +1,77 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WSClientWin_sample", "WSClientWin_sample.csproj", "{386EA604-40DB-44A8-87AE-F29B209BA9CF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASPNETWebService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService\ASPNETWebService.csproj", "{C24BC2FA-D423-4F0F-B2B0-E647B621683D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCFService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\WCFService\WCFService.csproj", "{096A202A-72E4-41D8-8B61-970E48E38135}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|.NET = Debug|.NET + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|.NET = Release|.NET + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|.NET.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|x86.ActiveCfg = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|x86.Build.0 = Debug|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|.NET.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.Build.0 = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|x86.ActiveCfg = Release|Any CPU + {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|x86.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|.NET.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|.NET.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|x86.ActiveCfg = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|x86.Build.0 = Debug|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|.NET.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|.NET.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Any CPU.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.ActiveCfg = Release|Any CPU + {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|.NET.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|.NET.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.ActiveCfg = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.Build.0 = Debug|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|.NET.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|.NET.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.ActiveCfg = Release|Any CPU + {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/app.config new file mode 100644 index 000000000..44268a253 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/app.config @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/packages.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/packages.config new file mode 100644 index 000000000..01670b67c --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/packages.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file From 1548348e84744058c8d1adbfabedbcce7cc1ba04 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 15 Nov 2019 14:23:09 +0900 Subject: [PATCH 16/47] fixed #350 --- .../Infrastructure/Public/Security/GetHash.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs index 13aa2d940..92da74b3f 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs @@ -35,6 +35,7 @@ //* 2017/01/10 西野 大介 上記のformat変更に伴い、EqualSaltedPasswd側のI/F変更が発生。 //* 2017/09/08 西野 大介 名前空間の移動( ---> Security ) //* 2018/10/30 西野 大介 各種プロバイダのサポートを追加 +//* 2019/11/15 西野 大介 GetHashBytesのStretchCountの既定値 = 0 //********************************************************************************** using System.Security.Cryptography; @@ -82,6 +83,19 @@ public static string GetHashString(string sourceString, EnumHashAlgorithm eha, i /// ハッシュ・アルゴリズム列挙型 /// ハッシュ値(バイト配列) public static byte[] GetHashBytes(byte[] asb, EnumHashAlgorithm eha) + { + // overloadへ + return GetHash.GetHashBytes(asb, eha, 0); + } + + /// + /// バイト配列のハッシュ値を計算して返す + /// (StretchCount = 1 の 下位互換用)。 + /// + /// バイト配列 + /// ハッシュ・アルゴリズム列挙型 + /// ハッシュ値(バイト配列) + public static byte[] GetHashBytes_org(byte[] asb, EnumHashAlgorithm eha) { // overloadへ return GetHash.GetHashBytes(asb, eha, 1); From 1821c8e161d77f8087b812b4e26b42c861c0a392 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 18 Nov 2019 14:16:29 +0900 Subject: [PATCH 17/47] Now, I am fixing #328. Added ASPNETWebServiceCore to ServiceInterface folder. And communication was confirmed by WS_sample(3CS_sample) in Samples folder. --- root/programs/CS/0_ExecAllBat.bat | 10 +- root/programs/CS/6_Build_WSSrvCore_sample.bat | 13 +- root/programs/CS/7_Build_Framework_WSCore.bat | 42 +++++ .../Framework/Transmission/CallController.cs | 6 +- .../ASPNETWebServiceCore.sln | 25 +++ .../ASPNETWebServiceCore.csproj | 45 +++++ .../Controllers/ValuesController.cs | 44 +++++ .../ASPNETWebServiceCore/Program.cs | 55 ++++++ .../Properties/launchSettings.json | 27 +++ .../ASPNETWebServiceCore/Startup.cs | 159 ++++++++++++++++++ .../appsettings.Development.json | 10 ++ .../ASPNETWebServiceCore/appsettings.json | 86 ++++++++++ .../WSIFType_sample/WSIFType_sample.csproj | 8 +- .../WSServer_sample/WSServer_sample.csproj | 13 +- 14 files changed, 524 insertions(+), 19 deletions(-) create mode 100644 root/programs/CS/7_Build_Framework_WSCore.bat create mode 100644 root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore.sln create mode 100644 root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/ASPNETWebServiceCore.csproj create mode 100644 root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/ValuesController.cs create mode 100644 root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Program.cs create mode 100644 root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Properties/launchSettings.json create mode 100644 root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Startup.cs create mode 100644 root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.Development.json create mode 100644 root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json diff --git a/root/programs/CS/0_ExecAllBat.bat b/root/programs/CS/0_ExecAllBat.bat index 287a6e0f1..d33f764d0 100644 --- a/root/programs/CS/0_ExecAllBat.bat +++ b/root/programs/CS/0_ExecAllBat.bat @@ -33,14 +33,22 @@ echo | call 4_Build_CopyAssemblies.bat timeout 5 echo | call 4_Build_Framework_Tool.bat +echo | call 4_Build_Framework_ToolCore.bat + +echo | call 5_Build_2CS_sample.bat + echo | call 5_Build_Bat_sample.bat echo | call 5_Build_BatCore_sample.bat -echo | call 5_Build_2CS_sample.bat + echo | call 6_Build_WSSrv_sample.bat echo | call 6_Build_WSSrvCore_sample.bat + echo | call 7_Build_Framework_WS.bat +echo | call 7_Build_Framework_WSCore.bat + echo | call 8_Build_WSClntWin_sample.bat echo | call 9_Build_WSClntWPF_sample.bat + echo | call 10_Build_WebApp_sample.bat echo | call 10_Build_WebAppCore_sample.bat diff --git a/root/programs/CS/6_Build_WSSrvCore_sample.bat b/root/programs/CS/6_Build_WSSrvCore_sample.bat index 5229fe979..3c680e303 100644 --- a/root/programs/CS/6_Build_WSSrvCore_sample.bat +++ b/root/programs/CS/6_Build_WSSrvCore_sample.bat @@ -15,11 +15,20 @@ set CURRENT_DIR="%~dp0" @rem -------------------------------------------------- call %CURRENT_DIR%z_Common.bat +rem -------------------------------------------------- +rem Make the Directory. +rem -------------------------------------------------- +md "Samples4NetCore\Legacy\WS_sample\Temp" +md "Samples4NetCore\Legacy\WS_sample\Build" + rem -------------------------------------------------- rem Batch build of WSServer_sample. rem -------------------------------------------------- -dotnet restore "Samples4NetCore\Legacy\WSServer_sample\WSServer_sample.sln" -dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\WSServer_sample\WSServer_sample.sln" +dotnet restore "Samples4NetCore\Legacy\WS_sample\WSServer_sample\WSServer_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\WS_sample\WSServer_sample\WSServer_sample.sln" + +xcopy /E /Y "Samples4NetCore\Legacy\WS_sample\WSServer_sample\bin\%BUILD_CONFIG%\netcoreapp3.0" "Samples4NetCore\Legacy\WS_sample\Temp\%BUILD_CONFIG%\netcoreapp3.0\" +xcopy /E /Y "Samples4NetCore\Legacy\WS_sample\Temp\%BUILD_CONFIG%\netcoreapp3.0" "Samples4NetCore\Legacy\WS_sample\Build\netcoreapp3.0\" pause diff --git a/root/programs/CS/7_Build_Framework_WSCore.bat b/root/programs/CS/7_Build_Framework_WSCore.bat new file mode 100644 index 000000000..82d12f01a --- /dev/null +++ b/root/programs/CS/7_Build_Framework_WSCore.bat @@ -0,0 +1,42 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Batch build of ServiceInterface(ASPNETWebService). +rem -------------------------------------------------- +..\nuget.exe restore "Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService.sln" +%BUILDFILEPATH% %COMMANDLINE% "Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService.sln" + +pause + +rem -------------------------------------------------- +rem Copy the dll folder assembly. +rem -------------------------------------------------- + +md "Frameworks\Infrastructure\ServiceInterface\WCFService\dll" +xcopy /E /Y "Samples\WS_sample\Build" "Frameworks\Infrastructure\ServiceInterface\WCFService\dll\" +pause + +rem -------------------------------------------------- +rem Batch build of ServiceInterface(WCFService). +rem -------------------------------------------------- +%BUILDFILEPATH% %COMMANDLINE% "Frameworks\Infrastructure\ServiceInterface\WCFService\WCFService.sln" + +pause + +rem ------------------------------------------------------- +endlocal diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs index 88bd7d9a6..62669afb1 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Transmission/CallController.cs @@ -438,7 +438,7 @@ public object Invoke(string serviceName, object parameterValue) { // ASP.NET WebAPI (JSON-RPC) ret = this.ASPNETWebAPI(serviceName, url, timeout, props, - contextObject, parameterValueObject, returnValueObject); + contextObject, parameterValueObject, out returnValueObject); } else { @@ -732,7 +732,7 @@ public object Invoke(string serviceName, object parameterValue) { // ASP.NET WebAPI (JSON-RPC) ret = this.ASPNETWebAPI(serviceName, url, timeout, props, - contextObject, parameterValueObject, returnValueObject); + contextObject, parameterValueObject, out returnValueObject); } else { @@ -832,7 +832,7 @@ public object Invoke(string serviceName, object parameterValue) /// エラー情報のバイト配列 private byte[] ASPNETWebAPI( string serviceName, string url, int timeout, Dictionary props, - byte[] contextObject, byte[] parameterValueObject, byte[] returnValueObject) + byte[] contextObject, byte[] parameterValueObject, out byte[] returnValueObject) { // Equivalent to WebRequestHandler in .net Core · Issue #26223 · dotnet/corefx // https://github.com/dotnet/corefx/issues/26223 diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore.sln b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore.sln new file mode 100644 index 000000000..3075dcd3b --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29209.62 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASPNETWebServiceCore", "ASPNETWebServiceCore\ASPNETWebServiceCore.csproj", "{B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B325E5F0-EEF5-4E52-A55E-2AA5F46A5697}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3DC00DE5-BB95-47DA-8FBE-BBEEF24C887D} + EndGlobalSection +EndGlobal diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/ASPNETWebServiceCore.csproj b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/ASPNETWebServiceCore.csproj new file mode 100644 index 000000000..ce20b218b --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/ASPNETWebServiceCore.csproj @@ -0,0 +1,45 @@ + + + + netcoreapp3.0 + + + + + + + + + + + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.DamManagedOdp.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.DamMySQL.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.DamPstGrS.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll + + + ..\..\..\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.Security.dll + + + ..\..\..\..\..\Samples4NetCore\Legacy\WS_sample\Build\netcoreapp3.0\WSIFType_sample.dll + + + ..\..\..\..\..\Samples4NetCore\Legacy\WS_sample\Build\netcoreapp3.0\WSServer_sample.dll + + + + diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/ValuesController.cs b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/ValuesController.cs new file mode 100644 index 000000000..35278ba54 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/ValuesController.cs @@ -0,0 +1,44 @@ +//********************************************************************************** +//* テスト・コントローラー +//********************************************************************************** + +// テスト・コントローラーなので、必要に応じて流用 or 削除して下さい。 + +//********************************************************************************** +//* クラス名 :ValuesController +//* クラス日本語名 :疎通確認用 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2018/09/07 西野 大介 新規作成 +//********************************************************************************** + +using System.Collections.Generic; + +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Cors; + +namespace ASPNETWebServiceCore.Controllers +{ + [EnableCors] + [ApiController] + [Route("api/[controller]/[action]")] + public class ValuesController : ControllerBase + { + /// + /// GET api/values/get + /// + /// + /// IEnumerable(string) + /// + [HttpGet] + public IEnumerable get() + { + return new string[] { "value1", "value2" }; + } + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Program.cs b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Program.cs new file mode 100644 index 000000000..d4e142b62 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Program.cs @@ -0,0 +1,55 @@ +//********************************************************************************** +//* テンプレート +//********************************************************************************** + +// サンプル中のテンプレートなので、必要に応じて使用して下さい。 + +//********************************************************************************** +//* クラス名 :Program +//* クラス日本語名 :Program +//* +//* 作成日時 :- +//* 作成者 :- +//* 更新履歴 :- +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using System.Net.Http; + +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + +using Touryo.Infrastructure.Framework.Authentication; + +namespace ASPNETWebServiceCore +{ + /// Program + public class Program + { + /// + /// Main(エントリポイント) + /// コマンドライン引数 + public static void Main(string[] args) + { + // JwkSet取得用 + OAuth2AndOIDCClient.HttpClient = new HttpClient(); + + // BuildWebHostが返すIWebHostをRunする。 + // 呼び出し元スレッドは終了までブロックされる。 + Program.CreateHostBuilder(args).Build().Run(); + } + + /// CreateHostBuilder + /// コマンドライン引数 + /// IWebHost + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Properties/launchSettings.json b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Properties/launchSettings.json new file mode 100644 index 000000000..03012eaef --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:8888/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "ASPNETWebService": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:8888/" + } + } +} \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Startup.cs b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Startup.cs new file mode 100644 index 000000000..df06c2849 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Startup.cs @@ -0,0 +1,159 @@ +//********************************************************************************** +//* テンプレート +//********************************************************************************** + +// サンプル中のテンプレートなので、必要に応じて使用して下さい。 + +//********************************************************************************** +//* クラス名 :Startup +//* クラス日本語名 :Startup +//* +//* 作成日時 :- +//* 作成者 :- +//* 更新履歴 :- +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 20xx/xx/xx XX XX XXXX +//********************************************************************************** + +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +// using Microsoft.AspNetCore.Mvc.Cors.Internal; + +using Touryo.Infrastructure.Framework.StdMigration; +using Touryo.Infrastructure.Public.Util; + +namespace ASPNETWebServiceCore +{ + /// + /// Startup + /// ミドルウェア /サービス / フレームワークを + /// Startupクラスのメソッドで注入することにより、活用できるようになる。 + /// + public class Startup + { + #region mem & prop & constructor + + /// Configuration + public IConfiguration Configuration { get; } + + /// constructor + /// IConfiguration + public Startup(IConfiguration configuration) + { + Configuration = configuration; + + // ライブラリにも設定 + GetConfigParameter.InitConfiguration(configuration); + // Dockerで埋め込まれたリソースを使用する場合、 + // 以下のコメントアウトを解除し、appsettings.jsonのappSettings sectionに、 + // "Azure": "既定の名前空間" を指定し、設定ファイルを埋め込まれたリソースに変更する。 + //Touryo.Infrastructure.Business.Dao.MyBaseDao.UseEmbeddedResource = true; + } + + #endregion + + #region Configure & ConfigureServices + + /// + /// This method gets called by the runtime. + /// Use this method to configure the HTTP request pipeline. + /// + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + // The default HSTS value is 30 days. + // You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } + + // HttpContextのマイグレーション用 + app._UseHttpContextAccessor(); + + app.UseHttpsRedirection(); + + app.UseRouting(); + + //app.UseAuthentication(); + //app.UseAuthorization(); + + app.UseCors( //認証・認可の後ろ + builder => builder + .AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader()); + + //.AllowCredentials()); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute( + name: "DotNETOnlineWebAPI", + pattern: "WebAPIControllerForFx", + defaults: new { controller = "Fx", action = "DotNETOnlineWebAPI" }); + + endpoints.MapControllerRoute( + name: "hoge", + pattern: "hogehoge", + defaults: new { controller = "Fx", action = "hoge" }); + + endpoints.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); + }); + } + + /// + /// This method gets called by the runtime. + /// Use this method to add services to the container. + /// + /// IServiceCollection + public void ConfigureServices(IServiceCollection services) + { + // 構成情報から、AppConfiguration SectionをAppConfiguration Classへバインドするようなケース。 + //services.Configure(Configuration.GetSection("AppConfiguration")); + + // HttpContextのマイグレーション用 + services._AddHttpContextAccessor(); + + // Core 3.0のテンプレートではUseMvcの + // 代わりにこれらを使用するようになった。 + services + .AddControllers()// WebAPI + .AddNewtonsoftJson();// JSON シリアライザの変更 + + //services.AddControllersWithViews(); // MVC & WebAPI + // services.AddRazorPages(); // Razor Page + + // AddMvc + services.AddMvc(); + + // AddCors + services.AddCors( + o => o.AddPolicy("AllowAllOrigins", + builder => + { + builder + .AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader(); + })); + } + + #endregion + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.Development.json b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.Development.json new file mode 100644 index 000000000..fa8ce71a9 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.Development.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json new file mode 100644 index 000000000..841bf1420 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json @@ -0,0 +1,86 @@ +{ + // 簡易ログの設定 + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Warning" + } + }, + "Console": { + "LogLevel": { + "Default": "Warning" + } + } + }, + + // Here is where you can supply custom configuration settings, Since it is is JSON, + // everything is represented as key: value pairs. Name of section is your choice. + "AppConfiguration": { + "XXXX": "xxxx", + "YYYY": "yyyy" + }, + + // 以下は*.configから移行されたsection + + // connectionStrings section + "connectionStrings": { + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;", + "ConnectionString_ODBC": "Dsn=odbc_test1", + "ConnectionString_ODP": "User Id=SCOTT;Password=tiger;Data Source=localhost/XE;", + "ConnectionString_MCN": "Server=localhost;Database=test;User Id=root;Password=seigi@123", + "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;" + }, + + // appSettings section + "appSettings": { + // Webサービス用 + + // フレームワークの使用するパラメータ - start + + // 共有情報定義へのパス + "FxXMLSPDefinition": "C:\\root\\files\\resource\\XML\\SPDefinition.xml", + // メッセージ定義へのパス + "FxXMLMSGDefinition": "C:\\root\\files\\resource\\XML\\MSGDefinition.xml", + // トランザクション制御定義へのパス + "FxXMLTCDefinition": "C:\\root\\files\\resource\\XML\\TCDefinition.xml", + // 名前解決定義へのパス + "FxXMLTMInProcessDefinition": "C:\\root\\files\\resource\\XML\\TMInProcessDefinition.xml", + + // フレームワークの使用するパラメータ - end + + // 共通部品の使用するパラメータ - start + + // Log4Netのコンフィグファイルへのパス + "FxLog4NetConfFile": "C:\\root\\files\\resource\\Log\\SampleLogConfWebService.xml", + // 共通部品の使用するパラメータ - end + // D層のパフォーマンスログ出力機能のon・off" "-->", + "FxSqlTraceLog": "on", + // D層のSQL文キャッシュ機能のon・off + // 開発フェーズのことを考慮して、デフォルトoffに設定", + "FxSqlCacheSwitch": "off", + // D層のSQLロード時のエンコーディングを指定(shift_jis、utf-8.etc) + "FxSqlEncoding": "utf-8", + // D層のコマンド タイムアウト値を指定(秒) + "FxSqlCommandTimeout": "30", + + // 共通部品の使用するパラメータ - end + + // アプリケーションの使用するパラメータ - start + + // OAuth2, OIDC認証 + "OAuth2AndOidcIsser": "http://jwtssoauth.opentouryo.com", + "OAuth2AndOidcClientIDs": [ + "67d328bfe8604aae83fb15fa44780d8b", + "f53469c17c5a432f86ce563b7805ab89", + "b6b393fe861b430eb4ee061006826b03", + "f374a155909d486a9234693c34e94479" + ], + "OAuth2AndOidcRS256Cer": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", + + // SQLファイルファイル(フォルダ)へのパス + "SqlTextFilePath": "C:\\root\\files\\resource\\Sql" + + // アプリケーションの使用するパラメータ - end + } +} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/WSIFType_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/WSIFType_sample.csproj index 759c49f41..90a0e7106 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/WSIFType_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSIFType_sample/WSIFType_sample.csproj @@ -1,7 +1,7 @@ - netcoreapp2.0 + netcoreapp3.0 @@ -10,13 +10,13 @@ - ..\..\..\Frameworks\Infrastructure\Build_netcore20\netcoreapp2.0\OpenTouryo.Business.dll + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll - ..\..\..\Frameworks\Infrastructure\Build_netcore20\netcoreapp2.0\OpenTouryo.Framework.dll + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll - ..\..\..\Frameworks\Infrastructure\Build_netcore20\netcoreapp2.0\OpenTouryo.Public.dll + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/WSServer_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/WSServer_sample.csproj index fc568f79f..aa761b62f 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/WSServer_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSServer_sample/WSServer_sample.csproj @@ -1,12 +1,7 @@ - netcoreapp2.0 - - - - ..\..\..\Frameworks\Infrastructure\Build_netcore20\ - ..\..\..\Frameworks\Infrastructure\Build_netcore20\netcoreapp2.0\WSServer_sample.xml + netcoreapp3.0 @@ -25,13 +20,13 @@ - ..\..\..\Frameworks\Infrastructure\Build_netcore20\netcoreapp2.0\OpenTouryo.Business.dll + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll - ..\..\..\Frameworks\Infrastructure\Build_netcore20\netcoreapp2.0\OpenTouryo.Framework.dll + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll - ..\..\..\Frameworks\Infrastructure\Build_netcore20\netcoreapp2.0\OpenTouryo.Public.dll + ..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll From 2bf487a85410fd8d07266d45dd0142c8718b9eb3 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 18 Nov 2019 15:26:41 +0900 Subject: [PATCH 18/47] Now, I am fixing #328. WSClientWin2_sample is changed to .NET Core3. --- .../WSClientWin2_sample/app.config | 31 --- .../WSClientWin2_sample/MSGDefinition.xml | 23 -- .../WSClientWin2_sample/Program.cs | 4 + .../Properties/AssemblyInfo.cs | 51 ---- .../WSClientWin2_sample/SPDefinition.xml | 15 -- .../WSClientWin2_sample.csproj | 234 +++--------------- .../WSClientWin2_sample/app.config | 81 ------ .../WSClientWin2_sample/appsettings.json | 32 +++ .../WSClientWin2_sample/app.config | 40 +-- 9 files changed, 84 insertions(+), 427 deletions(-) delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/MSGDefinition.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Properties/AssemblyInfo.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SPDefinition.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/appsettings.json diff --git a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config index 543368267..6734fd9de 100644 --- a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config +++ b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config @@ -28,48 +28,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/MSGDefinition.xml deleted file mode 100644 index f2283b409..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/MSGDefinition.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Program.cs index af7942923..40289262e 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Program.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Program.cs @@ -22,6 +22,7 @@ using System.Windows.Forms; using Touryo.Infrastructure.Business.RichClient.Util; +using Touryo.Infrastructure.Public.Util; namespace WSClientWin2_sample { @@ -37,6 +38,9 @@ static class Program [STAThread] static void Main() { + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); + // 既定の処理 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Properties/AssemblyInfo.cs deleted file mode 100644 index 6a6f6fb69..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,51 +0,0 @@ -//********************************************************************************** -//* Windows Forms用 P層 フレームワーク・テスト アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("WSClientWin2_sample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("WSClientWin2_sample")] -[assembly: AssemblyCopyright("Copyright (C) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です -[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SPDefinition.xml deleted file mode 100644 index 6baf634bc..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/SPDefinition.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - -]> - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj index db68c015a..024757477 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj @@ -1,211 +1,57 @@ - - + + - Debug - AnyCPU - 8.0.50727 - 2.0 - {386EA604-40DB-44A8-87AE-F29B209BA9CF} WinExe - Properties + netcoreapp3.0 + true + + WSClientWin2_sample WSClientWin2_sample - v4.6 - - - 2.0 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll - - - - - - - - - - Form - - - ByReturn.cs - - - Form - - - Form0.cs - - - Form - - - Form1.cs - - - Form - - - Form2.cs - - - Form - - - Form3.cs - - - Form - - - Login.cs - - - - - Form - - - Splash.cs - - - UserControl - - - UserControl3.cs - - - UserControl - - - UserControlChild.cs - - - UserControl - - - UserControlParent.cs - - + - - Designer - Form0.cs - - - Designer - Form1.cs - - - Designer - Form2.cs - - - UserControlChild.cs - - - UserControlParent.cs - + + - - Designer - ByReturn.cs - - - Login.cs - Designer - - - Designer - Splash.cs + + Always + - - Designer - Form3.cs - - - Designer - UserControl3.cs - + + + + + + - + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.RichClient.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll + + - - Always - - - Always - - + Always - + - - - \ No newline at end of file + + + + diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/app.config deleted file mode 100644 index 543368267..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/app.config +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/appsettings.json b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/appsettings.json new file mode 100644 index 000000000..02f371b74 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin2_sample/appsettings.json @@ -0,0 +1,32 @@ +{ + // appSettings section + "appSettings": { + + // t[[N̎gpp[^ - start + // Rg[̃vtBbNX + "FxPrefixOfButton": "btn", + "FxPrefixOfPictureBox": "pbx", + "FxPrefixOfComboBox": "cbb", + "FxPrefixOfListBox": "lbx", + "FxPrefixOfRadioButton": "rbn", + + "FxMaxThreadCount": "3", + + // ʕi̎gpp[^ - start + + // Log4Net̃RtBOt@Cւ̃pX + // \[X t@C̏ꍇ + "FxLog4NetConfFile": "SampleLogConf2CS.xml", + // ߍ܂ꂽ\[X̏ꍇ + // "FxLog4NetConfFile": "WSClientWin_sample2.SampleLogConf2CS.xml", + + // ʕi̎gpp[^ - end + + // AvP[V̎gpp[^ - start + + // Rg[̃vtBbNXiljj + "FxPrefixOfCheckBox": "cbx" + + // AvP[V̎gpp[^ - end + } +} \ No newline at end of file diff --git a/root/programs/VB/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config b/root/programs/VB/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config index a176e9c85..6734fd9de 100644 --- a/root/programs/VB/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config +++ b/root/programs/VB/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/app.config @@ -28,47 +28,23 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + From 934ee02c7b26077219986c4fa766707cb9694b5a Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 18 Nov 2019 16:03:27 +0900 Subject: [PATCH 19/47] Now, I am fixing #328. WSClientWin_sample is changed to .NET Core3. --- .../WSClientWin_sample/Form1.cs | 6 +- .../WSClientWin_sample/Program.cs | 4 + .../Properties/AssemblyInfo.cs | 51 ---- .../WSClientWin_sample.csproj | 222 +++++------------- .../WSClientWin_sample/WSClientWin_sample.sln | 27 +-- .../WSClientWin_sample/app.config | 137 ----------- .../WSClientWin_sample/appsettings.json | 87 +++++++ .../WSClientWin_sample/packages.config | 7 - 8 files changed, 163 insertions(+), 378 deletions(-) delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Properties/AssemblyInfo.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/appsettings.json delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/packages.config diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.cs index b6690f580..a31ff5d13 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Form1.cs @@ -102,9 +102,9 @@ protected override void UOC_FormInit() this.ddlExRollback.SelectedIndex = 0; // ddlTransmission - this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET Webサービス呼出", "testWebService")); - this.ddlTransmission.Items.Add(new ComboBoxItem("WCF Webサービス呼出", "testWebService2")); - this.ddlTransmission.Items.Add(new ComboBoxItem("WCF TCPサービス呼出", "testWebService3")); + //this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET Webサービス呼出", "testWebService")); + //this.ddlTransmission.Items.Add(new ComboBoxItem("WCF Webサービス呼出", "testWebService2")); + //this.ddlTransmission.Items.Add(new ComboBoxItem("WCF TCPサービス呼出", "testWebService3")); this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET WebAPI呼出", "testWebService4")); this.ddlTransmission.Items.Add(new ComboBoxItem("インプロセス呼出", "testInProcess")); this.ddlTransmission.SelectedIndex = 0; diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Program.cs index 64443e631..2cd856a93 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Program.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Program.cs @@ -22,6 +22,7 @@ using System.Windows.Forms; using Touryo.Infrastructure.Business.RichClient.Util; +using Touryo.Infrastructure.Public.Util; namespace WSClientWin_sample { @@ -40,6 +41,9 @@ static class Program [STAThread] static void Main() { + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); + // 既定の処理 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Properties/AssemblyInfo.cs deleted file mode 100644 index e575e0d07..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,51 +0,0 @@ -//********************************************************************************** -//* 3層型 サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("WSClientWin_sample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("WSClientWin_sample")] -[assembly: AssemblyCopyright("Copyright (C) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です -[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.csproj index c90e195aa..1f7eeb112 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.csproj @@ -1,186 +1,90 @@ - - + + - Debug - AnyCPU - 8.0.50727 - 2.0 - {386EA604-40DB-44A8-87AE-F29B209BA9CF} WinExe - Properties + netcoreapp3.0 + true + + WSClientWin_sample WSClientWin_sample - v4.6 - - - 2.0 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + - - packages\Microsoft.Owin.4.0.0\lib\net451\Microsoft.Owin.dll - - - packages\Microsoft.Owin.Security.4.0.0\lib\net451\Microsoft.Owin.Security.dll - - - packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll - - - packages\Owin.1.0\lib\net40\Owin.dll - True - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll - - - - - - - - - - ..\..\Build\WSIFType_sample.dll - - - ..\..\Build\WSServer_sample.dll - - - - - - Form - - - Form1.cs - - - Form - - - Login.cs - - - - - Form - - - Splash.cs - - - Designer - Form1.cs - + + + + + + + + - - Designer - - - - - + Always - - - + Always - - Always - - - - - - - - Login.cs - Designer + + Always - + Always - - Splash.cs - Designer + + Always + - - Always - + + + + + + + + + + + + - + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.RichClient.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll + + + ..\..\Build\netcoreapp3.0\WSIFType_sample.dll + + + ..\..\Build\netcoreapp3.0\WSServer_sample.dll + + + + + Always - - + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.sln index 61c361e35..71fa00c42 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.sln +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/WSClientWin_sample.sln @@ -1,13 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29326.143 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WSClientWin_sample", "WSClientWin_sample.csproj", "{386EA604-40DB-44A8-87AE-F29B209BA9CF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASPNETWebService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService\ASPNETWebService.csproj", "{C24BC2FA-D423-4F0F-B2B0-E647B621683D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCFService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\WCFService\WCFService.csproj", "{096A202A-72E4-41D8-8B61-970E48E38135}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASPNETWebServiceCore", "..\..\..\..\..\Frameworks\Infrastructure\ServiceInterface\ASPNETWebServiceCore\ASPNETWebServiceCore\ASPNETWebServiceCore.csproj", "{C24BC2FA-D423-4F0F-B2B0-E647B621683D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -51,26 +49,13 @@ Global {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Mixed Platforms.Build.0 = Release|Any CPU {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.ActiveCfg = Release|Any CPU {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|.NET.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|.NET.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|.NET.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|.NET.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E5A208AB-8769-4E30-AFCE-AD6A551A1AC0} + EndGlobalSection GlobalSection(DPCodeReviewSolutionGUID) = preSolution DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} EndGlobalSection diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/app.config deleted file mode 100644 index 44268a253..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/app.config +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/appsettings.json b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/appsettings.json new file mode 100644 index 000000000..cdf6e6609 --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/appsettings.json @@ -0,0 +1,87 @@ +{ + // appSettings section + "appSettings": { + + // t[[N̎gpp[^ - start + // Rg[̃vtBbNX + "FxPrefixOfButton": "btn", + "FxPrefixOfPictureBox": "pbx", + "FxPrefixOfComboBox": "cbb", + "FxPrefixOfListBox": "lbx", + "FxPrefixOfRadioButton": "rbn", + + // WebT[rX̖O`ւ̃pX + + // \[X t@C̏ꍇ + // In case of using IIS + //"FxXMLTMProtocolDefinition": "TMProtocolDefinition.xml", + // In case of using IIS Express + "FxXMLTMProtocolDefinition": "TMProtocolDefinition2.xml", + "FxXMLTMInProcessDefinition": "TMInProcessDefinition.xml", + + // ߍ܂ꂽ\[X̏ꍇ + // In case of using IIS + //"FxXMLTMProtocolDefinition": "WSClientWin_sample.TMProtocolDefinition.xml", + // In case of using IIS Express + //"FxXMLTMProtocolDefinition": "WSClientWin_sample.TMProtocolDefinition2.xml", + //"FxXMLTMInProcessDefinition": "WSClientWin_sample.TMInProcessDefinition.xml", + + // ̑A`t@Cւ̃pX + + // \[X t@C̏ꍇ + "FxXMLMSGDefinition": "MSGDefinition.xml", + "FxXMLSPDefinition": "SPDefinition.xml", + + // ߍ܂ꂽ\[X̏ꍇ + //"FxXMLMSGDefinition": "WSClientWin_sample.MSGDefinition.xml", + //"FxXMLSPDefinition": "WSClientWin_sample.SPDefinition.xml", + // t[[N̎gpp[^ - end + + // ʕi̎gpp[^ - start + // Log4Net̃RtBOt@Cւ̃pX + // \[X t@C̏ꍇ + // "FxLog4NetConfFile": "SampleLogConf2CS.xml", + // ߍ܂ꂽ\[X̏ꍇ + "FxLog4NetConfFile": "WSClientWin_sample.SampleLogConf2CS.xml", + // cw̃ptH[}XOo͋@\onEoff + "FxSqlTraceLog": "on", + // cwSQLLbV@\onEoff + // JtF[ŶƂlāAftHgoffɐݒ + "FxSqlCacheSwitch": "off", + // cwSQL[h̃GR[fBOwishift_jisAutf-8.etcj + "FxSqlEncoding": "utf-8", + // cw̃R}h ^CAEglwibj + "FxSqlCommandTimeout": "30", + // ʕi̎gpp[^ - end + + // AvP[V̎gpp[^ - start + + // OAuth2, OIDCF + "OAuth2AndOidcIsser": "http://jwtssoauth.opentouryo.com", + "OAuth2AndOidcClientID": "b6b393fe861b430eb4ee061006826b03", + "OAuth2AndOidcSecret": "p2RgAFKF-JaF0A9F1tyDXp4wMq-uQZYyvTBM8wr_v8g", + "OAuth2AndOidcRS256Cer": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", + "JwkSetUri": "https://localhost:44300/MultiPurposeAuthSite/jwkcerts/", + + // SQLt@Ct@CitH_jւ̃pX + "SqlTextFilePath": "C:\\root\\files\\resource\\Sql", + // Rg[̃vtBbNXiljj + "FxPrefixOfCheckBox": "cbx" + // AvP[V̎gpp[^ - end + }, + + // 2wC/SpiWindowsj + // connectionStrings section + "connectionStrings": { + // SQL Server / SQL Clientp + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;", + // Multi-DB / ODCB.NETp + "ConnectionString_ODBC": "Dsn=odbc_test1", + // Oracle / ODP.NETp + "ConnectionString_ODP": "User Id=SCOTT;Password=tiger;Data Source=localhost/XE;", + // MySQL / MySQL Connector/NETp + "ConnectionString_MCN": "Server=localhost;Database=test;User Id=root;Password=seigi@123", + // PostgreSQL / Npgsqlp + "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;" + } +} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/packages.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/packages.config deleted file mode 100644 index 01670b67c..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file From 805fe3e169d9b6223ffe27b46b8ef09f912b780d Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 18 Nov 2019 16:31:55 +0900 Subject: [PATCH 20/47] Removed. Will ClickOnce be ported to .NET Core 3 as well as WinForms? - Stack Overflow https://stackoverflow.com/questions/56390876/will-clickonce-be-ported-to-net-core-3-as-well-as-winforms --- .../WSClientWinCone_sample/AsyncFunc.cs | 78 - .../WSClientWinCone_sample/Form1.Designer.cs | 443 ------ .../WSClientWinCone_sample/Form1.cs | 699 --------- .../WSClientWinCone_sample/Form1.resx | 1311 ----------------- .../WSClientWinCone_sample/Login.Designer.cs | 93 -- .../WSClientWinCone_sample/Login.cs | 121 -- .../WSClientWinCone_sample/Login.resx | 120 -- .../WSClientWinCone_sample/MSGDefinition.xml | 23 - .../WSClientWinCone_sample/Program.cs | 118 -- .../Properties/AssemblyInfo.cs | 51 - .../Properties/app.manifest | 11 - .../WSClientWinCone_sample/SPDefinition.xml | 15 - .../SampleLogConf2CS.xml | 133 -- .../WSClientWinCone_sample/Splash.Designer.cs | 60 - .../WSClientWinCone_sample/Splash.cs | 188 --- .../WSClientWinCone_sample/Splash.resx | 120 -- .../TMProtocolDefinition.xml | 44 - .../TMProtocolDefinition2.xml | 44 - .../WSClientWinCone_sample.csproj | 167 --- .../WSClientWinCone_sample.sln | 77 - .../WSClientWinCone_sample/app.config | 101 -- .../WSClientWinCone_sample/packages.config | 7 - 22 files changed, 4024 deletions(-) delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/AsyncFunc.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.Designer.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.resx delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.Designer.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.resx delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/MSGDefinition.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Program.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/AssemblyInfo.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/app.manifest delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SPDefinition.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SampleLogConf2CS.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.Designer.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.resx delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition2.xml delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.csproj delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.sln delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/packages.config diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/AsyncFunc.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/AsyncFunc.cs deleted file mode 100644 index f32aff560..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/AsyncFunc.cs +++ /dev/null @@ -1,78 +0,0 @@ -//********************************************************************************** -//* 3層型 サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AsyncFunc -//* クラス日本語名 :サンプル アプリ 非同期処理クラス -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using WSIFType_sample; - -using Touryo.Infrastructure.Business.RichClient.Asynchronous; -using Touryo.Infrastructure.Framework.Transmission; - -namespace WSClientWinCone_sample -{ - public class AsyncFunc : MyBaseAsyncFunc - { - /// サービスの論理名称 - public string LogicalName; - - /// コンストラクタ - /// WPFやWinFormの要素 - public AsyncFunc(object _this) : base(_this) { } - - /// 非同期 - /// 引数 - /// 結果 - /// - /// ここは副スレッドから実行されるので注意。 - /// 非同期処理クラスに非同期処理を定義すると、 - /// メンバ変数を引数として利用できる。 - /// - public object btn6_Exec(object param) - { - // 戻り値(キャスト) - TestParameterValue testParameterValue = (TestParameterValue)param; - - // 戻り値 - TestReturnValue testReturnValue; - - // 呼出し制御部品(スレッドセーフでないため副スレッド内で作る) - CallController callCtrl = new CallController(Program.AccessToken); - - // Invoke - testReturnValue = (TestReturnValue)callCtrl.Invoke( - this.LogicalName, testParameterValue); - - //// 進捗表示のテスト - //this.ChangeProgress = delegate(object o) - //{ - // MessageBox.Show(o.ToString()); - //}; - - //this.ExecChangeProgress("進捗表示"); - - //// 非同期メッセージボックス表示のテスト - //DialogResult dr = this.ShowAsyncMessageBoxWin( - // "メッセージ", "タイトル", MessageBoxButtons.YesNo, MessageBoxIcon.Information); - //// 非同期メッセージボックス表示のテスト(エラー) - //System.Windows.MessageBoxResult mr = this.ShowAsyncMessageBoxWPF("メッセージ", "タイトル", - // System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Information); - - // 結果表示 - return testReturnValue; - } - } -} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.Designer.cs deleted file mode 100644 index 9583cade5..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.Designer.cs +++ /dev/null @@ -1,443 +0,0 @@ -namespace WSClientWinCone_sample -{ - partial class Form1 - { - /// - /// 必要なデザイナ変数です。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 使用中のリソースをすべてクリーンアップします。 - /// - /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows フォーム デザイナで生成されたコード - - /// - /// デザイナ サポートに必要なメソッドです。このメソッドの内容を - /// コード エディタで変更しないでください。 - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); - this.label11 = new System.Windows.Forms.Label(); - this.labelMessage = new System.Windows.Forms.Label(); - this.btnButton10 = new System.Windows.Forms.Button(); - this.btnButton9 = new System.Windows.Forms.Button(); - this.btnButton8 = new System.Windows.Forms.Button(); - this.btnButton7 = new System.Windows.Forms.Button(); - this.btnButton6 = new System.Windows.Forms.Button(); - this.btnButton5 = new System.Windows.Forms.Button(); - this.btnButton4 = new System.Windows.Forms.Button(); - this.btnButton3 = new System.Windows.Forms.Button(); - this.btnButton2 = new System.Windows.Forms.Button(); - this.btnButton1 = new System.Windows.Forms.Button(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.label10 = new System.Windows.Forms.Label(); - this.ddlOrderSequence = new System.Windows.Forms.ComboBox(); - this.label9 = new System.Windows.Forms.Label(); - this.ddlOrderColumn = new System.Windows.Forms.ComboBox(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.label8 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.ddlExRollback = new System.Windows.Forms.ComboBox(); - this.label4 = new System.Windows.Forms.Label(); - this.ddlIso = new System.Windows.Forms.ComboBox(); - this.label3 = new System.Windows.Forms.Label(); - this.ddlMode2 = new System.Windows.Forms.ComboBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.ddlMode1 = new System.Windows.Forms.ComboBox(); - this.ddlDap = new System.Windows.Forms.ComboBox(); - this.label16 = new System.Windows.Forms.Label(); - this.textBox7 = new System.Windows.Forms.TextBox(); - this.btnButton12 = new System.Windows.Forms.Button(); - this.label15 = new System.Windows.Forms.Label(); - this.textBox6 = new System.Windows.Forms.TextBox(); - this.label14 = new System.Windows.Forms.Label(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.btnButton11 = new System.Windows.Forms.Button(); - this.label13 = new System.Windows.Forms.Label(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.label12 = new System.Windows.Forms.Label(); - this.ddlTransmission = new System.Windows.Forms.ComboBox(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - this.SuspendLayout(); - // - // label11 - // - resources.ApplyResources(this.label11, "label11"); - this.label11.Name = "label11"; - // - // labelMessage - // - resources.ApplyResources(this.labelMessage, "labelMessage"); - this.labelMessage.Name = "labelMessage"; - // - // btnButton10 - // - resources.ApplyResources(this.btnButton10, "btnButton10"); - this.btnButton10.Name = "btnButton10"; - this.btnButton10.UseVisualStyleBackColor = true; - // - // btnButton9 - // - resources.ApplyResources(this.btnButton9, "btnButton9"); - this.btnButton9.Name = "btnButton9"; - this.btnButton9.UseVisualStyleBackColor = true; - // - // btnButton8 - // - resources.ApplyResources(this.btnButton8, "btnButton8"); - this.btnButton8.Name = "btnButton8"; - this.btnButton8.UseVisualStyleBackColor = true; - // - // btnButton7 - // - resources.ApplyResources(this.btnButton7, "btnButton7"); - this.btnButton7.Name = "btnButton7"; - this.btnButton7.UseVisualStyleBackColor = true; - // - // btnButton6 - // - resources.ApplyResources(this.btnButton6, "btnButton6"); - this.btnButton6.Name = "btnButton6"; - this.btnButton6.UseVisualStyleBackColor = true; - // - // btnButton5 - // - resources.ApplyResources(this.btnButton5, "btnButton5"); - this.btnButton5.Name = "btnButton5"; - this.btnButton5.UseVisualStyleBackColor = true; - // - // btnButton4 - // - resources.ApplyResources(this.btnButton4, "btnButton4"); - this.btnButton4.Name = "btnButton4"; - this.btnButton4.UseVisualStyleBackColor = true; - // - // btnButton3 - // - resources.ApplyResources(this.btnButton3, "btnButton3"); - this.btnButton3.Name = "btnButton3"; - this.btnButton3.UseVisualStyleBackColor = true; - // - // btnButton2 - // - resources.ApplyResources(this.btnButton2, "btnButton2"); - this.btnButton2.Name = "btnButton2"; - this.btnButton2.UseVisualStyleBackColor = true; - // - // btnButton1 - // - resources.ApplyResources(this.btnButton1, "btnButton1"); - this.btnButton1.Name = "btnButton1"; - this.btnButton1.UseVisualStyleBackColor = true; - // - // dataGridView1 - // - this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - resources.ApplyResources(this.dataGridView1, "dataGridView1"); - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.RowTemplate.Height = 21; - // - // label10 - // - resources.ApplyResources(this.label10, "label10"); - this.label10.Name = "label10"; - // - // ddlOrderSequence - // - this.ddlOrderSequence.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ddlOrderSequence.FormattingEnabled = true; - resources.ApplyResources(this.ddlOrderSequence, "ddlOrderSequence"); - this.ddlOrderSequence.Name = "ddlOrderSequence"; - // - // label9 - // - resources.ApplyResources(this.label9, "label9"); - this.label9.Name = "label9"; - // - // ddlOrderColumn - // - this.ddlOrderColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ddlOrderColumn.FormattingEnabled = true; - resources.ApplyResources(this.ddlOrderColumn, "ddlOrderColumn"); - this.ddlOrderColumn.Name = "ddlOrderColumn"; - // - // textBox3 - // - resources.ApplyResources(this.textBox3, "textBox3"); - this.textBox3.Name = "textBox3"; - // - // textBox2 - // - resources.ApplyResources(this.textBox2, "textBox2"); - this.textBox2.Name = "textBox2"; - // - // label8 - // - resources.ApplyResources(this.label8, "label8"); - this.label8.Name = "label8"; - // - // label7 - // - resources.ApplyResources(this.label7, "label7"); - this.label7.Name = "label7"; - // - // label6 - // - resources.ApplyResources(this.label6, "label6"); - this.label6.Name = "label6"; - // - // textBox1 - // - resources.ApplyResources(this.textBox1, "textBox1"); - this.textBox1.Name = "textBox1"; - // - // label5 - // - resources.ApplyResources(this.label5, "label5"); - this.label5.Name = "label5"; - // - // ddlExRollback - // - this.ddlExRollback.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ddlExRollback.FormattingEnabled = true; - resources.ApplyResources(this.ddlExRollback, "ddlExRollback"); - this.ddlExRollback.Name = "ddlExRollback"; - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.Name = "label4"; - // - // ddlIso - // - this.ddlIso.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ddlIso.FormattingEnabled = true; - resources.ApplyResources(this.ddlIso, "ddlIso"); - this.ddlIso.Name = "ddlIso"; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // ddlMode2 - // - this.ddlMode2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ddlMode2.FormattingEnabled = true; - resources.ApplyResources(this.ddlMode2, "ddlMode2"); - this.ddlMode2.Name = "ddlMode2"; - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // ddlMode1 - // - this.ddlMode1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ddlMode1.FormattingEnabled = true; - resources.ApplyResources(this.ddlMode1, "ddlMode1"); - this.ddlMode1.Name = "ddlMode1"; - // - // ddlDap - // - this.ddlDap.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ddlDap.FormattingEnabled = true; - resources.ApplyResources(this.ddlDap, "ddlDap"); - this.ddlDap.Name = "ddlDap"; - // - // label16 - // - resources.ApplyResources(this.label16, "label16"); - this.label16.Name = "label16"; - // - // textBox7 - // - resources.ApplyResources(this.textBox7, "textBox7"); - this.textBox7.Name = "textBox7"; - // - // btnButton12 - // - resources.ApplyResources(this.btnButton12, "btnButton12"); - this.btnButton12.Name = "btnButton12"; - this.btnButton12.UseVisualStyleBackColor = true; - // - // label15 - // - resources.ApplyResources(this.label15, "label15"); - this.label15.Name = "label15"; - // - // textBox6 - // - resources.ApplyResources(this.textBox6, "textBox6"); - this.textBox6.Name = "textBox6"; - // - // label14 - // - resources.ApplyResources(this.label14, "label14"); - this.label14.Name = "label14"; - // - // textBox5 - // - resources.ApplyResources(this.textBox5, "textBox5"); - this.textBox5.Name = "textBox5"; - // - // btnButton11 - // - resources.ApplyResources(this.btnButton11, "btnButton11"); - this.btnButton11.Name = "btnButton11"; - this.btnButton11.UseVisualStyleBackColor = true; - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // - // textBox4 - // - resources.ApplyResources(this.textBox4, "textBox4"); - this.textBox4.Name = "textBox4"; - // - // label12 - // - resources.ApplyResources(this.label12, "label12"); - this.label12.Name = "label12"; - // - // ddlTransmission - // - this.ddlTransmission.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ddlTransmission.FormattingEnabled = true; - resources.ApplyResources(this.ddlTransmission, "ddlTransmission"); - this.ddlTransmission.Name = "ddlTransmission"; - // - // Form1 - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.label12); - this.Controls.Add(this.ddlTransmission); - this.Controls.Add(this.label16); - this.Controls.Add(this.textBox7); - this.Controls.Add(this.btnButton12); - this.Controls.Add(this.label15); - this.Controls.Add(this.textBox6); - this.Controls.Add(this.label14); - this.Controls.Add(this.textBox5); - this.Controls.Add(this.btnButton11); - this.Controls.Add(this.label13); - this.Controls.Add(this.textBox4); - this.Controls.Add(this.label11); - this.Controls.Add(this.labelMessage); - this.Controls.Add(this.btnButton10); - this.Controls.Add(this.btnButton9); - this.Controls.Add(this.btnButton8); - this.Controls.Add(this.btnButton7); - this.Controls.Add(this.btnButton6); - this.Controls.Add(this.btnButton5); - this.Controls.Add(this.btnButton4); - this.Controls.Add(this.btnButton3); - this.Controls.Add(this.btnButton2); - this.Controls.Add(this.btnButton1); - this.Controls.Add(this.dataGridView1); - this.Controls.Add(this.label10); - this.Controls.Add(this.ddlOrderSequence); - this.Controls.Add(this.label9); - this.Controls.Add(this.ddlOrderColumn); - this.Controls.Add(this.textBox3); - this.Controls.Add(this.textBox2); - this.Controls.Add(this.label8); - this.Controls.Add(this.label7); - this.Controls.Add(this.label6); - this.Controls.Add(this.textBox1); - this.Controls.Add(this.label5); - this.Controls.Add(this.ddlExRollback); - this.Controls.Add(this.label4); - this.Controls.Add(this.ddlIso); - this.Controls.Add(this.label3); - this.Controls.Add(this.ddlMode2); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.ddlMode1); - this.Controls.Add(this.ddlDap); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "Form1"; - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label11; - private System.Windows.Forms.Label labelMessage; - private System.Windows.Forms.Button btnButton10; - private System.Windows.Forms.Button btnButton9; - private System.Windows.Forms.Button btnButton8; - private System.Windows.Forms.Button btnButton7; - private System.Windows.Forms.Button btnButton6; - private System.Windows.Forms.Button btnButton5; - private System.Windows.Forms.Button btnButton4; - private System.Windows.Forms.Button btnButton3; - private System.Windows.Forms.Button btnButton2; - private System.Windows.Forms.Button btnButton1; - private System.Windows.Forms.DataGridView dataGridView1; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.ComboBox ddlOrderSequence; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.ComboBox ddlOrderColumn; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.ComboBox ddlExRollback; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.ComboBox ddlIso; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.ComboBox ddlMode2; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox ddlMode1; - private System.Windows.Forms.ComboBox ddlDap; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.TextBox textBox7; - private System.Windows.Forms.Button btnButton12; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.TextBox textBox6; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.Button btnButton11; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.ComboBox ddlTransmission; - } -} - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.cs deleted file mode 100644 index 5999e0d83..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.cs +++ /dev/null @@ -1,699 +0,0 @@ -//********************************************************************************** -//* 3層型 サンプル アプリ画面 -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :Form1 -//* クラス日本語名 :サンプル アプリ画面 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using WSIFType_sample; - -using System; -using System.Data; -using System.Windows.Forms; - -using Touryo.Infrastructure.Business.RichClient.Presentation; -using Touryo.Infrastructure.Business.RichClient.Asynchronous; -using Touryo.Infrastructure.Business.RichClient.Util; - -using Touryo.Infrastructure.Framework.RichClient.Presentation; -using Touryo.Infrastructure.Framework.RichClient.Asynchronous; -using Touryo.Infrastructure.Framework.Transmission; -using Touryo.Infrastructure.Framework.Util; - -namespace WSClientWinCone_sample -{ - /// サンプル アプリ画面 - public partial class Form1 : MyBaseControllerWin - { - /// 呼出し制御部品 - CallController CallCtrl; - - #region 初期処理 - - public Form1() - { - InitializeComponent(); - } - - /// - /// フォームロードのUOCメソッド - /// - protected override void UOC_FormInit() - { - // フォーム初期化(初回ロード)時に実行する処理を実装する - - // TODO: - MyBaseControllerWin.CanOutPutLog = false; - - // ddlDap - this.ddlDap.Items.Add(new ComboBoxItem("SQL Server / SQL Client", "SQL")); - this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / OLEDB.NET", "OLE")); - this.ddlDap.Items.Add(new ComboBoxItem("Multi-DB / ODCB.NET", "ODB")); - this.ddlDap.Items.Add(new ComboBoxItem("Oracle / ODP.NET", "ODP")); - this.ddlDap.Items.Add(new ComboBoxItem("DB2 / DB2.NET", "DB2")); - this.ddlDap.Items.Add(new ComboBoxItem("HiRDB / HiRDB-DP", "HIR")); - this.ddlDap.Items.Add(new ComboBoxItem("MySQL Cnn/NET", "MCN")); - this.ddlDap.Items.Add(new ComboBoxItem("PostgreSQL / Npgsql", "NPS")); - this.ddlDap.SelectedIndex = 0; - - // ddlMode1 - this.ddlMode1.Items.Add(new ComboBoxItem("個別Dao", "individual")); - this.ddlMode1.Items.Add(new ComboBoxItem("共通Dao", "common")); - this.ddlMode1.Items.Add(new ComboBoxItem("自動生成Dao(更新のみ)", "generate")); - this.ddlMode1.SelectedIndex = 0; - - // ddlMode2 - this.ddlMode2.Items.Add(new ComboBoxItem("静的クエリ", "static")); - this.ddlMode2.Items.Add(new ComboBoxItem("動的クエリ", "dynamic")); - this.ddlMode2.SelectedIndex = 0; - - // ddlIso - this.ddlIso.Items.Add(new ComboBoxItem("ノットコネクト", "NC")); - this.ddlIso.Items.Add(new ComboBoxItem("ノートランザクション", "NT")); - this.ddlIso.Items.Add(new ComboBoxItem("ダーティリード", "RU")); - this.ddlIso.Items.Add(new ComboBoxItem("リードコミット", "RC")); - this.ddlIso.Items.Add(new ComboBoxItem("リピータブルリード", "RR")); - this.ddlIso.Items.Add(new ComboBoxItem("シリアライザブル", "SZ")); - this.ddlIso.Items.Add(new ComboBoxItem("スナップショット", "SS")); - this.ddlIso.Items.Add(new ComboBoxItem("デフォルト", "DF")); - this.ddlIso.SelectedIndex = 1; - - // WSでは使用しない(設定できないので)。 - this.ddlIso.Enabled = false; - - // ddlExRollback - this.ddlExRollback.Items.Add(new ComboBoxItem("正常時", "-")); - this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外", "Business")); - this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外", "System")); - this.ddlExRollback.Items.Add(new ComboBoxItem("その他、一般的な例外", "Other")); - this.ddlExRollback.Items.Add(new ComboBoxItem("業務例外への振替", "Other-Business")); - this.ddlExRollback.Items.Add(new ComboBoxItem("システム例外への振替", "Other-System")); - this.ddlExRollback.SelectedIndex = 0; - - // ddlTransmission - this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET Webサービス呼出", "testWebService")); - this.ddlTransmission.Items.Add(new ComboBoxItem("WCF Webサービス呼出", "testWebService2")); - this.ddlTransmission.Items.Add(new ComboBoxItem("WCF TCPサービス呼出", "testWebService3")); - this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET WebAPI呼出", "testWebService4")); - this.ddlTransmission.SelectedIndex = 0; - - // ddlOrderColumn - this.ddlOrderColumn.Items.Add(new ComboBoxItem("c1", "c1")); - this.ddlOrderColumn.Items.Add(new ComboBoxItem("c2", "c2")); - this.ddlOrderColumn.Items.Add(new ComboBoxItem("c3", "c3")); - this.ddlOrderColumn.SelectedIndex = 0; - - // ddlOrderSequence - this.ddlOrderSequence.Items.Add(new ComboBoxItem("ASC", "A")); - this.ddlOrderSequence.Items.Add(new ComboBoxItem("DESC", "D")); - this.ddlOrderSequence.SelectedIndex = 0; - - // 呼出し制御部品 - if (string.IsNullOrEmpty(Program.AccessToken)) - { - this.CallCtrl = new CallController(MyBaseControllerWin.UserInfo); - } - else - { - this.CallCtrl = new CallController(Program.AccessToken); - } - } - - #region コンボボックス用 - - /// コンボボックス用インナークラス - private class ComboBoxItem - { - /// 表示名 - private string m_name = ""; - - /// - private string m_value = ""; - - /// コンストラクタ - public ComboBoxItem(string name, string value) - { - m_name = name; - m_value = value; - } - - /// 表示名 - public string Name - { - get - { - return m_name; - } - } - - /// - public string Value - { - get - { - return m_value; - } - } - - /// - /// オーバーライドしたメソッド - /// これがコンボボックスに表示される - /// - public override string ToString() - { - return m_name; - } - } - - #endregion - - #endregion - - #region CRUD処理メソッド - - #region 参照系 - - /// 件数取得 - /// イベントハンドラの共通引数 - /// - /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 - /// (非同期実行、結果表示の双方に匿名デリゲードを使用するパターン) - /// - protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) - { - // 非同期処理クラスを生成 - // 匿名デリゲードの場合は、ベース2で良い。 - MyBaseAsyncFunc af = new MyBaseAsyncFunc(this); - - // 引数を纏める - af.Parameter = (object)new TestParameterValue( - this.Name, rcFxEventArgs.ControlName, "SelectCount", - ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, - MyBaseControllerWin.UserInfo); - - // 画面上のデータは退避する - //(オブジェクトであれば、クローンする。) - string logicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; - - // 非同期実行するメソッドを指定(匿名デリゲード) - // ここは副スレッドから実行されるので注意 - // (画面上のメンバに触らないこと!)。 - af.AsyncFunc = delegate(object param) - { - // 引数クラス(キャスト) - TestParameterValue testParameterValue = (TestParameterValue)param; - - // 戻り値 - TestReturnValue testReturnValue; - - // 呼出し制御部品(スレッドセーフでないため副スレッド内で作る) - CallController callCtrl = null; - if (string.IsNullOrEmpty(Program.AccessToken)) - { - callCtrl = new CallController(MyBaseControllerWin.UserInfo); - } - else - { - callCtrl = new CallController(Program.AccessToken); - } - - // Invoke - testReturnValue = (TestReturnValue)callCtrl.Invoke( - logicalName, testParameterValue); - - //// 進捗表示のテスト - //af.ChangeProgress = delegate(object o) - //{ - // MessageBox.Show(o.ToString()); - //}; - - //af.ExecChangeProgress("進捗表示"); - - //// 非同期メッセージボックス表示のテスト - //DialogResult dr = af.ShowAsyncMessageBoxWin( - // "メッセージ", "タイトル", MessageBoxButtons.YesNo, MessageBoxIcon.Information); - //// 非同期メッセージボックス表示のテスト(エラー) - //System.Windows.MessageBoxResult mr = af.ShowAsyncMessageBoxWPF("メッセージ", "タイトル", - // System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Information); - - // 結果表示 - return testReturnValue; - }; - - // 結果表示のメソッドを指定(匿名デリゲード) - // このメソッドは必ず主スレッドで実行される。 - // (画面上のメンバを更新できる!)。 - af.SetResult = delegate(object retVal) - { - if (retVal is Exception) - { - // 例外発生時 - RcMyCmnFunction.ShowErrorMessageWin((Exception)retVal, "非同期処理で例外発生!"); - } - else - { - // 正常時 - - // 戻り値(キャスト) - TestReturnValue testReturnValue = (TestReturnValue)retVal; - - // 結果表示するメッセージ エリア - this.labelMessage.Text = ""; - - if (testReturnValue.ErrorFlag == true) - { - // 結果(業務続行可能なエラー) - this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; - this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; - this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; - } - else - { - // 結果(正常系) - this.labelMessage.Text = testReturnValue.Obj.ToString() + "件のデータがあります"; - } - } - }; - - // 非同期実行する。 - if (!af.Start()) - { - MessageBox.Show("別の非同期処理が実行中です。"); - } - } - - /// 一覧取得(dt) - /// イベントハンドラの共通引数 - protected void UOC_btnButton2_Click(RcFxEventArgs rcFxEventArgs) - { - // 引数クラスを生成 - // 下位(B・D層)は、テスト クラスを流用する - TestParameterValue testParameterValue - = new TestParameterValue( - this.Name, rcFxEventArgs.ControlName, "SelectAll_DT", - ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, - MyBaseControllerWin.UserInfo); - - // 戻り値 - TestReturnValue testReturnValue; - - // Invoke - testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( - ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); - - // 結果表示するメッセージ エリア - this.labelMessage.Text = ""; - - if (testReturnValue.ErrorFlag == true) - { - // 結果(業務続行可能なエラー) - this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; - this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; - this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; - } - else - { - // 結果(正常系) - this.dataGridView1.DataSource = testReturnValue.Obj; - } - } - - /// 一覧取得(ds) - /// イベントハンドラの共通引数 - protected void UOC_btnButton3_Click(RcFxEventArgs rcFxEventArgs) - { - // 引数クラスを生成 - // 下位(B・D層)は、テスト クラスを流用する - TestParameterValue testParameterValue - = new TestParameterValue( - this.Name, rcFxEventArgs.ControlName, "SelectAll_DS", - ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, - MyBaseControllerWin.UserInfo); - - // 戻り値 - TestReturnValue testReturnValue; - - // Invoke - testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( - ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); - - // 結果表示するメッセージ エリア - this.labelMessage.Text = ""; - - if (testReturnValue.ErrorFlag == true) - { - // 結果(業務続行可能なエラー) - this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; - this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; - this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; - } - else - { - // 結果(正常系) - this.dataGridView1.DataSource = ((DataSet)testReturnValue.Obj).Tables[0]; - } - } - - /// 一覧取得(dr) - /// イベントハンドラの共通引数 - protected void UOC_btnButton4_Click(RcFxEventArgs rcFxEventArgs) - { - // 引数クラスを生成 - // 下位(B・D層)は、テスト クラスを流用する - TestParameterValue testParameterValue - = new TestParameterValue( - this.Name, rcFxEventArgs.ControlName, "SelectAll_DR", - ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, - MyBaseControllerWin.UserInfo); - - // 戻り値 - TestReturnValue testReturnValue; - - // Invoke - testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( - ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); - - // 結果表示するメッセージ エリア - this.labelMessage.Text = ""; - - if (testReturnValue.ErrorFlag == true) - { - // 結果(業務続行可能なエラー) - this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; - this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; - this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; - } - else - { - // 結果(正常系) - this.dataGridView1.DataSource = testReturnValue.Obj; - } - } - - /// 一覧取得(動的sql) - /// イベントハンドラの共通引数 - protected void UOC_btnButton5_Click(RcFxEventArgs rcFxEventArgs) - { - // 引数クラスを生成 - // 下位(B・D層)は、テスト クラスを流用する - TestParameterValue testParameterValue - = new TestParameterValue( - this.Name, rcFxEventArgs.ControlName, "SelectAll_DSQL", - ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, - MyBaseControllerWin.UserInfo); - - // 動的SQLの要素を設定 - testParameterValue.OrderColumn = ((ComboBoxItem)this.ddlOrderColumn.SelectedItem).Value; - testParameterValue.OrderSequence = ((ComboBoxItem)this.ddlOrderSequence.SelectedItem).Value; - - // 戻り値 - TestReturnValue testReturnValue; - - // Invoke - testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( - ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); - - // 結果表示するメッセージ エリア - this.labelMessage.Text = ""; - - if (testReturnValue.ErrorFlag == true) - { - // 結果(業務続行可能なエラー) - this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; - this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; - this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; - } - else - { - // 結果(正常系) - this.dataGridView1.DataSource = testReturnValue.Obj; - } - } - - /// 参照処理 - /// イベントハンドラの共通引数 - /// - /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 - /// (結果表示にだけ匿名デリゲードを使用するパターン) - /// - protected void UOC_btnButton6_Click(RcFxEventArgs rcFxEventArgs) - { - // 非同期処理クラスを生成 - AsyncFunc af = new AsyncFunc(this); - - // 引数クラスを生成 - // 下位(B・D層)は、テスト クラスを流用する - TestParameterValue testParameterValue - = new TestParameterValue( - this.Name, rcFxEventArgs.ControlName, "Select", - ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, - MyBaseControllerWin.UserInfo); - - // 情報の設定 - testParameterValue.ShipperID = int.Parse(this.textBox1.Text); - - // 引数を非同期処理クラスに設定 - af.Parameter = testParameterValue; - - // 画面上のデータは退避する(オブジェクトであれば、クローンする。) - af.LogicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; - - // 非同期実行するメソッドを指定 - // ここは副スレッドから実行されるので注意。 - af.AsyncFunc = new BaseAsyncFunc.AsyncFuncDelegate(af.btn6_Exec); - - // 結果表示のメソッドを指定(匿名デリゲード) - // このメソッドは必ず主スレッドで実行される。 - af.SetResult = delegate(object retVal) - { - if (retVal is Exception) - { - // 例外発生時 - RcMyCmnFunction.ShowErrorMessageWin((Exception)retVal, "非同期処理で例外発生!"); - } - else - { - // 正常時 - - // 戻り値(キャスト) - TestReturnValue testReturnValue = (TestReturnValue)retVal; - // 結果表示するメッセージ エリア - this.labelMessage.Text = ""; - - if (testReturnValue.ErrorFlag == true) - { - // 結果(業務続行可能なエラー) - this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; - this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; - this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; - } - else - { - // 結果(正常系) - this.textBox1.Text = testReturnValue.ShipperID.ToString(); - this.textBox2.Text = testReturnValue.CompanyName; - this.textBox3.Text = testReturnValue.Phone; - } - } - }; - - // 非同期実行する。 - if (!af.Start()) - { - MessageBox.Show("別の非同期処理が実行中です。"); - } - } - - #endregion - - #region 更新系 - - /// 追加処理 - /// イベントハンドラの共通引数 - protected void UOC_btnButton7_Click(RcFxEventArgs rcFxEventArgs) - { - // 引数クラスを生成 - // 下位(B・D層)は、テスト クラスを流用する - TestParameterValue testParameterValue - = new TestParameterValue( - this.Name, rcFxEventArgs.ControlName, "Insert", - ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, - MyBaseControllerWin.UserInfo); - - // 情報の設定 - testParameterValue.CompanyName = this.textBox2.Text; - testParameterValue.Phone = this.textBox3.Text; - - // 戻り値 - TestReturnValue testReturnValue; - - // Invoke - testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( - ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); - - // 結果表示するメッセージ エリア - this.labelMessage.Text = ""; - - if (testReturnValue.ErrorFlag == true) - { - // 結果(業務続行可能なエラー) - this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; - this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; - this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; - } - else - { - // 結果(正常系) - this.labelMessage.Text = testReturnValue.Obj.ToString() + "件追加"; - } - } - - /// 更新処理 - /// イベントハンドラの共通引数 - protected void UOC_btnButton8_Click(RcFxEventArgs rcFxEventArgs) - { - // 引数クラスを生成 - // 下位(B・D層)は、テスト クラスを流用する - TestParameterValue testParameterValue - = new TestParameterValue( - this.Name, rcFxEventArgs.ControlName, "Update", - ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, - MyBaseControllerWin.UserInfo); - - // 情報の設定 - testParameterValue.ShipperID = int.Parse(this.textBox1.Text); - testParameterValue.CompanyName = this.textBox2.Text; - testParameterValue.Phone = this.textBox3.Text; - - // 戻り値 - TestReturnValue testReturnValue; - - // Invoke - testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( - ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); - - // 結果表示するメッセージ エリア - this.labelMessage.Text = ""; - - if (testReturnValue.ErrorFlag == true) - { - // 結果(業務続行可能なエラー) - this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; - this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; - this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; - } - else - { - // 結果(正常系) - this.labelMessage.Text = testReturnValue.Obj.ToString() + "件更新"; - } - } - - /// 削除処理 - /// イベントハンドラの共通引数 - protected void UOC_btnButton9_Click(RcFxEventArgs rcFxEventArgs) - { - // 引数クラスを生成 - // 下位(B・D層)は、テスト クラスを流用する - TestParameterValue testParameterValue - = new TestParameterValue( - this.Name, rcFxEventArgs.ControlName, "Delete", - ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" - + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, - MyBaseControllerWin.UserInfo); - - // 情報の設定 - testParameterValue.ShipperID = int.Parse(textBox1.Text); - - // 戻り値 - TestReturnValue testReturnValue; - - // Invoke - testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( - ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); - - // 結果表示するメッセージ エリア - this.labelMessage.Text = ""; - - if (testReturnValue.ErrorFlag == true) - { - // 結果(業務続行可能なエラー) - this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; - this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; - this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; - } - else - { - // 結果(正常系) - this.labelMessage.Text = testReturnValue.Obj.ToString() + "件削除"; - } - } - - #endregion - - #endregion - - #region その他 - - /// クリア - /// イベントハンドラの共通引数 - protected void UOC_btnButton10_Click(RcFxEventArgs rcFxEventArgs) - { - this.dataGridView1.DataSource = null; - } - - /// メッセージ取得(埋め込まれたリソース対応) - /// イベントハンドラの共通引数 - protected void UOC_btnButton11_Click(RcFxEventArgs rcFxEventArgs) - { - this.textBox5.Text = GetMessage.GetMessageDescription(this.textBox4.Text); - } - - /// 共有情報取得(埋め込まれたリソース対応) - /// イベントハンドラの共通引数 - protected void UOC_btnButton12_Click(RcFxEventArgs rcFxEventArgs) - { - this.textBox7.Text = GetSharedProperty.GetSharedPropertyValue(this.textBox6.Text); - } - - #endregion - } -} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.resx deleted file mode 100644 index 0ba2be576..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Form1.resx +++ /dev/null @@ -1,1311 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - True - - - - NoControl - - - - 10, 406 - - - 59, 12 - - - 74 - - - 処理結果: - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 12 - - - True - - - NoControl - - - 108, 406 - - - 23, 12 - - - 73 - - - *** - - - labelMessage - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 13 - - - NoControl - - - 274, 373 - - - 464, 23 - - - 72 - - - クリア - - - btnButton10 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 14 - - - NoControl - - - 450, 470 - - - 140, 23 - - - 71 - - - 削除 - - - btnButton9 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 15 - - - NoControl - - - 304, 470 - - - 140, 23 - - - 70 - - - 更新 - - - btnButton8 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 16 - - - NoControl - - - 158, 470 - - - 140, 23 - - - 69 - - - 追加 - - - btnButton7 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 17 - - - NoControl - - - 12, 470 - - - 140, 23 - - - 68 - - - 一件参照(非同期化) - - - btnButton6 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 18 - - - NoControl - - - 596, 441 - - - 140, 23 - - - 67 - - - 一覧取得(動的SQL) - - - btnButton5 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 19 - - - NoControl - - - 450, 441 - - - 140, 23 - - - 66 - - - 一覧取得(dr) - - - btnButton4 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 20 - - - NoControl - - - 304, 441 - - - 140, 23 - - - 65 - - - 一覧取得(ds) - - - btnButton3 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 21 - - - NoControl - - - 158, 441 - - - 140, 23 - - - 64 - - - 一覧取得(dt) - - - btnButton2 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 22 - - - NoControl - - - 12, 441 - - - 140, 23 - - - 63 - - - 件数取得(非同期化) - - - btnButton1 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 23 - - - 274, 9 - - - 464, 358 - - - 62 - - - dataGridView1 - - - System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 24 - - - True - - - NoControl - - - 10, 355 - - - 59, 12 - - - 61 - - - 昇順・降順 - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 25 - - - 12, 370 - - - 250, 20 - - - 60 - - - ddlOrderSequence - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 26 - - - True - - - NoControl - - - 10, 313 - - - 84, 12 - - - 59 - - - 並び替え対象列 - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 27 - - - 12, 328 - - - 250, 20 - - - 58 - - - ddlOrderColumn - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 28 - - - 110, 283 - - - 152, 19 - - - 57 - - - textBox3 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 29 - - - 110, 262 - - - 152, 19 - - - 56 - - - textBox2 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 30 - - - True - - - NoControl - - - 10, 286 - - - 42, 12 - - - 55 - - - Phone: - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 31 - - - True - - - NoControl - - - 10, 265 - - - 87, 12 - - - 54 - - - CompanyName: - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 32 - - - True - - - NoControl - - - 10, 245 - - - 60, 12 - - - 53 - - - ShipperID: - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 33 - - - 110, 242 - - - 152, 19 - - - 52 - - - textBox1 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 34 - - - True - - - NoControl - - - 10, 161 - - - 258, 12 - - - 51 - - - コミット、ロールバックを設定(例外発生時、ロールバック - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 35 - - - 12, 176 - - - 250, 20 - - - 50 - - - ddlExRollback - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 36 - - - True - - - NoControl - - - 10, 123 - - - 91, 12 - - - 49 - - - 分離レベルを選択 - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 37 - - - 12, 138 - - - 250, 20 - - - 48 - - - ddlIso - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 38 - - - True - - - NoControl - - - 10, 85 - - - 252, 12 - - - 47 - - - 静的、動的のクエリ モードを選択(共通Dao選択時) - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 39 - - - 12, 100 - - - 250, 20 - - - 46 - - - ddlMode2 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 40 - - - True - - - NoControl - - - 10, 47 - - - 151, 12 - - - 45 - - - 個別、共通のDao種別を選択 - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 41 - - - True - - - NoControl - - - 12, 9 - - - 237, 12 - - - 44 - - - データアクセス制御クラス(データプロバイダ)を選択 - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 42 - - - 12, 62 - - - 250, 20 - - - 43 - - - ddlMode1 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 43 - - - 12, 24 - - - 250, 20 - - - 42 - - - ddlDap - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 44 - - - True - - - NoControl - - - 237, 538 - - - 23, 12 - - - 91 - - - 値: - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 299, 535 - - - 439, 19 - - - 89 - - - textBox7 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - NoControl - - - 189, 533 - - - 42, 23 - - - 88 - - - - - - btnButton12 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - True - - - NoControl - - - 10, 538 - - - 31, 12 - - - 90 - - - キー: - - - label15 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - 83, 535 - - - 100, 19 - - - 87 - - - textBox6 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 6 - - - True - - - NoControl - - - 237, 513 - - - 56, 12 - - - 86 - - - メッセージ: - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 - - - 299, 510 - - - 439, 19 - - - 84 - - - textBox5 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 8 - - - NoControl - - - 189, 508 - - - 42, 23 - - - 83 - - - - - - btnButton11 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 9 - - - True - - - NoControl - - - 10, 513 - - - 67, 12 - - - 85 - - - メッセージID: - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 10 - - - 83, 510 - - - 100, 19 - - - 82 - - - textBox4 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 11 - - - True - - - NoControl - - - 10, 199 - - - 53, 12 - - - 93 - - - 通信制御 - - - label12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - 12, 214 - - - 250, 20 - - - 92 - - - ddlTransmission - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - True - - - 6, 12 - - - 750, 565 - - - Form1 - - - Form1 - - - Touryo.Infrastructure.Business.RichClient.Presentation.MyBaseControllerWin, Business.RichClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.Designer.cs deleted file mode 100644 index 67eb5ca1d..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.Designer.cs +++ /dev/null @@ -1,93 +0,0 @@ -namespace WSClientWinCone_sample -{ - partial class Login - { - /// - /// 必要なデザイナ変数です。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 使用中のリソースをすべてクリーンアップします。 - /// - /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows フォーム デザイナで生成されたコード - - /// - /// デザイナ サポートに必要なメソッドです。このメソッドの内容を - /// コード エディタで変更しないでください。 - /// - private void InitializeComponent() - { - this.btnButton1 = new System.Windows.Forms.Button(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.btnButton2 = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // btnButton1 - // - this.btnButton1.Location = new System.Drawing.Point(118, 12); - this.btnButton1.Name = "btnButton1"; - this.btnButton1.Size = new System.Drawing.Size(75, 44); - this.btnButton1.TabIndex = 2; - this.btnButton1.Text = "ログイン"; - this.btnButton1.UseVisualStyleBackColor = true; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(12, 12); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(100, 19); - this.textBox1.TabIndex = 0; - // - // textBox2 - // - this.textBox2.Location = new System.Drawing.Point(12, 37); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(100, 19); - this.textBox2.TabIndex = 1; - this.textBox2.UseSystemPasswordChar = true; - // - // btnButton2 - // - this.btnButton2.Location = new System.Drawing.Point(199, 12); - this.btnButton2.Name = "btnButton2"; - this.btnButton2.Size = new System.Drawing.Size(75, 44); - this.btnButton2.TabIndex = 3; - this.btnButton2.Text = "外部ログイン"; - this.btnButton2.UseVisualStyleBackColor = true; - // - // Login - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(285, 78); - this.Controls.Add(this.btnButton2); - this.Controls.Add(this.textBox2); - this.Controls.Add(this.textBox1); - this.Controls.Add(this.btnButton1); - this.Name = "Login"; - this.Text = "Login"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button btnButton1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button btnButton2; - } -} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.cs deleted file mode 100644 index e403ab570..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.cs +++ /dev/null @@ -1,121 +0,0 @@ -//********************************************************************************** -//* 3層型 サンプル アプリ画面 -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :Login -//* クラス日本語名 :ログイン画面 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System; -using System.Collections.Generic; -using System.Threading.Tasks; - -using System.Net.Http; - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -using Touryo.Infrastructure.Framework.Authentication; -using Touryo.Infrastructure.Business.RichClient.Presentation; -using Touryo.Infrastructure.Framework.RichClient.Presentation; - -namespace WSClientWinCone_sample -{ - /// Login - public partial class Login : MyBaseControllerWin - { - /// コンストラクタ - public Login() - { - InitializeComponent(); - - Program.FlagEnd = true; //フラグ初期化 - } - - /// フォームロードのUOCメソッド - protected override void UOC_FormInit() - { - } - - /// ログイン - /// イベントハンドラの共通引数 - protected void UOC_btnButton1_Click(RcFxEventArgs rcFxEventArgs) - { - MyBaseControllerWin.UserInfo.UserName = this.textBox1.Text; - MyBaseControllerWin.UserInfo.IPAddress = Environment.MachineName; - - Program.FlagEnd = false; // フラグ完了 - this.Close(); - } - - /// 外部ログイン - /// イベントハンドラの共通引数 - protected void UOC_btnButton2_Click(RcFxEventArgs rcFxEventArgs) - { - string access_token = this.ExLogin(this.textBox1.Text, this.textBox2.Text).Result; - if (!string.IsNullOrEmpty(access_token)) - { - MyBaseControllerWin.UserInfo.UserName = this.textBox1.Text; - MyBaseControllerWin.UserInfo.IPAddress = Environment.MachineName; - - Program.FlagEnd = false; // フラグ完了 - Program.AccessToken = access_token; // AccessToken - this.Close(); - } - } - - /// 外部ログイン - /// string - /// string - /// access_token - private async Task ExLogin(string userId, string password) - { - OAuth2AndOIDCClient.HttpClient = new HttpClient(); - string response = await OAuth2AndOIDCClient.ResourceOwnerPasswordCredentialsGrantAsync( - new Uri("https://localhost:44300/MultiPurposeAuthSite/token"), - OAuth2AndOIDCParams.ClientID, OAuth2AndOIDCParams.ClientSecret, - userId, password, "profile email phone address roles").ConfigureAwait(false); - - // access_tokenを取得し、検証 - Dictionary dic = JsonConvert.DeserializeObject>(response); - - // access_tokenの検証コード - if (dic.ContainsKey("access_token")) - { - string access_token = dic["access_token"]; - - string sub = ""; - List roles = null; - List scopes = null; - JObject jobj = null; - - if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) - { - // ログインに成功 - return access_token; - } - else - { - // ログインに失敗 - return ""; - } - } - else - { - // ログインに失敗 - return ""; - } - } - } -} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.resx deleted file mode 100644 index 19dc0dd8b..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Login.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/MSGDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/MSGDefinition.xml deleted file mode 100644 index f2283b409..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/MSGDefinition.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Program.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Program.cs deleted file mode 100644 index f5fcca6a4..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Program.cs +++ /dev/null @@ -1,118 +0,0 @@ -//********************************************************************************** -//* 3層型 サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :Program -//* クラス日本語名 :アプリケーションのメイン エントリ ポイント -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System; -using System.Threading; -using System.Windows.Forms; - -using Touryo.Infrastructure.Business.RichClient.Util; - -namespace WSClientWinCone_sample -{ - /// アプリケーションのメイン エントリ ポイント - static class Program - { - /// AccessToken - public static string AccessToken = ""; - - /// 終了するかどうかを表すフラグ - public static bool FlagEnd = true; - - /// - /// アプリケーションのメイン エントリ ポイントです。 - /// - [STAThread] - static void Main() - { - // 既定の処理 - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - - // UnhandledExceptionイベント・ハンドラを登録する - Thread.GetDomain().UnhandledException += new - UnhandledExceptionEventHandler(Application_UnhandledException); - - // ThreadExceptionイベント・ハンドラを登録する - Application.ThreadException += new - ThreadExceptionEventHandler(Application_ThreadException); - - // スプラッシュ画面の表示 - Splash.ShowSplash(new Login()); - - // <スピンロック> - // SleepすればCPUオーバヘッドはほとんど無いが - // Sleep時間を長く、ループ回数を短くする - // ことでよりCPUオーバヘッドを軽減できる。 - - for (int i = 0; i < 30; i++ ) - { - if (Splash.SpinLock) - { - break; // 直ちに抜ける - } - - Thread.Sleep(100); - } - - // ThreadExceptionイベント・ハンドラを登録する - Application.ThreadException += new - ThreadExceptionEventHandler(Application_ThreadException); - - // 次の画面(ログイン画面)の表示 - Application.Run(Splash.NextForm); - if(Program.FlagEnd) - { - return; // ログインしないで終わった場合 - } - - // ThreadExceptionイベント・ハンドラを登録する - Application.ThreadException += new - ThreadExceptionEventHandler(Application_ThreadException); - - // 業務画面の表示(業務の開始) - Application.Run(new Form1()); - } - - // .NET TIPS > 適切に処理されなかった例外をキャッチするには? - // http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html - - /// - /// 未処理例外をキャッチするイベント・ハンドラ - /// - public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) - { - RcMyCmnFunction.ShowErrorMessageWin(e.Exception, "Application_ThreadExceptionによる例外通知です。"); - } - - /// - /// 未処理例外をキャッチするイベント・ハンドラ - /// - /// - /// メイン・スレッド以外の例外はUnhandledExceptionでハンドル - /// - public static void Application_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - Exception ex = e.ExceptionObject as Exception; - if (ex != null) - { - RcMyCmnFunction.ShowErrorMessageWin(ex, "Application_UnhandledExceptionによる例外通知です。"); - } - } - } -} diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/AssemblyInfo.cs deleted file mode 100644 index b72cc6a96..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,51 +0,0 @@ -//********************************************************************************** -//* 3層型 サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("WSClientWinCone_sample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("WSClientWinCone_sample")] -[assembly: AssemblyCopyright("Copyright (C) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントには -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です -[assembly: Guid("f330cb5c-af2a-475b-a923-3662b8cc7c24")] - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/app.manifest b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/app.manifest deleted file mode 100644 index 5a90f2dee..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Properties/app.manifest +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SPDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SPDefinition.xml deleted file mode 100644 index 6baf634bc..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SPDefinition.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - -]> - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SampleLogConf2CS.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SampleLogConf2CS.xml deleted file mode 100644 index e39f2b3fe..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/SampleLogConf2CS.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.Designer.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.Designer.cs deleted file mode 100644 index 5c69b2ac5..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.Designer.cs +++ /dev/null @@ -1,60 +0,0 @@ -namespace WSClientWinCone_sample -{ - partial class Splash - { - /// - /// 必要なデザイナ変数です。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 使用中のリソースをすべてクリーンアップします。 - /// - /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows フォーム デザイナで生成されたコード - - /// - /// デザイナ サポートに必要なメソッドです。このメソッドの内容を - /// コード エディタで変更しないでください。 - /// - private void InitializeComponent() - { - this.label1 = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("MS UI Gothic", 64F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128))); - this.label1.Location = new System.Drawing.Point(15, 93); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(262, 86); - this.label1.TabIndex = 0; - this.label1.Text = "splash"; - // - // Splash - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(292, 273); - this.Controls.Add(this.label1); - this.Name = "Splash"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label1; - } -} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.cs deleted file mode 100644 index fa90ea1ab..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.cs +++ /dev/null @@ -1,188 +0,0 @@ -//********************************************************************************** -//* 3層型 サンプル アプリ画面 -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :Splash -//* クラス日本語名 :スプラッシュ画面 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System; -using System.Threading; -using System.Windows.Forms; - -using Touryo.Infrastructure.Public.Log; - -namespace WSClientWinCone_sample -{ - /// - /// スプラッシュ画面 - /// - /// - /// DOBON.NET > プログラミング道 > .NET Tips - /// > フォーム > スプラッシュウィンドウを表示する - /// http://dobon.net/vb/dotnet/form/splashwindow.html - /// - /// ここでは、フレームワークは使用しない。 - /// - public partial class Splash : Form - { - /// コンストラクタ - public Splash() - { - InitializeComponent(); - - // プロパティの初期化 - this.TopMost = true; - this.ShowInTaskbar = false; - this.FormBorderStyle = FormBorderStyle.None; - this.StartPosition = FormStartPosition.CenterScreen; - - // イベントの設定 - this.Click += new System.EventHandler(Splash.Splash_Click); - this.label1.Click += new System.EventHandler(Splash.Splash_Click); - - // ログの初期化 - LogIF.InfoLog("ACCESS", "Splash"); - } - - /// - /// スプラッシュ画面のクリックイベント - /// - private static void Splash_Click(object sender, EventArgs e) - { - // 副スレッド(スプラッシュ画面を生成したスレッド) - - // スピンロックを終了させ次画面を表示する。 - Splash._spinLock = true; - } - - #region 静的変数 - - /// 実行済みフラグ - private static bool _hasExecuted = false; - - /// スプラッシュ画面表示スレッド - private static Thread _thread = null; - - /// スピンロック用フラグ - /// volatile:スレッドセーフ - private static volatile bool _spinLock = false; - - /// スピンロック用フラグ(Getter) - public static bool SpinLock - { - get { return Splash._spinLock; } - } - - /// スプラッシュ画面(シングルトン) - /// volatile:スレッドセーフ - private static volatile Splash _splashForm = new Splash(); - - /// 次の画面(シングルトン) - /// volatile:スレッドセーフ - private static volatile Form _nextForm = null; - - /// 次の画面(Getter) - public static Form NextForm - { - get { return Splash._nextForm; } - } - - #endregion - - #region スプラッシュ画面を表示する - - /// スプラッシュ画面を表示する - /// 次の画面 - public static void ShowSplash(Form nextForm) - { - // 主スレッド(スプラッシュ画面を生成していないスレッド) - - // 二回以上は起動できない。 - if (Splash._hasExecuted) - { - return; - } - else - { - Splash._hasExecuted = true; - } - - #region スプラッシュ画面を表示 - - // 次の画面を設定する。 - Splash._nextForm = nextForm; -   - // スレッドの作成 - Splash._thread = new Thread( - new ThreadStart(ShowSplashByThread)); - - // スレッドの開始 - Splash._thread.Start(); - - #endregion - } - - /// Thread関数でスプラッシュ画面を表示する。 - private static void ShowSplashByThread() - { - // 副スレッド(スプラッシュ画面を生成したスレッド) - - // スプラッシュ画面を - - // ・作成 - Splash._splashForm = new Splash(); - - // ・閉じるイベントハンドラを仕掛 - Splash._nextForm.Activated += new EventHandler(Splash.Login_Activated); - - // ・表示 - Application.Run(Splash._splashForm); - } - - #endregion - - #region スプラッシュ画面を閉じる - - /// - /// ログイン画面がアクティブになった時、スプラッシュ画面を閉じる - /// - private static void Login_Activated(object sender, EventArgs e) - { - // 主スレッド(スプラッシュ画面を生成していないスレッド) - - // なので、スプラッシュ画面を閉じるメソッドをInvoke - if (Splash._splashForm != null && !Splash._splashForm.IsDisposed) - { - Splash._splashForm.Invoke(new MethodInvoker(Splash.CloseSplash)); - } - - // nullクリア - Splash._splashForm = null; - Splash._nextForm = null; - Splash._thread = null; - } - - /// スプラッシュ画面を閉じる。 - private static void CloseSplash() - { - // 副スレッド(スプラッシュ画面を生成したスレッド) - - // なので、スプラッシュ画面をそのまま閉じる - Splash._splashForm.Close(); - } - - #endregion - } -} \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.resx b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.resx deleted file mode 100644 index 19dc0dd8b..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/Splash.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition.xml deleted file mode 100644 index 4a6e66334..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition2.xml b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition2.xml deleted file mode 100644 index 4207915e3..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/TMProtocolDefinition2.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.csproj deleted file mode 100644 index c4798e14e..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.csproj +++ /dev/null @@ -1,167 +0,0 @@ - - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {386EA604-40DB-44A8-87AE-F29B209BA9CF} - WinExe - Properties - WSClientWinCone_sample - WSClientWinCone_sample - true - 7A5F68587972EC9A9F4493D3C883F9A865E8C3E1 - Internet - true - true - false - WSClientWinCone_sample_TemporaryKey.pfx - v4.6 - - - 2.0 - - - http://localhost/WSClientWinCone_sample/ - false - Web - true - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - packages\Microsoft.Owin.4.0.0\lib\net451\Microsoft.Owin.dll - - - packages\Microsoft.Owin.Security.4.0.0\lib\net451\Microsoft.Owin.Security.dll - - - packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll - - - packages\Owin.1.0\lib\net40\Owin.dll - True - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll - - - - - - - - - ..\..\Build\WSIFType_sample.dll - - - - - - Form - - - Form1.cs - - - Form - - - Login.cs - - - - - Form - - - Splash.cs - - - Designer - Form1.cs - - - - - - - - - - - - - - - - - Login.cs - Designer - - - - - Splash.cs - Designer - - - - - - - - \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.sln deleted file mode 100644 index 6d1640ae4..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/WSClientWinCone_sample.sln +++ /dev/null @@ -1,77 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WSClientWinCone_sample", "WSClientWinCone_sample.csproj", "{386EA604-40DB-44A8-87AE-F29B209BA9CF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASPNETWebService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService\ASPNETWebService.csproj", "{C24BC2FA-D423-4F0F-B2B0-E647B621683D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCFService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\WCFService\WCFService.csproj", "{096A202A-72E4-41D8-8B61-970E48E38135}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|.NET = Debug|.NET - Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|x86 = Debug|x86 - Release|.NET = Release|.NET - Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|.NET.ActiveCfg = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|x86.ActiveCfg = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Debug|x86.Build.0 = Debug|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|.NET.ActiveCfg = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Any CPU.Build.0 = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|x86.ActiveCfg = Release|Any CPU - {386EA604-40DB-44A8-87AE-F29B209BA9CF}.Release|x86.Build.0 = Release|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|.NET.ActiveCfg = Debug|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|.NET.Build.0 = Debug|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|x86.ActiveCfg = Debug|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Debug|x86.Build.0 = Debug|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|.NET.ActiveCfg = Release|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|.NET.Build.0 = Release|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Any CPU.Build.0 = Release|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.ActiveCfg = Release|Any CPU - {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|.NET.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|.NET.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|.NET.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|.NET.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config deleted file mode 100644 index 5395b3d87..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/packages.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/packages.config deleted file mode 100644 index 01670b67c..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWinCone_sample/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file From 2dcafacd310617cc9f238063b399179d94499e19 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 18 Nov 2019 16:56:03 +0900 Subject: [PATCH 21/47] Now, I am fixing #328. WSClientWPF_sample is changed to .NET Core3. --- root/programs/CS/0_ExecAllBat.bat | 4 +- .../programs/CS/8_Build_WSClntCore_sample.bat | 43 ++++ ...n_sample.bat => 8_Build_WSClnt_sample.bat} | 7 + root/programs/CS/9_Build_WSClntWPF_sample.bat | 26 --- .../WSClientWPF_sample/App.xaml.cs | 5 +- .../Properties/AssemblyInfo.cs | 72 ------ .../WSClientWPF_sample.csproj | 205 ++++++------------ .../WSClientWPF_sample/WSClientWPF_sample.sln | 12 +- .../WSClientWPF_sample/Window1.xaml.cs | 6 +- .../WSClientWPF_sample/app.config | 125 ----------- .../WSClientWPF_sample/appsettings.json | 87 ++++++++ 11 files changed, 208 insertions(+), 384 deletions(-) create mode 100644 root/programs/CS/8_Build_WSClntCore_sample.bat rename root/programs/CS/{8_Build_WSClntWin_sample.bat => 8_Build_WSClnt_sample.bat} (85%) delete mode 100644 root/programs/CS/9_Build_WSClntWPF_sample.bat delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Properties/AssemblyInfo.cs delete mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/app.config create mode 100644 root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/appsettings.json diff --git a/root/programs/CS/0_ExecAllBat.bat b/root/programs/CS/0_ExecAllBat.bat index d33f764d0..c9c8762db 100644 --- a/root/programs/CS/0_ExecAllBat.bat +++ b/root/programs/CS/0_ExecAllBat.bat @@ -46,8 +46,8 @@ echo | call 6_Build_WSSrvCore_sample.bat echo | call 7_Build_Framework_WS.bat echo | call 7_Build_Framework_WSCore.bat -echo | call 8_Build_WSClntWin_sample.bat -echo | call 9_Build_WSClntWPF_sample.bat +echo | call 8_Build_WSClnt_sample.bat +echo | call 9_Build_WSClntCore_sample.bat echo | call 10_Build_WebApp_sample.bat echo | call 10_Build_WebAppCore_sample.bat diff --git a/root/programs/CS/8_Build_WSClntCore_sample.bat b/root/programs/CS/8_Build_WSClntCore_sample.bat new file mode 100644 index 000000000..6ed689dc2 --- /dev/null +++ b/root/programs/CS/8_Build_WSClntCore_sample.bat @@ -0,0 +1,43 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Batch build of WSClientWin_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWin_sample\WSClientWin_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWin_sample\WSClientWin_sample.sln" + +pause + +rem -------------------------------------------------- +rem Batch build of WSClientWPF_sample. +rem -------------------------------------------------- +rem dotnet restore "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWinWPF_sample\WSClientWinWPF_sample.sln" +rem dotnet msbuild "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWinWPF_sample\WSClientWinWPF_sample.sln" + +pause + +rem -------------------------------------------------- +rem Batch build of WSClientWin2_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWin2_sample\WSClientWin2_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\WS_sample\WSClient_sample\WSClientWin2_sample\WSClientWin2_sample.sln" + +pause + +rem ------------------------------------------------------- +endlocal diff --git a/root/programs/CS/8_Build_WSClntWin_sample.bat b/root/programs/CS/8_Build_WSClnt_sample.bat similarity index 85% rename from root/programs/CS/8_Build_WSClntWin_sample.bat rename to root/programs/CS/8_Build_WSClnt_sample.bat index 3305ec65b..1c62601cb 100644 --- a/root/programs/CS/8_Build_WSClntWin_sample.bat +++ b/root/programs/CS/8_Build_WSClnt_sample.bat @@ -23,6 +23,13 @@ rem -------------------------------------------------- pause +rem -------------------------------------------------- +rem Batch build of WSClientWPF_sample. +rem -------------------------------------------------- +%BUILDFILEPATH% %COMMANDLINE% "Samples\WS_sample\WSClient_sample\WSClientWPF_sample\WSClientWPF_sample.sln" + +pause + rem -------------------------------------------------- rem Batch build of WSClientWin2_sample. rem -------------------------------------------------- diff --git a/root/programs/CS/9_Build_WSClntWPF_sample.bat b/root/programs/CS/9_Build_WSClntWPF_sample.bat deleted file mode 100644 index 72cfa9c70..000000000 --- a/root/programs/CS/9_Build_WSClntWPF_sample.bat +++ /dev/null @@ -1,26 +0,0 @@ -setlocal - -@rem -------------------------------------------------- -@rem Turn off the echo function. -@rem -------------------------------------------------- -@echo off - -@rem -------------------------------------------------- -@rem Get the path to the executable file. -@rem -------------------------------------------------- -set CURRENT_DIR="%~dp0" - -@rem -------------------------------------------------- -@rem Execution of the common processing. -@rem -------------------------------------------------- -call %CURRENT_DIR%z_Common.bat - -rem -------------------------------------------------- -rem Batch build of WSClientWPF_sample. -rem -------------------------------------------------- -%BUILDFILEPATH% %COMMANDLINE% "Samples\WS_sample\WSClient_sample\WSClientWPF_sample\WSClientWPF_sample.sln" - -pause - -rem ------------------------------------------------------- -endlocal diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml.cs index e7671ac9d..2036cd6df 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/App.xaml.cs @@ -19,6 +19,8 @@ using System.Windows; +using Touryo.Infrastructure.Public.Util; + namespace WSClientWPF_sample { /// App.xaml の相互作用ロジック @@ -26,7 +28,8 @@ public partial class App : Application { private void Application_Startup(object sender, StartupEventArgs e) { - + // configの初期化 + GetConfigParameter.InitConfiguration("appsettings.json"); } } } diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Properties/AssemblyInfo.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Properties/AssemblyInfo.cs deleted file mode 100644 index 7995394e8..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,72 +0,0 @@ -//********************************************************************************** -//* 3層型 サンプル アプリ -//********************************************************************************** - -// テスト用サンプルなので、必要に応じて流用 or 削除して下さい。 - -//********************************************************************************** -//* クラス名 :AssemblyInfo -//* クラス日本語名 :AssemblyInfo設定 -//* -//* 作成日時 :- -//* 作成者 :生技 -//* 更新履歴 : -//* -//* 日時 更新者 内容 -//* ---------- ---------------- ------------------------------------------------- -//* 20xx/xx/xx XX XX XXXX -//********************************************************************************** - -using System.Reflection; -using System.Runtime.InteropServices; -using System.Windows; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("WSClientWPF_sample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("xxxx")] -[assembly: AssemblyProduct("WSClientWPF_sample")] -[assembly: AssemblyCopyright("Copyright (C) xxxx")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -//ローカライズ可能なアプリケーションのビルドを開始するには、 -//.csproj ファイルの CultureYouAreCodingWith を -// 内部で設定します。たとえば、 -//ソース ファイルで英語を使用している場合、 を en-US に設定します。次に、 -//下の NeutralResourceLanguage 属性のコメントを解除します。下の行の "en-US" を -//プロジェクト ファイルの UICulture 設定と一致するよう更新します。 - -//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] - - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //テーマ固有のリソース ディクショナリが置かれている場所 - //(リソースがページ、 - //またはアプリケーション リソース ディクショナリに見つからない場合に使用されます) - ResourceDictionaryLocation.SourceAssembly //汎用リソース ディクショナリが置かれている場所 - //(リソースがページ、 - //アプリケーション、またはいずれのテーマ固有のリソース ディクショナリにも見つからない場合に使用されます) -)] - - -// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を -// 既定値にすることができます: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.csproj b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.csproj index 22371632c..2f18abfb2 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.csproj +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.csproj @@ -1,143 +1,36 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {F9737483-DC6C-45D1-8CB7-27138FD76D36} WinExe - Properties + netcoreapp3.0 + true WSClientWPF_sample WSClientWPF_sample - v4.6 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - - - 3.5 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.RichClient.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.RichClient.dll - - - False - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll - - - - - - - 3.0 - - - 3.0 - - - 3.0 - - - ..\..\Build\WSIFType_sample.dll - - - - - MSBuild:Compile - Designer - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - MSBuild:Compile - Designer - - - App.xaml - Code - - - Window1.xaml - Code - - - - - - Code - - - Window0.xaml - - - + + + + + + + + + + Always + Always - - + + Always + + + Always + Always @@ -145,27 +38,51 @@ Always + - - Always - + + + + + + + + + + + + - - Always - + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Business.RichClient.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Framework.RichClient.dll + + + ..\..\..\..\..\Frameworks\Infrastructure\Build_netcore30\netcoreapp3.0\OpenTouryo.Public.dll + + + ..\..\Build\netcoreapp3.0\WSIFType_sample.dll + + + ..\..\Build\netcoreapp3.0\WSServer_sample.dll + + - + Always - - + + + \ No newline at end of file diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.sln b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.sln index 18d0e984f..ca5facab9 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.sln +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/WSClientWPF_sample.sln @@ -5,9 +5,7 @@ VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WSClientWPF_sample", "WSClientWPF_sample.csproj", "{F9737483-DC6C-45D1-8CB7-27138FD76D36}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASPNETWebService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\ASPNETWebService\ASPNETWebService\ASPNETWebService.csproj", "{C24BC2FA-D423-4F0F-B2B0-E647B621683D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WCFService", "..\..\..\..\Frameworks\Infrastructure\ServiceInterface\WCFService\WCFService.csproj", "{096A202A-72E4-41D8-8B61-970E48E38135}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASPNETWebServiceCore", "..\..\..\..\..\Frameworks\Infrastructure\ServiceInterface\ASPNETWebServiceCore\ASPNETWebServiceCore\ASPNETWebServiceCore.csproj", "{C24BC2FA-D423-4F0F-B2B0-E647B621683D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -33,14 +31,6 @@ Global {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|Any CPU.Build.0 = Release|Any CPU {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.ActiveCfg = Release|Any CPU {C24BC2FA-D423-4F0F-B2B0-E647B621683D}.Release|x86.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|Any CPU.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.ActiveCfg = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Debug|x86.Build.0 = Debug|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|Any CPU.Build.0 = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.ActiveCfg = Release|Any CPU - {096A202A-72E4-41D8-8B61-970E48E38135}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml.cs b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml.cs index a69bba5ba..f7668ddb1 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml.cs +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/Window1.xaml.cs @@ -101,9 +101,9 @@ private void Window_Loaded(object sender, RoutedEventArgs e) this.ddlExRollback.SelectedIndex = 0; // ddlTransmission - this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET Webサービス呼出", "testWebService")); - this.ddlTransmission.Items.Add(new ComboBoxItem("WCF Webサービス呼出", "testWebService2")); - this.ddlTransmission.Items.Add(new ComboBoxItem("WCF TCPサービス呼出", "testWebService3")); + //this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET Webサービス呼出", "testWebService")); + //this.ddlTransmission.Items.Add(new ComboBoxItem("WCF Webサービス呼出", "testWebService2")); + //this.ddlTransmission.Items.Add(new ComboBoxItem("WCF TCPサービス呼出", "testWebService3")); this.ddlTransmission.Items.Add(new ComboBoxItem("ASP.NET WebAPI呼出", "testWebService4")); this.ddlTransmission.Items.Add(new ComboBoxItem("インプロセス呼出", "testInProcess")); this.ddlTransmission.SelectedIndex = 0; diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/app.config b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/app.config deleted file mode 100644 index a3b4f1db5..000000000 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/app.config +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/appsettings.json b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/appsettings.json new file mode 100644 index 000000000..fd7f39d4e --- /dev/null +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/appsettings.json @@ -0,0 +1,87 @@ +{ + // appSettings section + "appSettings": { + + // t[[N̎gpp[^ - start + // Rg[̃vtBbNX + "FxPrefixOfButton": "btn", + "FxPrefixOfPictureBox": "pbx", + "FxPrefixOfComboBox": "cbb", + "FxPrefixOfListBox": "lbx", + "FxPrefixOfRadioButton": "rbn", + + // WebT[rX̖O`ւ̃pX + + // \[X t@C̏ꍇ + // In case of using IIS + //"FxXMLTMProtocolDefinition": "TMProtocolDefinition.xml", + // In case of using IIS Express + "FxXMLTMProtocolDefinition": "TMProtocolDefinition2.xml", + "FxXMLTMInProcessDefinition": "TMInProcessDefinition.xml", + + // ߍ܂ꂽ\[X̏ꍇ + // In case of using IIS + //"FxXMLTMProtocolDefinition": "WSClientWPF_sample.TMProtocolDefinition.xml", + // In case of using IIS Express + //"FxXMLTMProtocolDefinition": "WSClientWPF_sample.TMProtocolDefinition2.xml", + //"FxXMLTMInProcessDefinition": "WSClientWPF_sample.TMInProcessDefinition.xml", + + // ̑A`t@Cւ̃pX + + // \[X t@C̏ꍇ + "FxXMLMSGDefinition": "MSGDefinition.xml", + "FxXMLSPDefinition": "SPDefinition.xml", + + // ߍ܂ꂽ\[X̏ꍇ + //"FxXMLMSGDefinition": "WSClientWPF_sample.MSGDefinition.xml", + //"FxXMLSPDefinition": "WSClientWPF_sample.SPDefinition.xml", + // t[[N̎gpp[^ - end + + // ʕi̎gpp[^ - start + // Log4Net̃RtBOt@Cւ̃pX + // \[X t@C̏ꍇ + // "FxLog4NetConfFile": "SampleLogConf2CS.xml", + // ߍ܂ꂽ\[X̏ꍇ + "FxLog4NetConfFile": "WSClientWPF_sample.SampleLogConf2CS.xml", + // cw̃ptH[}XOo͋@\onEoff + "FxSqlTraceLog": "on", + // cwSQLLbV@\onEoff + // JtF[ŶƂlāAftHgoffɐݒ + "FxSqlCacheSwitch": "off", + // cwSQL[h̃GR[fBOwishift_jisAutf-8.etcj + "FxSqlEncoding": "utf-8", + // cw̃R}h ^CAEglwibj + "FxSqlCommandTimeout": "30", + // ʕi̎gpp[^ - end + + // AvP[V̎gpp[^ - start + + // OAuth2, OIDCF + "OAuth2AndOidcIsser": "http://jwtssoauth.opentouryo.com", + "OAuth2AndOidcClientID": "b6b393fe861b430eb4ee061006826b03", + "OAuth2AndOidcSecret": "p2RgAFKF-JaF0A9F1tyDXp4wMq-uQZYyvTBM8wr_v8g", + "OAuth2AndOidcRS256Cer": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", + "JwkSetUri": "https://localhost:44300/MultiPurposeAuthSite/jwkcerts/", + + // SQLt@Ct@CitH_jւ̃pX + "SqlTextFilePath": "C:\\root\\files\\resource\\Sql", + // Rg[̃vtBbNXiljj + "FxPrefixOfCheckBox": "cbx" + // AvP[V̎gpp[^ - end + }, + + // 2wC/SpiWindowsj + // connectionStrings section + "connectionStrings": { + // SQL Server / SQL Clientp + "ConnectionString_SQL": "Data Source=localhost\\sqlexpress;Initial Catalog=Northwind;Integrated Security=True;", + // Multi-DB / ODCB.NETp + "ConnectionString_ODBC": "Dsn=odbc_test1", + // Oracle / ODP.NETp + "ConnectionString_ODP": "User Id=SCOTT;Password=tiger;Data Source=localhost/XE;", + // MySQL / MySQL Connector/NETp + "ConnectionString_MCN": "Server=localhost;Database=test;User Id=root;Password=seigi@123", + // PostgreSQL / Npgsqlp + "ConnectionString_NPS": "HOST=localhost;DATABASE=postgres;USER ID=postgres;PASSWORD=seigi@123;" + } +} \ No newline at end of file From 3b0bb94e02359ed8b32ef7d397816473811d0d3d Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 18 Nov 2019 17:03:39 +0900 Subject: [PATCH 22/47] Tweak. --- .../WSClientWPF_sample/appsettings.json | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/appsettings.json b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/appsettings.json index fd7f39d4e..cfbf3f663 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/appsettings.json +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWPF_sample/appsettings.json @@ -3,12 +3,6 @@ "appSettings": { // t[[N̎gpp[^ - start - // Rg[̃vtBbNX - "FxPrefixOfButton": "btn", - "FxPrefixOfPictureBox": "pbx", - "FxPrefixOfComboBox": "cbb", - "FxPrefixOfListBox": "lbx", - "FxPrefixOfRadioButton": "rbn", // WebT[rX̖O`ւ̃pX @@ -56,17 +50,8 @@ // AvP[V̎gpp[^ - start - // OAuth2, OIDCF - "OAuth2AndOidcIsser": "http://jwtssoauth.opentouryo.com", - "OAuth2AndOidcClientID": "b6b393fe861b430eb4ee061006826b03", - "OAuth2AndOidcSecret": "p2RgAFKF-JaF0A9F1tyDXp4wMq-uQZYyvTBM8wr_v8g", - "OAuth2AndOidcRS256Cer": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", - "JwkSetUri": "https://localhost:44300/MultiPurposeAuthSite/jwkcerts/", - // SQLt@Ct@CitH_jւ̃pX "SqlTextFilePath": "C:\\root\\files\\resource\\Sql", - // Rg[̃vtBbNXiljj - "FxPrefixOfCheckBox": "cbx" // AvP[V̎gpp[^ - end }, From 17e8ee7a0866a4a7d60012757a265e629abe1df5 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Wed, 25 Dec 2019 14:45:24 +0900 Subject: [PATCH 23/47] Now, I am fixing #353. --- .../Authentication/OAuth2AndOIDCEnum.cs | 33 ++++++++++++++++++- .../Framework/Authentication/SAML2Const.cs | 4 +++ .../Framework/Authentication/SAML2Enum.cs | 19 ++++++++--- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs index 6e5d0ff6e..e0b102e64 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs @@ -28,6 +28,7 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2019/02/06 西野 大介 新規作成 +//* 2019/12/25 西野 大介 PPID対応による見直し //********************************************************************************** namespace Touryo.Infrastructure.Framework.Authentication @@ -87,7 +88,37 @@ public enum AuthMethods : int #endregion - #region ClientMode + #region SubjectTypes + + /// SubjectTypes + public enum SubjectTypes : int + { + /// uname + uname, + + /// public + @public, + + /// pairwise + pairwise + } + + #endregion + + #region ClientInfo(仕様外) + + /// ClientType + public enum ClientType : int + { + /// Confidential + confidential, + + /// Public(SPA) + public_spa, + + /// Public(Native) + public_native + } /// ClientMode public enum ClientMode : int diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Const.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Const.cs index ad506df82..84e23a6ed 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Const.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Const.cs @@ -28,6 +28,7 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2019/05/21 西野 大介 新規作成 +//* 2019/12/25 西野 大介 PPID対応による見直し //********************************************************************************** namespace Touryo.Infrastructure.Framework.Authentication @@ -244,6 +245,9 @@ public const string MetadataTemplate /// NameIDPolicy要素のFormat属性をunspecifiedに指定する。 public const string UrnNameIDFormatUnspecified = UrnHeader11 + "nameid-format:unspecified"; + /// NameIDPolicy要素のFormat属性をemailAddressに指定する。 + public const string UrnNameIDFormatEmailAddress = UrnHeader11 + "nameid-format:emailAddress"; + /// NameIDPolicy要素のFormat属性を永続的仮名に指定する。 public const string UrnNameIDFormatPersistent = UrnHeader20 + "nameid-format:persistent"; diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Enum.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Enum.cs index 86c01aa8b..2e1aebaf8 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Enum.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Enum.cs @@ -28,6 +28,7 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2019/05/21 西野 大介 新規作成 +//* 2019/12/25 西野 大介 PPID対応による見直し //********************************************************************************** //using Touryo.Infrastructure.Public.FastReflection; @@ -64,14 +65,17 @@ public enum SamlSchema : int /// NameIDFormat public enum NameIDFormat : int { - /// unspecified + /// unspecified(UserName or E-Mail or UserID) Unspecified, - /// persistent - Persistent, + /// emailAddress(E-Mail) + EmailAddress, + + /// persistent(PPID) + Persistent, // UserIDをPPID化 /// transient - Transient + Transient // 現状、サポート無し } /// ProtocolBinding @@ -140,6 +144,9 @@ public static string EnumToString(NameIDFormat nameIDFormat) case SAML2Enum.NameIDFormat.Unspecified: ret = SAML2Const.UrnNameIDFormatUnspecified; break; + case SAML2Enum.NameIDFormat.EmailAddress: + ret = SAML2Const.UrnNameIDFormatEmailAddress; + break; case SAML2Enum.NameIDFormat.Persistent: ret = SAML2Const.UrnNameIDFormatPersistent; break; @@ -240,6 +247,10 @@ public static void StringToEnum(string str, out NameIDFormat? nameIDFormat) { nameIDFormat = NameIDFormat.Unspecified; } + else if (str == SAML2Const.UrnNameIDFormatEmailAddress) + { + nameIDFormat = NameIDFormat.EmailAddress; + } else if (str == SAML2Const.UrnNameIDFormatPersistent) { nameIDFormat = NameIDFormat.Persistent; From 23958399ce0c7238e7d5bcd1d4d5bc2e011e9636 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 6 Jan 2020 15:24:51 +0900 Subject: [PATCH 24/47] fixed #354 --- root/programs/CS/z_Common.bat | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/root/programs/CS/z_Common.bat b/root/programs/CS/z_Common.bat index 09b77f5bd..be2a4033c 100644 --- a/root/programs/CS/z_Common.bat +++ b/root/programs/CS/z_Common.bat @@ -8,7 +8,12 @@ set BUILDFILEPATH2.0="C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe" set BUILDFILEPATH3.5="C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" set BUILDFILEPATH4.0="C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" -set BUILDFILEPATH15="C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe" + +if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools" ( + set BUILDFILEPATH15="C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe" +) else ( + set BUILDFILEPATH15="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe" +) set BUILDFILEPATH=%BUILDFILEPATH15% From 1e2c53813ef86e8672d14257f51b55c92bc9acb3 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 6 Jan 2020 15:47:22 +0900 Subject: [PATCH 25/47] fixed #351 --- .../CS/Frameworks/Infrastructure/Public/Db/BaseDam.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/BaseDam.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Db/BaseDam.cs index abac07453..0b233d510 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/BaseDam.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/BaseDam.cs @@ -38,8 +38,7 @@ //* 2009/03/19 西野 大介 DRのインターフェイスをobject→IDataReaderへ変更。 //* 2009/04/26 西野 大介 配列バインド対応を兼ね、型指定を可能にした。 //* 2009/04/28 西野 大介 デフォルト値を設けた -//* 2009/06/02 西野 大介 sln - IR版からの修正 -//* ・#x : CommandTimeOutデフォルト値を設定 +//* 2009/06/02 西野 大介 CommandTimeOutに既定値を設定可能にした。 //* 2009/08/12 西野 大介 比較演算子の向きを「<」に統一した。 //* 2009/09/25 西野 大介 内部の性能測定ログ出力処理を挿入した。 //* ※ Debug.WriteLineは意外に時間がかかるので注意! @@ -71,6 +70,7 @@ //* 2019/07/17 西野 大介 SQLの cache対応 で stackoverflow対応 が顕在化したため、 //* 自動生成でタグ数が多くなり過ぎるケースの対応を行う。 //* ProcessIFTag, ProcessINSCOLTag +//* 2020/01/16 西野 大介 CommandTimeOutの既定値に0を設定可能にした。 //********************************************************************************** using System; @@ -269,11 +269,12 @@ protected void SetCommandTimeout(IDbCommand cmd) } else { + // Configに指定された値を設定する。 int ret = 0; if (int.TryParse(sqlCommandTimeout, out ret)) { - if (0 < ret) // 2009/08/12-この行 + if (0 <= ret) { // 指定の値を設定 cmd.CommandTimeout = ret; From ad628daddeee62fc9fb2f8a158bf41148d306500 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Thu, 13 Feb 2020 16:25:33 +0900 Subject: [PATCH 26/47] Now, I am fixing #353. --- .../Business/Business_net45.csproj | 4 + .../Business/Business_net46.csproj | 4 + .../Business/Business_net47.csproj | 4 + .../Business/Business_net48.csproj | 4 + .../Business/Business_netcore20.csproj | 1 + .../Business/Business_netcore30.csproj | 1 + .../AuthenticationFailureResult.cs | 86 +++++++ .../Presentation/MyBaseAsyncApiController.cs | 230 +++++++++++++----- .../Public/Security/EnumHttpAuthHeader.cs | 48 ++++ .../Security/Public.Security_net45.csproj | 1 + .../Security/Public.Security_net46.csproj | 1 + .../Security/Public.Security_net47.csproj | 1 + .../Security/Public.Security_net48.csproj | 1 + 13 files changed, 327 insertions(+), 59 deletions(-) create mode 100644 root/programs/CS/Frameworks/Infrastructure/Business/Presentation/AuthenticationFailureResult.cs create mode 100644 root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumHttpAuthHeader.cs diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net45.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net45.csproj index 2579e7a78..ea95f605e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net45.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net45.csproj @@ -96,6 +96,9 @@ False ..\Build_net45\OpenTouryo.Public.dll + + ..\Build_net45\OpenTouryo.Public.Security.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True @@ -157,6 +160,7 @@ + ASPXCodeBehind diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net46.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net46.csproj index cd2dcd98d..ddd3a8de0 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net46.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net46.csproj @@ -96,6 +96,9 @@ False ..\Build_net46\OpenTouryo.Public.dll + + ..\Build_net46\OpenTouryo.Public.Security.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True @@ -157,6 +160,7 @@ + ASPXCodeBehind diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net47.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net47.csproj index 1d1a41682..8b30148f5 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net47.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net47.csproj @@ -96,6 +96,9 @@ False ..\Build_net47\OpenTouryo.Public.dll + + ..\Build_net47\OpenTouryo.Public.Security.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True @@ -157,6 +160,7 @@ + ASPXCodeBehind diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net48.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net48.csproj index 6579ef302..7b55677ec 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_net48.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_net48.csproj @@ -96,6 +96,9 @@ False ..\Build_net48\OpenTouryo.Public.dll + + ..\Build_net48\OpenTouryo.Public.Security.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True @@ -157,6 +160,7 @@ + ASPXCodeBehind diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj index 37ffca947..bfb4c19ae 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj @@ -36,6 +36,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj index 923f12de4..e60a52a3d 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj @@ -36,6 +36,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/AuthenticationFailureResult.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/AuthenticationFailureResult.cs new file mode 100644 index 000000000..50502a649 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/AuthenticationFailureResult.cs @@ -0,0 +1,86 @@ +//********************************************************************************** +//* Copyright (C) 2007,2016 Hitachi Solutions,Ltd. +//********************************************************************************** + +#region Apache License +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#endregion + +//********************************************************************************** +//* クラス名 :AuthenticationFailureResult +//* クラス日本語名 :AuthenticationFailureResult +//* +//* 作成者 :生技 西野 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2020/02/12 西野 大介 新規作成 +//********************************************************************************** + +using System.Threading; +using System.Threading.Tasks; +using System.Web.Http; +using System.Net; +using System.Net.Http; + +namespace Touryo.Infrastructure.Business.Presentation +{ + /// AuthenticationFailureResult + public class AuthenticationFailureResult : IHttpActionResult + { + #region インスタンス変数 + + /// RequestMessage + public HttpRequestMessage RequestMessage { get; private set; } + + + /// ReasonPhrase + public string ReasonPhrase { get; private set; } + + #endregion + + #region コンストラクタ + + /// コンストラクタ + /// HttpRequestMessage + /// string + public AuthenticationFailureResult(HttpRequestMessage requestMessage, string reasonPhrase) + { + this.RequestMessage = requestMessage; + this.ReasonPhrase = reasonPhrase; + } + + #endregion + + /// ExecuteAsync + /// + /// Task(HttpResponseMessage) + public Task ExecuteAsync(CancellationToken cancellationToken) + { + return Task.FromResult(Execute()); + } + + /// Execute + /// HttpResponseMessage + private HttpResponseMessage Execute() + { + HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized); + response.RequestMessage = this.RequestMessage; + response.ReasonPhrase = this.ReasonPhrase; + return response; + } + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs index e16151066..d36342206 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs @@ -29,6 +29,7 @@ //* ---------- ---------------- ------------------------------------------------- //* 2017/08/11 西野 大介 新規作成 //* 2018/12/12 西野 大介 インターフェイスの拡張 +//* 2020/02/12 西野 大介 属性ベース機構の強化(EnumHttpAuthHeaderの導入) //********************************************************************************** #pragma warning disable 1998 @@ -53,6 +54,7 @@ using Touryo.Infrastructure.Framework.Authentication; using Touryo.Infrastructure.Framework.Exceptions; using Touryo.Infrastructure.Public.Log; +using Touryo.Infrastructure.Public.Security; using Touryo.Infrastructure.Public.Util; namespace Touryo.Infrastructure.Business.Presentation @@ -62,6 +64,8 @@ namespace Touryo.Infrastructure.Business.Presentation [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class MyBaseAsyncApiController : ActionFilterAttribute, IAuthenticationFilter, IActionFilter, IExceptionFilter { + #region インスタンス変数 + /// 性能測定 private PerformanceRecorder perfRec; @@ -74,8 +78,32 @@ public class MyBaseAsyncApiController : ActionFilterAttribute, IAuthenticationFi /// ActionName protected string ActionName = ""; + /// HttpAuthHeader + protected EnumHttpAuthHeader HttpAuthHeader = EnumHttpAuthHeader.None; + + #endregion + + #region コンストラクタ + + /// コンストラクタ + /// 自由に利用できる。 + public MyBaseAsyncApiController() : base() + { + this.HttpAuthHeader = EnumHttpAuthHeader.None; + } + + /// コンストラクタ + /// EnumHttpAuthHeader + /// 自由に利用できる。 + public MyBaseAsyncApiController(EnumHttpAuthHeader httpAuthHeader) : base() + { + this.HttpAuthHeader = httpAuthHeader; + } + + #endregion + #region 認証・認可 - + /// /// プロセスが承認を要求したときに呼び出します。 /// https://msdn.microsoft.com/ja-jp/library/dn314618.aspx @@ -281,7 +309,7 @@ private string GetExceptionMessageID(Exception ex) #region 情報取得用 - /// GetControllerAndActionName + /// Controller/Action名を取得する /// HttpActionContext private void GetControllerAndActionName(HttpActionContext actionContext) { @@ -313,76 +341,101 @@ private void GetControllerAndActionName(HttpActionContext actionContext) /// HttpAuthenticationContext private async Task GetUserInfoAsync(HttpAuthenticationContext authenticationContext) { - // カスタム認証処理 -------------------------------------------- - // Authorization: Bearer ヘッダから - // JWTアサーションを処理し、認証、UserInfoを生成するなど。 - // ------------------------------------------------------------- - List claims = null; - - if (authenticationContext.Request.Headers.Authorization != null) + // Authorization: + if (this.HttpAuthHeader == EnumHttpAuthHeader.None) { - if (authenticationContext.Request.Headers.Authorization.Scheme.ToLower() == "bearer") - { - string access_token = authenticationContext.Request.Headers.Authorization.Parameter; - - string sub = ""; - List roles = null; - List scopes = null; - JObject jobj = null; + // 認証なし + return; + } + else if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.Basic)) + { + // Basic認証の認証アルゴリズムを追加 + // Authorization: Basic XXXXXXXXXX + return; + } + else if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.Bearer)) + { + // Bearer認証の認証アルゴリズムを追加 -------------------------- + // Authorization: Bearer XXXXXXXXXX + // JWTアサーションを処理し、認証、UserInfoを生成するなど。 + // ------------------------------------------------------------- + List claims = null; - if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + if (authenticationContext.Request.Headers.Authorization != null) + { + if (authenticationContext.Request.Headers.Authorization.Scheme.ToLower() == "bearer") { - // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 - // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 - claims = new List() - { - new Claim(ClaimTypes.Name, sub), - new Claim(ClaimTypes.Role, string.Join(",", roles)), - new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), - new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), - new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) - }; + string access_token = authenticationContext.Request.Headers.Authorization.Parameter; - // The request message contains valid credential. - authenticationContext.Principal = new ClaimsPrincipal(new List { new ClaimsIdentity(claims, "Token") }); + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; - return; + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + { + // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 + // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 + claims = new List() + { + new Claim(ClaimTypes.Name, sub), + new Claim(ClaimTypes.Role, string.Join(",", roles)), + new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), + new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), + new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) + }; + + // The request message contains valid credential. + authenticationContext.Principal = new ClaimsPrincipal( + new List { new ClaimsIdentity(claims, "Token") }); + + return; + } + else + { + // JWTの内容検証に失敗 + } } else { - // JWTの内容検証に失敗 + // Authorization HeaderがBearerでない。 } } else { - // Authorization HeaderがBearerでない。 + // Authorization Headerが存在しない。 } - } - else - { - // Authorization Headerが存在しない。 - } - #region 未認証状態の場合の扱い + #region 未認証状態の場合の扱い - // The request message contains invalid credential. - //context.ErrorResult = new UnauthorizedResult(new AuthenticationHeaderValue[0], context.Request); + if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.None)) + { + // 未認証状態のclaimsを作成格納 + claims = new List() + { + new Claim(ClaimTypes.Name, "未認証"), + new Claim(ClaimTypes.Role, ""), + new Claim(OAuth2AndOIDCConst.UrnScopesClaim, ""), + new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, ""), + new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) + }; + + authenticationContext.Principal = new ClaimsPrincipal(new List { new ClaimsIdentity(claims, "Token") }); + } + else + { - // 未認証状態のclaimsを作成格納 - claims = new List() - { - new Claim(ClaimTypes.Name, "未認証"), - new Claim(ClaimTypes.Role, ""), - new Claim(OAuth2AndOIDCConst.UrnScopesClaim, ""), - new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, ""), - new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) - }; + // 認証エラーを返す。 + // ASP.NET Web API 2 | Microsoft Docs + // https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/authentication-filters + authenticationContext.ErrorResult = new AuthenticationFailureResult( + authenticationContext.Request, "Bearer Credentials is invalid."); + } - authenticationContext.Principal = new ClaimsPrincipal(new List { new ClaimsIdentity(claims, "Token") }); + return; - return; - - #endregion + #endregion + } } /// GetClientIpAddress @@ -437,7 +490,16 @@ public static ClaimsIdentity GetClaimsIdentity() /// IEnumerable(Claim) public static IEnumerable GetRawClaims() { - return MyBaseAsyncApiController.GetClaimsIdentity().Claims; + ClaimsIdentity claimsIdentity = MyBaseAsyncApiController.GetClaimsIdentity(); + + if (claimsIdentity == null) + { + return null; + } + else + { + return claimsIdentity.Claims; + } } /// GetClaims @@ -448,10 +510,60 @@ public static IEnumerable GetRawClaims() public static void GetClaims(out string userName, out string roles, out string scopes, out string ipAddress) { IEnumerable claims = MyBaseAsyncApiController.GetRawClaims(); - userName = claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; - roles = claims.FirstOrDefault(c => c.Type == ClaimTypes.Role).Value; - scopes = claims.FirstOrDefault(c => c.Type == OAuth2AndOIDCConst.UrnScopesClaim).Value; - ipAddress = claims.FirstOrDefault(c => c.Type == "IpAddress").Value; + + if (claims == null) + { + // claims == null + userName = "未認証"; + roles = ""; + scopes = ""; + ipAddress = ""; + } + else + { + // claims != null + Claim claim = null; + + claim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Name); + if (claim == null) + { + userName = "未認証"; + } + else + { + userName = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Role); + if (claim == null) + { + roles = ""; + } + else + { + roles = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == OAuth2AndOIDCConst.UrnScopesClaim); + if (claim == null) + { + scopes = ""; + } + else + { + scopes = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == "IpAddress"); + if (claim == null) + { + ipAddress = ""; + } + else + { + ipAddress = claim.Value; + } + } } #endregion diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumHttpAuthHeader.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumHttpAuthHeader.cs new file mode 100644 index 000000000..a3e93dcd1 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumHttpAuthHeader.cs @@ -0,0 +1,48 @@ +//********************************************************************************** +//* Copyright (C) 2007,2016 Hitachi Solutions,Ltd. +//********************************************************************************** + +#region Apache License +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#endregion + +//********************************************************************************** +//* クラス名 :EnumHttpAuthHeader +//* クラス日本語名 :HTTPリクエスト・ヘッダ「認証・認可」列挙型 +//* +//* 作成者 :生技 西野 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2020/02/12 西野 大介 新規作成 +//********************************************************************************** + +using System; + +namespace Touryo.Infrastructure.Public.Security +{ + /// EnumHttpAuthHeader + [Flags] + public enum EnumHttpAuthHeader + { + /// None + None = 1, + /// Basic + Basic = 1 << 1, + /// Bearer + Bearer = 1 << 2 + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net45.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net45.csproj index bcc2baaf2..150f8131c 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net45.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net45.csproj @@ -86,6 +86,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net46.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net46.csproj index 847f15836..14c65aa9a 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net46.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net46.csproj @@ -86,6 +86,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net47.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net47.csproj index e5eba536c..ef8fe9b24 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net47.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net47.csproj @@ -86,6 +86,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net48.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net48.csproj index 7af62c798..503b2f618 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net48.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_net48.csproj @@ -86,6 +86,7 @@ + From 68b19f853d677df050aa14c197a1af18857a951b Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Thu, 13 Feb 2020 18:07:17 +0900 Subject: [PATCH 27/47] Now, I am fixing #353. --- .../Business/Business_netcore30.csproj | 3 + .../MyBaseAsyncApiControllerCore.cs | 217 +++++++++++++----- 2 files changed, 166 insertions(+), 54 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj index e60a52a3d..db806f7dc 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore30.csproj @@ -85,6 +85,9 @@ ..\Build_netstd21\netstandard2.1\OpenTouryo.Public.dll + + ..\Build_netstd21\netstandard2.1\OpenTouryo.Public.Security.dll + diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs index e3f06aa28..26b37bd48 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs @@ -29,6 +29,7 @@ //* ---------- ---------------- ------------------------------------------------- //* 2018/04/09 西野 大介 新規作成 //* 2018/12/12 西野 大介 インターフェイスの拡張 +//* 2020/02/12 西野 大介 属性ベース機構の強化(EnumHttpAuthHeaderの導入) //********************************************************************************** using System; @@ -36,6 +37,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using System.Security.Claims; +using System.Net.Http.Headers; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Abstractions; @@ -51,6 +53,7 @@ using Touryo.Infrastructure.Framework.Exceptions; using Touryo.Infrastructure.Framework.Util; using Touryo.Infrastructure.Public.Log; +using Touryo.Infrastructure.Public.Security; using Touryo.Infrastructure.Public.Util; namespace Touryo.Infrastructure.Business.Presentation @@ -60,6 +63,8 @@ namespace Touryo.Infrastructure.Business.Presentation [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class MyBaseAsyncApiController : ActionFilterAttribute, IAsyncAuthorizationFilter, IAsyncActionFilter, IExceptionFilter { + #region インスタンス変数 + /// 性能測定 private PerformanceRecorder perfRec; @@ -72,6 +77,30 @@ public class MyBaseAsyncApiController : ActionFilterAttribute, IAsyncAuthorizati /// ActionName protected string ActionName = ""; + /// HttpAuthHeader + protected EnumHttpAuthHeader HttpAuthHeader = EnumHttpAuthHeader.None; + + #endregion + + #region コンストラクタ + + /// コンストラクタ + /// 自由に利用できる。 + public MyBaseAsyncApiController() : base() + { + this.HttpAuthHeader = EnumHttpAuthHeader.None; + } + + /// コンストラクタ + /// EnumHttpAuthHeader + /// 自由に利用できる。 + public MyBaseAsyncApiController(EnumHttpAuthHeader httpAuthHeader) : base() + { + this.HttpAuthHeader = httpAuthHeader; + } + + #endregion + #region 認証・認可 /// AuthorizationFilterContext @@ -250,7 +279,7 @@ private string GetExceptionMessageID(Exception ex) #region 情報取得用 - /// GetControllerAndActionName + /// Controller/Action名を取得する /// ActionExecutingContext private void GetControllerAndActionName(ActionExecutingContext context) { @@ -286,30 +315,44 @@ private void GetControllerAndActionName(ActionExecutingContext context) /// awaitするメソッドを追加して呼ぶ可能性も高いのでasyncを付与 private async Task GetUserInfoAsync(AuthorizationFilterContext authorizationContext) { - // カスタム認証処理 -------------------------------------------- - // Authorization: Bearer ヘッダから - // JWTアサーションを処理し、認証、UserInfoを生成するなど。 - // ------------------------------------------------------------- - List claims = null; - - if (authorizationContext.HttpContext.Request.Headers != null) + // Authorization: + if (this.HttpAuthHeader == EnumHttpAuthHeader.None) { - StringValues authHeaders = ""; + // 認証なし + return; + } + else if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.Basic)) + { + // Basic認証の認証アルゴリズムを追加 + // Authorization: Basic XXXXXXXXXX + return; + } + else if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.Bearer)) + { + // Bearer認証の認証アルゴリズムを追加 -------------------------- + // Authorization: Bearer XXXXXXXXXX + // JWTアサーションを処理し、認証、UserInfoを生成するなど。 + // ------------------------------------------------------------- + List claims = null; - if (authorizationContext.HttpContext.Request.Headers.TryGetValue("Authorization", out authHeaders)) + if (authorizationContext.HttpContext.Request.Headers != null) { - string access_token = authHeaders[0].Split(' ')[1]; - - string sub = ""; - List roles = null; - List scopes = null; - JObject jobj = null; + StringValues authHeaders = ""; - if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + if (authorizationContext.HttpContext.Request.Headers.TryGetValue("Authorization", out authHeaders)) { - // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 - // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 - claims = new List() + string access_token = authHeaders[0].Split(' ')[1]; + + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; + + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + { + // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 + // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 + claims = new List() { new Claim(ClaimTypes.Name, sub), new Claim(ClaimTypes.Role, string.Join(",", roles)), @@ -318,47 +361,54 @@ private async Task GetUserInfoAsync(AuthorizationFilterContext authorizationCont new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress()) }; - // ClaimsPrincipalを設定 - MyHttpContext.Current.User = new ClaimsPrincipal(new ClaimsIdentity(claims, "Token")); + // ClaimsPrincipalを設定 + MyHttpContext.Current.User = new ClaimsPrincipal(new ClaimsIdentity(claims, "Token")); - return; + return; + } + else + { + // JWTの内容検証に失敗 + } } else { - // JWTの内容検証に失敗 + // Authorization HeaderがBearerでない。 } } else { - // Authorization HeaderがBearerでない。 + // Authorization Headerが存在しない。 } - } - else - { - // Authorization Headerが存在しない。 - } - #region 未認証状態の場合の扱い + #region 未認証状態の場合の扱い - // The request message contains invalid credential - //context.ErrorResult = new UnauthorizedResult(new AuthenticationHeaderValue[0], context.Request); - - // 未認証状態のclaimsを作成格納 - claims = new List() - { - new Claim(ClaimTypes.Name, "未認証"), - new Claim(ClaimTypes.Role, ""), - new Claim(OAuth2AndOIDCConst.UrnScopesClaim, ""), - new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, ""), - new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress()) - }; - - // The request message contains valid credential. - MyHttpContext.Current.User.AddIdentity(new ClaimsIdentity(claims, "Token")); + if (this.HttpAuthHeader.HasFlag(EnumHttpAuthHeader.None)) + { + // 未認証状態のclaimsを作成格納 + claims = new List() + { + new Claim(ClaimTypes.Name, "未認証"), + new Claim(ClaimTypes.Role, ""), + new Claim(OAuth2AndOIDCConst.UrnScopesClaim, ""), + new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, ""), + new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress()) + }; + + MyHttpContext.Current.User.AddIdentity(new ClaimsIdentity(claims, "Token")); + } + else + { + // 認証エラーを返す。 + // ASP.NET Core MVCで403エラーをクライアントへ返す - Living Absurd World + // https://blog.hmatoba.net/Article/144 + authorizationContext.Result = new UnauthorizedResult(); + } - return; + return; - #endregion + #endregion + } } /// GetClientIpAddress @@ -379,7 +429,16 @@ public static ClaimsIdentity GetClaimsIdentity() /// IEnumerable(Claim) public static IEnumerable GetRawClaims() { - return MyBaseAsyncApiController.GetClaimsIdentity().Claims; + ClaimsIdentity claimsIdentity = MyBaseAsyncApiController.GetClaimsIdentity(); + + if (claimsIdentity == null) + { + return null; + } + else + { + return claimsIdentity.Claims; + } } /// GetClaims @@ -391,11 +450,61 @@ public static void GetClaims(out string userName, out string roles, out string s { // MyHttpContext.Current.User.Identity側ではなく、Identities側に入っている。 // Identityは認証ミドルウェアを使用する必要がある?(coreでjwtをどう処理するのか?) - IEnumerable claims = MyBaseAsyncApiController.GetRawClaims(); - userName = claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value; - roles = claims.FirstOrDefault(c => c.Type == ClaimTypes.Role).Value; - scopes = claims.FirstOrDefault(c => c.Type == OAuth2AndOIDCConst.UrnScopesClaim).Value; - ipAddress = claims.FirstOrDefault(c => c.Type == "IpAddress").Value; + IEnumerable claims = MyBaseAsyncApiController.GetRawClaims(); + + if (claims == null) + { + // claims == null + userName = "未認証"; + roles = ""; + scopes = ""; + ipAddress = ""; + } + else + { + // claims != null + Claim claim = null; + + claim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Name); + if (claim == null) + { + userName = "未認証"; + } + else + { + userName = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == ClaimTypes.Role); + if (claim == null) + { + roles = ""; + } + else + { + roles = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == OAuth2AndOIDCConst.UrnScopesClaim); + if (claim == null) + { + scopes = ""; + } + else + { + scopes = claim.Value; + } + + claim = claims.FirstOrDefault(c => c.Type == "IpAddress"); + if (claim == null) + { + ipAddress = ""; + } + else + { + ipAddress = claim.Value; + } + } } #endregion From b570861c5be093f9eb163d2e8316a62a64923ad5 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Fri, 14 Feb 2020 18:10:16 +0900 Subject: [PATCH 28/47] Now, I am fixing #353. --- .../Business/Business_netcore20.csproj | 3 + .../Presentation/MyBaseAsyncApiController.cs | 61 +++++++++++-------- .../MyBaseAsyncApiControllerCore.cs | 61 +++++++++++-------- 3 files changed, 72 insertions(+), 53 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj index bfb4c19ae..be5924eea 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Business_netcore20.csproj @@ -85,6 +85,9 @@ ..\Build_netstd20\netstandard2.0\OpenTouryo.Public.dll + + ..\Build_netstd20\netstandard2.0\OpenTouryo.Public.Security.dll + diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs index d36342206..d4165c4cf 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiController.cs @@ -363,42 +363,51 @@ private async Task GetUserInfoAsync(HttpAuthenticationContext authenticationCont if (authenticationContext.Request.Headers.Authorization != null) { - if (authenticationContext.Request.Headers.Authorization.Scheme.ToLower() == "bearer") + try { - string access_token = authenticationContext.Request.Headers.Authorization.Parameter; + if (authenticationContext.Request.Headers.Authorization.Scheme.ToLower() == "bearer") + { - string sub = ""; - List roles = null; - List scopes = null; - JObject jobj = null; + string access_token = authenticationContext.Request.Headers.Authorization.Parameter; - if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) - { - // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 - // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 - claims = new List() + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; + + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) { - new Claim(ClaimTypes.Name, sub), - new Claim(ClaimTypes.Role, string.Join(",", roles)), - new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), - new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), - new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) - }; - - // The request message contains valid credential. - authenticationContext.Principal = new ClaimsPrincipal( - new List { new ClaimsIdentity(claims, "Token") }); - - return; + // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 + // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 + claims = new List() + { + new Claim(ClaimTypes.Name, sub), + new Claim(ClaimTypes.Role, string.Join(",", roles)), + new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), + new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), + new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress(authenticationContext.Request)) + }; + + // The request message contains valid credential. + authenticationContext.Principal = new ClaimsPrincipal( + new List { new ClaimsIdentity(claims, "Token") }); + + return; + } + else + { + // JWTの内容検証に失敗 + } + } else { - // JWTの内容検証に失敗 + // Authorization HeaderがBearerでない。 } } - else + catch { - // Authorization HeaderがBearerでない。 + // 例外発生 ≒ 未認証扱い。 } } else diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs index 26b37bd48..0594aa407 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseAsyncApiControllerCore.cs @@ -339,41 +339,48 @@ private async Task GetUserInfoAsync(AuthorizationFilterContext authorizationCont { StringValues authHeaders = ""; - if (authorizationContext.HttpContext.Request.Headers.TryGetValue("Authorization", out authHeaders)) + try { - string access_token = authHeaders[0].Split(' ')[1]; - - string sub = ""; - List roles = null; - List scopes = null; - JObject jobj = null; - - if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) - { - // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 - // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 - claims = new List() + if (authorizationContext.HttpContext.Request.Headers.TryGetValue("Authorization", out authHeaders)) { - new Claim(ClaimTypes.Name, sub), - new Claim(ClaimTypes.Role, string.Join(",", roles)), - new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), - new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), - new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress()) - }; - - // ClaimsPrincipalを設定 - MyHttpContext.Current.User = new ClaimsPrincipal(new ClaimsIdentity(claims, "Token")); - - return; + string access_token = authHeaders[0].Split(' ')[1]; + + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; + + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + { + // ActionFilterAttributeとApiController間の情報共有はcontext.Principalを使用する。 + // ★ 必要であれば、他の業務共通引継ぎ情報などをロードする。 + claims = new List() + { + new Claim(ClaimTypes.Name, sub), + new Claim(ClaimTypes.Role, string.Join(",", roles)), + new Claim(OAuth2AndOIDCConst.UrnScopesClaim, string.Join(",", scopes)), + new Claim(OAuth2AndOIDCConst.UrnAudienceClaim, (string)jobj[OAuth2AndOIDCConst.aud]), + new Claim("IpAddress", MyBaseAsyncApiController.GetClientIpAddress()) + }; + + // ClaimsPrincipalを設定 + MyHttpContext.Current.User = new ClaimsPrincipal(new ClaimsIdentity(claims, "Token")); + + return; + } + else + { + // JWTの内容検証に失敗 + } } else { - // JWTの内容検証に失敗 + // Authorization HeaderがBearerでない。 } } - else + catch { - // Authorization HeaderがBearerでない。 + // 例外発生 ≒ 未認証扱い。 } } else From 0e16fa226bf5e938c95bd4b1424602777b60eaff Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 18 Feb 2020 11:40:12 +0900 Subject: [PATCH 29/47] Updated touryo.flt and touryofull.flt files. --- root/files/tools/WinMergeFilters/touryo.flt | 20 ++++++++--------- .../tools/WinMergeFilters/touryofull.flt | 22 ++++++++++++++----- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/root/files/tools/WinMergeFilters/touryo.flt b/root/files/tools/WinMergeFilters/touryo.flt index 0b35422d8..eaeb6abd7 100644 --- a/root/files/tools/WinMergeFilters/touryo.flt +++ b/root/files/tools/WinMergeFilters/touryo.flt @@ -2,19 +2,14 @@ desc: 棟梁 def: include -f: \.sln$ ## ソリューションファイル f: \.suo$ ## ソリューションファイル f: \.user$ ## ユーザファイル -f: \.csproj$ ## プロジェクトファイル -f: \.vbproj$ ## プロジェクトファイル ## デザイナ(自動生成) - f: \.designer\..*$ ## デザイナファイル -d: \\\web references$ ## web reference directory +d: \\web references$ ## web reference directory ## ビルドモジュール - f: \.dll$ ## DLLファイル f: \.pdb$ ## PDBファイル f: \.xap$ ## XAPファイル @@ -25,16 +20,19 @@ d: \\debug$ ## ビルドモジュール d: \\release$ ## ビルドモジュール d: \\build$ ## ビルドモジュール -## ログファイル - -f: \.log$ ## LOGファイル +## PKGマネージャーの類 +d: \\packages$ ## NuGet +d: \\node_modules$ ## npm ## ソース管理の類 - f: \.svnignore$ ## Subversion ignore file f: \.(vs[sp])?scc$ ## Visual SourceSafe files d: \\\.git$ ## git working copy d: \\\.svn$ ## Subversion working copy d: \\_svn$ ## Subversion working copy ASP.NET Hack -d: \\cvs$ ## CVS control directory \ No newline at end of file +d: \\cvs$ ## CVS control directory + +## ログファイル +f: \.log$ ## LOGファイル + diff --git a/root/files/tools/WinMergeFilters/touryofull.flt b/root/files/tools/WinMergeFilters/touryofull.flt index cea60a461..5b9944a6e 100644 --- a/root/files/tools/WinMergeFilters/touryofull.flt +++ b/root/files/tools/WinMergeFilters/touryofull.flt @@ -8,8 +8,15 @@ f: \.user$ ## ユーザファイル f: \.csproj$ ## プロジェクトファイル f: \.vbproj$ ## プロジェクトファイル -## ビルドモジュール +## IDE +d: \\\.vs$ ## Visual Studio +d: \\\.vscode$ ## Visual Studio Code + +## デザイナ(自動生成) +f: \.designer\..*$ ## デザイナファイル +d: \\web references$ ## web reference directory +## ビルドモジュール f: \.dll$ ## DLLファイル f: \.pdb$ ## PDBファイル f: \.xap$ ## XAPファイル @@ -20,16 +27,19 @@ d: \\debug$ ## ビルドモジュール d: \\release$ ## ビルドモジュール d: \\build$ ## ビルドモジュール -## ログファイル - -f: \.log$ ## LOGファイル +## PKGマネージャーの類 +d: \\packages$ ## NuGet +d: \\node_modules$ ## npm ## ソース管理の類 - f: \.svnignore$ ## Subversion ignore file f: \.(vs[sp])?scc$ ## Visual SourceSafe files d: \\\.git$ ## git working copy d: \\\.svn$ ## Subversion working copy d: \\_svn$ ## Subversion working copy ASP.NET Hack -d: \\cvs$ ## CVS control directory \ No newline at end of file +d: \\cvs$ ## CVS control directory + +## ログファイル +f: \.log$ ## LOGファイル + From 7c2fd7f6a7997acb5b2e1d3820962bcd6e78e557 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 3 Mar 2020 19:27:50 +0900 Subject: [PATCH 30/47] Now, I am fixing #353. --- .../Framework/Authentication/CmnJwtToken.cs | 64 ++++++ .../Authentication/OAuth2AndOIDCConst.cs | 39 ++++ .../Authentication/OAuth2AndOIDCEnum.cs | 58 +++++ .../Framework/Authentication/RequestObject.cs | 201 +++++++++++++++++- .../Framework/Authentication/SAML2Params.cs | 6 +- 5 files changed, 364 insertions(+), 4 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs index 2e99a7b99..3675926bd 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs @@ -28,6 +28,7 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2018/11/28 西野 大介 新規作成(分割) +//* 2020/03/02 西野 大介 検証メソッドの追加 //********************************************************************************** using System; @@ -38,6 +39,7 @@ using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Str; +using Touryo.Infrastructure.Public.Util; using Touryo.Infrastructure.Public.Security.Jwt; namespace Touryo.Infrastructure.Framework.Authentication @@ -234,5 +236,67 @@ public static bool Verify(string jwtToken, out string jwtPayload) return ret; } + + /// CheckClaims + /// JObject + /// string + /// string + /// string + /// string + /// bool + /// bool + public static bool CheckClaims( + JObject json, string key, out string value, + out string err, out string errDescription, bool nullable = false) + { + value = ""; + err = ""; + errDescription = ""; + + if (json.ContainsKey(key)) + { + value = (string)json[key]; + return true; + } + else + { + if (nullable) + { + return true; + } + else + { + err = "server_error"; + errDescription = "the value correspond this key is not contained: " + key; + return false; + } + } + } + + #region ClaimVerifier + /// VerifyExp + /// exp + /// bool + public static bool VerifyExp(string exp) + { +#if NET45 + return (long.Parse(exp) >= PubCmnFunction.ToUnixTime(DateTimeOffset.Now)); +#else + return (long.Parse(exp) >= DateTimeOffset.Now.ToUnixTimeSeconds()); +#endif + } + + /// VerifyNbf + /// nbf + /// bool + public static bool VerifyNbf(string nbf) + { +#if NET45 + return (long.Parse(nbf) < PubCmnFunction.ToUnixTime(DateTimeOffset.Now)); +#else + return (long.Parse(nbf) < DateTimeOffset.Now.ToUnixTimeSeconds()); +#endif + } + #endregion } } diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCConst.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCConst.cs index 19298c5a8..92b9aeea7 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCConst.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCConst.cs @@ -28,6 +28,8 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2018/08/10 西野 大介 新規作成(汎用認証サイトからのコード移行) +//* 201X/XX/XX 西野 大介 ... +//* 2020/02/27 西野 大介 CIBAのパラメタを追加 //********************************************************************************** // urnはClaimのurnで、 @@ -178,6 +180,9 @@ public class OAuth2AndOIDCConst /// JWT bearer token authorizationグラント種別 public const string JwtBearerTokenFlowGrantType = "urn:ietf:params:oauth:grant-type:jwt-bearer"; + /// CIBA(Client Initiated Backchannel Authentication)グラント種別 + public const string CibaGrantType = "urn:openid:params:grant-type:ciba"; + #endregion #region ResponseType @@ -512,6 +517,40 @@ public class OAuth2AndOIDCConst #endregion + #region CIBA + + #region 認可リクエスト + /// Login Hint Token + public const string login_hint_token = "login_hint_token"; + + /// Id Token Hint + public const string id_token_hint = "id_token_hint"; + + /// Binding Message + public const string binding_message = "binding_message"; + + /// User Code + public const string user_code = "user_code"; + + /// Requested Expiry + public const string requested_expiry = "requested_expiry"; + + /// Client Notification Token + public const string client_notification_token = "client_notification_token"; + #endregion + + #region 認可レスポンス + /// Auth Req Id + public const string auth_req_id = "auth_req_id"; + + // expires_in + + /// PollingInterval + public const string PollingInterval = "interval"; + #endregion + + #endregion + #region LoA(acr) #region urn diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs index e0b102e64..03ad020f3 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCEnum.cs @@ -105,6 +105,64 @@ public enum SubjectTypes : int #endregion + #region CIBA + + #region CIBA mode + + /// CibaのMode + public enum CibaMode : int + { + /// poll + poll, + + /// ping + ping, + + /// push + push + } + + #endregion + + #region CIBA state + + /// CibaのState + public enum CibaState : int + { + /// + /// 保留中 + /// + authorization_pending, + /// + /// 許可された(仕様外) + /// + access_permitted, + /// + /// 拒否された + /// + access_denied, + /// + /// 期限切れ + /// + expired_token, + /// + /// Polling間隔を5秒遅らせる。 + /// + slow_down, + /// + /// 見つからない(仕様外) + /// + not_found, + /// + /// データ不正(仕様外) + /// + irregularity_data + } + + #endregion + + #endregion + #region ClientInfo(仕様外) /// ClientType diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs index be868230d..6936d91ad 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs @@ -28,6 +28,7 @@ //* 日時 更新者 内容 //* ---------- ---------------- ------------------------------------------------- //* 2019/06/19 西野 大介 新規作成 +//* 2020/03/03 西野 大介 CIBA対応 //********************************************************************************** using System; @@ -50,6 +51,10 @@ namespace Touryo.Infrastructure.Framework.Authentication /// public class RequestObject { + #region FAPI2 CC + + // OpenID Connect Core 1.0 incorporating errata set 1 + // 6.1. Passing a Request Object by Value // https://openid.net/specs/openid-connect-core-1_0.html#RequestObject // { // "iss": "s6BhdRkqt3", @@ -83,7 +88,7 @@ public class RequestObject /// string /// string /// ClaimsInRO - /// string + /// RS256用のJWK秘密鍵 /// RequestObject public static string Create( string iss, string aud, string response_type, string response_mode, @@ -248,5 +253,199 @@ public static bool Verify(string ro, out string iss, RSAParameters rsaPublicKey) } } #endregion + + #endregion + +#if NET45 || NET46 +#else + #region FAPI CIBA + + // - OpenID Connect Client Initiated Backchannel Authentication Flow - Core 1.0 draft-01 + // https://openid.net/specs/openid-client-initiated-backchannel-authentication-core-1_0.html + // - Financial-grade API: Client Initiated Backchannel Authentication Profile + // https://openid.net/specs/openid-financial-api-ciba-ID1.html + + #region Create + /// CreateCiba + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// ClaimsInRO + /// ES256用のJWK秘密鍵 + /// RequestObject + public static string CreateCiba( + string iss, string aud, string response_type, string response_mode, + string redirect_uri, string scopes, string state, string nonce, + string max_age, string prompt, string login_hint, ClaimsInRO claims, string jwkPrivateKey) + { + EccPrivateKeyConverter epkc = new EccPrivateKeyConverter(); + return RequestObject.CreateCiba( + iss, aud, response_type, response_mode, + redirect_uri, scopes, state, nonce, + max_age, prompt, login_hint, claims, + epkc.JwkToParam(jwkPrivateKey)); + } + + /// CreateCiba + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// string + /// ClaimsInRO + /// ES256用のECParameters秘密鍵 + /// RequestObject + public static string CreateCiba( + string iss, string aud, string response_type, string response_mode, + string redirect_uri, string scopes, string state, string nonce, + string max_age, string prompt, string login_hint, ClaimsInRO claims, ECParameters ecPrivateKey) + { + string json = ""; + //string jws = ""; + + #region ClaimSetの生成 + + Dictionary requestObjectClaimSet = new Dictionary(); + + requestObjectClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id + requestObjectClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // ROS EndPointのuri。 + + requestObjectClaimSet.Add(OAuth2AndOIDCConst.response_type, response_type); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.client_id, iss); + + if (!string.IsNullOrEmpty(response_mode)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.response_mode, response_mode); + if (!string.IsNullOrEmpty(redirect_uri)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.redirect_uri, redirect_uri); + + requestObjectClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.state, state); + + if (!string.IsNullOrEmpty(nonce)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.nonce, nonce); + if (!string.IsNullOrEmpty(max_age)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.max_age, max_age); + if (!string.IsNullOrEmpty(prompt)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.prompt, prompt); + if (!string.IsNullOrEmpty(login_hint)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.login_hint, login_hint); + + requestObjectClaimSet.Add(OAuth2AndOIDCConst.claims, claims.Claims); + + json = JsonConvert.SerializeObject(requestObjectClaimSet); + + #endregion + + #region JWT化 + + JWS_ES256_Param jwtES256 = new JWS_ES256_Param(ecPrivateKey, true); + return jwtES256.Create(json); + + #endregion + } + #endregion + + #region Verify + /// VerifyCiba + /// string + /// string + /// ES256用のJWK公開鍵 + /// 検証結果 + public static bool VerifyCiba(string ro, out string iss, string jwkPublicKey) + { + EccPublicKeyConverter epkc = new EccPublicKeyConverter(); + return RequestObject.VerifyCiba(ro, out iss, + epkc.JwkToParam(jwkPublicKey)); + } + + /// VerifyCiba + /// string + /// string + /// ES256用のECParameters公開鍵 + /// 検証結果 + public static bool VerifyCiba(string ro, out string iss, ECParameters ecPublicKey) + { + iss = ""; + string aud = ""; + string response_type = ""; + //string response_mode = ""; + //string redirect_uri = ""; + string scopes = ""; + string state = ""; + string nonce = ""; + //string prompt = ""; + //string login_hint = ""; + //JObject claims = null; + + JWS_ES256_Param jwtES256 = new JWS_ES256_Param(ecPublicKey, false); + + if (jwtES256.Verify(ro)) + { + string jwtPayload = CustomEncode.ByteToString( + CustomEncode.FromBase64UrlString(ro.Split('.')[1]), CustomEncode.UTF_8); + + JObject jobj = ((JObject)JsonConvert.DeserializeObject(jwtPayload)); + + iss = (string)jobj[OAuth2AndOIDCConst.iss]; + aud = (string)jobj[OAuth2AndOIDCConst.aud]; + response_type = (string)jobj[OAuth2AndOIDCConst.response_type]; + + //if(jobj.ContainsKey(OAuth2AndOIDCConst.response_mode)) + // response_mode = (string)jobj[OAuth2AndOIDCConst.response_mode]; + //if (jobj.ContainsKey(OAuth2AndOIDCConst.redirect_uri)) + // redirect_uri = (string)jobj[OAuth2AndOIDCConst.redirect_uri]; + + scopes = (string)jobj[OAuth2AndOIDCConst.scope]; + state = (string)jobj[OAuth2AndOIDCConst.state]; + nonce = (string)jobj[OAuth2AndOIDCConst.nonce]; + + //if (jobj.ContainsKey(OAuth2AndOIDCConst.prompt)) + // prompt = (string)jobj[OAuth2AndOIDCConst.prompt]; + //if (jobj.ContainsKey(OAuth2AndOIDCConst.login_hint)) + // login_hint = (string)jobj[OAuth2AndOIDCConst.login_hint]; + + //if (jobj.ContainsKey(OAuth2AndOIDCConst.claims)) + // claims = (JObject)jobj[OAuth2AndOIDCConst.claims]; + + if (!string.IsNullOrEmpty(iss) && + !string.IsNullOrEmpty(aud) && + !string.IsNullOrEmpty(response_type) && + !string.IsNullOrEmpty(scopes) && + !string.IsNullOrEmpty(state) && + !string.IsNullOrEmpty(nonce)) + { + // OK + return true; + } + else + { + // 必須項目の不足 + return true; + } + } + else + { + // JWTの署名検証に失敗 + return false; + } + } + #endregion + + #endregion +#endif } } diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Params.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Params.cs index 2a9b23d5f..a7395a855 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Params.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/SAML2Params.cs @@ -42,9 +42,9 @@ namespace Touryo.Infrastructure.Framework.Authentication { - /// SAML2Params - public class SAML2の各種パラメタ + /// SAML2の各種パラメタ + public class SAML2Params { - // AuthZ、Client共用のパラメタが無い + // AuthZ、Client共用のパラメタが無い } } From 73897be4585677ef901a8f458f9eb8e3eaddfcde Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 3 Mar 2020 20:43:20 +0900 Subject: [PATCH 31/47] Now, I am fixing #353. --- .../Framework/Authentication/RequestObject.cs | 157 +++++++----------- 1 file changed, 63 insertions(+), 94 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs index 6936d91ad..5a1efa196 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs @@ -124,7 +124,6 @@ public static string Create( string max_age, string prompt, string login_hint, ClaimsInRO claims, RSAParameters rsaPrivateKey) { string json = ""; - //string jws = ""; #region ClaimSetの生成 @@ -191,14 +190,9 @@ public static bool Verify(string ro, out string iss, RSAParameters rsaPublicKey) iss = ""; string aud = ""; string response_type = ""; - //string response_mode = ""; - //string redirect_uri = ""; string scopes = ""; string state = ""; string nonce = ""; - //string prompt = ""; - //string login_hint = ""; - //JObject claims = null; JWS_RS256_Param jwtRS256 = new JWS_RS256_Param(rsaPublicKey); @@ -212,24 +206,10 @@ public static bool Verify(string ro, out string iss, RSAParameters rsaPublicKey) iss = (string)jobj[OAuth2AndOIDCConst.iss]; aud = (string)jobj[OAuth2AndOIDCConst.aud]; response_type = (string)jobj[OAuth2AndOIDCConst.response_type]; - - //if(jobj.ContainsKey(OAuth2AndOIDCConst.response_mode)) - // response_mode = (string)jobj[OAuth2AndOIDCConst.response_mode]; - //if (jobj.ContainsKey(OAuth2AndOIDCConst.redirect_uri)) - // redirect_uri = (string)jobj[OAuth2AndOIDCConst.redirect_uri]; - scopes = (string)jobj[OAuth2AndOIDCConst.scope]; state = (string)jobj[OAuth2AndOIDCConst.state]; nonce = (string)jobj[OAuth2AndOIDCConst.nonce]; - //if (jobj.ContainsKey(OAuth2AndOIDCConst.prompt)) - // prompt = (string)jobj[OAuth2AndOIDCConst.prompt]; - //if (jobj.ContainsKey(OAuth2AndOIDCConst.login_hint)) - // login_hint = (string)jobj[OAuth2AndOIDCConst.login_hint]; - - //if (jobj.ContainsKey(OAuth2AndOIDCConst.claims)) - // claims = (JObject)jobj[OAuth2AndOIDCConst.claims]; - if (!string.IsNullOrEmpty(iss) && !string.IsNullOrEmpty(aud) && !string.IsNullOrEmpty(response_type) && @@ -269,53 +249,52 @@ public static bool Verify(string ro, out string iss, RSAParameters rsaPublicKey) /// CreateCiba /// string /// string - /// string - /// string - /// string + /// string + /// string /// string - /// string - /// string - /// string - /// string + /// string + /// string + /// string + /// string /// string - /// ClaimsInRO + /// Dictionary(string, object) /// ES256用のJWK秘密鍵 /// RequestObject public static string CreateCiba( - string iss, string aud, string response_type, string response_mode, - string redirect_uri, string scopes, string state, string nonce, - string max_age, string prompt, string login_hint, ClaimsInRO claims, string jwkPrivateKey) - { + string iss, string aud, string exp, string nbf, string scopes, + string client_notification_token, string binding_message, + string user_code, string requested_expiry, string login_hint, + Dictionary requestContextAndIntent, string jwkPrivateKey) + { EccPrivateKeyConverter epkc = new EccPrivateKeyConverter(); return RequestObject.CreateCiba( - iss, aud, response_type, response_mode, - redirect_uri, scopes, state, nonce, - max_age, prompt, login_hint, claims, - epkc.JwkToParam(jwkPrivateKey)); + iss, aud, exp, nbf, scopes, + client_notification_token, binding_message, + user_code, requested_expiry, login_hint, + requestContextAndIntent, epkc.JwkToParam(jwkPrivateKey)); } /// CreateCiba /// string /// string - /// string - /// string - /// string + /// string + /// string /// string - /// string - /// string - /// string - /// string + /// string + /// string + /// string + /// string /// string - /// ClaimsInRO + /// Dictionary(string, object) /// ES256用のECParameters秘密鍵 /// RequestObject public static string CreateCiba( - string iss, string aud, string response_type, string response_mode, - string redirect_uri, string scopes, string state, string nonce, - string max_age, string prompt, string login_hint, ClaimsInRO claims, ECParameters ecPrivateKey) + string iss, string aud, string exp, string nbf, string scopes, + string client_notification_token, string binding_message, + string user_code, string requested_expiry, string login_hint, + Dictionary requestContextAndIntent, ECParameters ecPrivateKey) { string json = ""; - //string jws = ""; #region ClaimSetの生成 @@ -323,28 +302,29 @@ public static string CreateCiba( requestObjectClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id requestObjectClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // ROS EndPointのuri。 - - requestObjectClaimSet.Add(OAuth2AndOIDCConst.response_type, response_type); - requestObjectClaimSet.Add(OAuth2AndOIDCConst.client_id, iss); - - if (!string.IsNullOrEmpty(response_mode)) - requestObjectClaimSet.Add(OAuth2AndOIDCConst.response_mode, response_mode); - if (!string.IsNullOrEmpty(redirect_uri)) - requestObjectClaimSet.Add(OAuth2AndOIDCConst.redirect_uri, redirect_uri); - + requestObjectClaimSet.Add(OAuth2AndOIDCConst.exp, exp); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString()); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.nbf, nbf); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.jti, new Guid().ToString()); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); - requestObjectClaimSet.Add(OAuth2AndOIDCConst.state, state); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.client_notification_token, client_notification_token); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.binding_message, binding_message); + + if (!string.IsNullOrEmpty(user_code)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.user_code, user_code); + if (!string.IsNullOrEmpty(requested_expiry)) + requestObjectClaimSet.Add(OAuth2AndOIDCConst.requested_expiry, requested_expiry); - if (!string.IsNullOrEmpty(nonce)) - requestObjectClaimSet.Add(OAuth2AndOIDCConst.nonce, nonce); - if (!string.IsNullOrEmpty(max_age)) - requestObjectClaimSet.Add(OAuth2AndOIDCConst.max_age, max_age); - if (!string.IsNullOrEmpty(prompt)) - requestObjectClaimSet.Add(OAuth2AndOIDCConst.prompt, prompt); - if (!string.IsNullOrEmpty(login_hint)) - requestObjectClaimSet.Add(OAuth2AndOIDCConst.login_hint, login_hint); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.login_hint, login_hint); - requestObjectClaimSet.Add(OAuth2AndOIDCConst.claims, claims.Claims); + if (requestContextAndIntent != null) + { + foreach (string key in requestContextAndIntent.Keys) + { + requestObjectClaimSet.Add(key, requestContextAndIntent[key]); + } + } json = JsonConvert.SerializeObject(requestObjectClaimSet); @@ -381,15 +361,12 @@ public static bool VerifyCiba(string ro, out string iss, ECParameters ecPublicKe { iss = ""; string aud = ""; - string response_type = ""; - //string response_mode = ""; - //string redirect_uri = ""; + string exp = ""; + string nbf = ""; string scopes = ""; - string state = ""; - string nonce = ""; - //string prompt = ""; - //string login_hint = ""; - //JObject claims = null; + string client_notification_token = ""; + string binding_message = ""; + string login_hint = ""; JWS_ES256_Param jwtES256 = new JWS_ES256_Param(ecPublicKey, false); @@ -402,31 +379,23 @@ public static bool VerifyCiba(string ro, out string iss, ECParameters ecPublicKe iss = (string)jobj[OAuth2AndOIDCConst.iss]; aud = (string)jobj[OAuth2AndOIDCConst.aud]; - response_type = (string)jobj[OAuth2AndOIDCConst.response_type]; - - //if(jobj.ContainsKey(OAuth2AndOIDCConst.response_mode)) - // response_mode = (string)jobj[OAuth2AndOIDCConst.response_mode]; - //if (jobj.ContainsKey(OAuth2AndOIDCConst.redirect_uri)) - // redirect_uri = (string)jobj[OAuth2AndOIDCConst.redirect_uri]; - + exp = (string)jobj[OAuth2AndOIDCConst.exp]; + nbf = (string)jobj[OAuth2AndOIDCConst.nbf]; scopes = (string)jobj[OAuth2AndOIDCConst.scope]; - state = (string)jobj[OAuth2AndOIDCConst.state]; - nonce = (string)jobj[OAuth2AndOIDCConst.nonce]; - - //if (jobj.ContainsKey(OAuth2AndOIDCConst.prompt)) - // prompt = (string)jobj[OAuth2AndOIDCConst.prompt]; - //if (jobj.ContainsKey(OAuth2AndOIDCConst.login_hint)) - // login_hint = (string)jobj[OAuth2AndOIDCConst.login_hint]; + client_notification_token = (string)jobj[OAuth2AndOIDCConst.client_notification_token]; + binding_message = (string)jobj[OAuth2AndOIDCConst.binding_message]; + login_hint = (string)jobj[OAuth2AndOIDCConst.login_hint]; - //if (jobj.ContainsKey(OAuth2AndOIDCConst.claims)) - // claims = (JObject)jobj[OAuth2AndOIDCConst.claims]; + //if (...requestContextAndIntent if (!string.IsNullOrEmpty(iss) && !string.IsNullOrEmpty(aud) && - !string.IsNullOrEmpty(response_type) && + !string.IsNullOrEmpty(exp) && + !string.IsNullOrEmpty(nbf) && !string.IsNullOrEmpty(scopes) && - !string.IsNullOrEmpty(state) && - !string.IsNullOrEmpty(nonce)) + !string.IsNullOrEmpty(client_notification_token) && + !string.IsNullOrEmpty(binding_message) && + !string.IsNullOrEmpty(login_hint)) { // OK return true; From 09a8d66edba2248d114a08fd65c615befb8b28fe Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 3 Mar 2020 21:27:54 +0900 Subject: [PATCH 32/47] Now, I am fixing #105 --- .../Authentication/CmnClientParams.cs | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnClientParams.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnClientParams.cs index 130f69940..05c85060c 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnClientParams.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnClientParams.cs @@ -20,7 +20,7 @@ //********************************************************************************** //* クラス名 :CmnClientParams -//* クラス日本語名 :SAML2, OAuth2/OIDC, FAPIの各種パラメタ +//* クラス日本語名 :SAML2, OAuth2/OIDC, FAPIの各種Client側パラメタ //* //* 作成者 :生技 西野 //* 更新履歴 : @@ -60,6 +60,7 @@ public static string Isser #region 鍵関連 + #region Token検証 /// RsaCerFilePath public static string RsaCerFilePath { @@ -77,6 +78,11 @@ public static string EcdsaCerFilePath return GetConfigParameter.GetConfigValue("SpRp_EcdsaCerFilePath"); } } + #endregion + + #region クライアント認証 + // OAuth 2.0 JWT Bearer Token Flow + // JWT Secured Authorization Request (JAR) /// RsaPfxPassword public static string RsaPfxPassword @@ -96,6 +102,29 @@ public static string RsaPfxFilePath } } +#if NET45 || NET46 +#else + /// EcdsaPfxPassword + public static string EcdsaPfxPassword + { + get + { + return GetConfigParameter.GetConfigValue("SpRp_EcdsaPfxPassword"); + } + } + + /// EcdsaPfxFilePath + public static string EcdsaPfxFilePath + { + get + { + return GetConfigParameter.GetConfigValue("SpRp_EcdsaPfxFilePath"); + } + } +#endif + #endregion + + #region クライアント証明書 /// ClientCertPfxPassword public static string ClientCertPfxPassword { @@ -113,6 +142,7 @@ public static string ClientCertPfxFilePath return GetConfigParameter.GetConfigValue("SpRp_ClientCertPfxFilePath"); } } + #endregion #endregion } From c07e30dacb95bc66c9e0575908b752f5b31b55de Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Wed, 4 Mar 2020 15:24:41 +0900 Subject: [PATCH 33/47] Now, I am fixing #353. --- .../resource/X509/GenECDsaCertByOpenSSL.bat | 4 ++-- .../resource/X509/SHA256ECDSA_Client.pfx | Bin 0 -> 926 bytes .../resource/X509/SHA256RSAClientCert.pfx | Bin 1668 -> 1668 bytes root/files/resource/X509/SHA512ECDSA.cer | 14 -------------- .../X509/{SHA512ECDSA.pfx => SHA521ECDSA.pfx} | Bin 5 files changed, 2 insertions(+), 16 deletions(-) create mode 100644 root/files/resource/X509/SHA256ECDSA_Client.pfx delete mode 100644 root/files/resource/X509/SHA512ECDSA.cer rename root/files/resource/X509/{SHA512ECDSA.pfx => SHA521ECDSA.pfx} (100%) diff --git a/root/files/resource/X509/GenECDsaCertByOpenSSL.bat b/root/files/resource/X509/GenECDsaCertByOpenSSL.bat index 9f272afd4..12901a43f 100644 --- a/root/files/resource/X509/GenECDsaCertByOpenSSL.bat +++ b/root/files/resource/X509/GenECDsaCertByOpenSSL.bat @@ -12,5 +12,5 @@ openssl pkcs12 -export -inkey private-key.pem -in _SHA384ECDSA.cer > _SHA384ECDS openssl ecparam -out private-key.pem -name secp521r1 -genkey openssl req -new -key private-key.pem > csr.csr -openssl x509 -in csr.csr -days 365000 -req -signkey private-key.pem > _SHA512ECDSA.cer -openssl pkcs12 -export -inkey private-key.pem -in _SHA512ECDSA.cer > _SHA512ECDSA.pfx \ No newline at end of file +openssl x509 -in csr.csr -days 365000 -req -signkey private-key.pem > _SHA521ECDSA.cer +openssl pkcs12 -export -inkey private-key.pem -in _SHA521ECDSA.cer > _SHA521ECDSA.pfx \ No newline at end of file diff --git a/root/files/resource/X509/SHA256ECDSA_Client.pfx b/root/files/resource/X509/SHA256ECDSA_Client.pfx new file mode 100644 index 0000000000000000000000000000000000000000..739d48b9cc30aa305e6f01e21717bc81407c44b2 GIT binary patch literal 926 zcmXqLVxGms$ZXKWoWRDZ)#lOmotKfFaX}MvAWIXoFHqRipoz&IA;q?!iOB#cq{GC> z0HjnAGK>Z?Y+O(ico^9X_*gg+u1yS?Rc}zp#KghS(8TzoW#!3Bdkw#Bnm;eX>;1zA zQ{??!g>oOv=~$t7;xEJg+TANtgN%#rWpu|icHVKa;8OdaRp{Ke+;Gl`RQa7;+qM0h zz3%p=FPs?vHe!iz^ZnnmSt~ef9S?Ix%qeeLdtBs_(dvU1f)bsQd#*@Co(*_D!8fkk zC28K=6$bkSmrQ!;%RjmD40BNYj6E%qj7*=ky~`^)G*ft18w+em5&f{YeNWVDu?q_w zwrNiMYP(kQdd=zBQ*YT1?>;7^n7q_C_~qssY8nRw7Wm#^iaMK^Fe`T2K>>%qn-hOs z^<5irLBp^{>FON`rhPR>Lymr%D?C|%d)1fHJ*$#zE`EL#@_sS1*MHS3YY+AGyET}e zJT7!GXII`TpZq&Z*Laqn{i63i?o@%%X8tSjVvqi39=*u!{{DNlRm19UIc~LO7RwH0 z{Y#(M@c8zv{mr{>rb?7qN&XY}inp`Ra9*>YGbP8KTiW+}ds}6VZkfxjgQr4wq`%H@ z?c3s8woB*fgu)cNC53TY#MRc?&Yi~en|t{+W%1p)a&P|kK4Lvl)tki1o6e{HrZ>We zHJl~qxbLHbATccB8Pysu zy&^i3f|vhIdpIp2)rm>+^xX5dMXK9>vF!uHNrZ~5NScVC6+Y@zn&pOMV`e4SwmOaZq=Id>KW;gYl-%ii| z>J1f*HJ`8leqMdqL{>dT;idc4mN)&<0<8b;8J{~}{z)cWULZIrQs}%YuwuTfFWT?Odl=6X%4)zZ#bPQDul;Pgv z6g3oM5t(SaaobzT`YDnr%=5Gu-|Su?a$=2vp@E_SCmX9aA2X8_D+7zj`dJ5-79?a& eTNWz1*NbV+yW_vwKC*DIzO4G#w}rO>p literal 0 HcmV?d00001 diff --git a/root/files/resource/X509/SHA256RSAClientCert.pfx b/root/files/resource/X509/SHA256RSAClientCert.pfx index 698c1c2987c776a698eb5e80695d1315bf978bb6..8dd27f6626bbda879bf7c05c9e8eb08b09288356 100644 GIT binary patch delta 1388 zcmV-y1(W)O4TKGlXn(I%pD-&o8$1F62haq90+8c<5q#)~9l+3moVbpJXetsUA{6je zS!s~*)gJdQn)pTt3m4TjZ-Tp^^Voz+a0RBKR4((V*0s}wFQuc7JsRRvvNPVFC-rVtNaUs z*ys%qRj*7G`1f7SE*^Tb{Dsk-a}FW89y1Xk-P9+F%Tg=w(u4r;Xa7MIFzwXZ1ao+z{{kCL90S38gh!}^mC}?1@6K{g~^Rtxvki0 zFoy5NDQ7lq~H&aMKeuOk9m*jeu)Lyi#3vRy=fNt#9Y>qH`GwCnf51e zS=r~wY1%#19pAIF`iNbar=8{f%(Mu(YS8YpHIktA9DfAGY%3(^`l>f;LPE$4W09eq zqnOMIBNll%(%7di_hft*qT^QdXD{8t8BMxOI0y7B=1ZKj5?jk689j+gZe)8#T4(9b zo(ZC@R;S=NqF~@b1LTJ-1sPj~QNo%WbnN``t z#{MykL4OaK;TkF7tA7)2Qe819D3ac$sji4JE8;Y6 z+HIwCVZw(g@YPmh3F$uv*J9egC9nG%Q(pqW4<&frO6+?wJE6rdFaR?ELI5}bHUKaHLjXYlEdVe8HvmQeG5{?AGypjO zHUKpMEdV$GLI6boHvlaFHvmNdIRHWcFaR|GMF2$rGXO;ZLX&v|o`1y8TEE>hUP%H1 z2hf0m0wAnkM7Bg-84v~S_!*=x2%`o^l%ED~pp;$otOLr?V?f9oc8sg3($T<@Gv2$< zimkBaP658qpjx!Z5Vibg9GlkJ@Ly=uqRx2K$Cwfj z_BwO8?pHD!B;Dp}s`qWO??8Q&;)~=#6IIF&H0HHQaPOZ+=m|~t+-Sl#f?yH6jiuha zpz~K#WMtVyr&OV`r5T7{zFif<$)B$g`O!jk%dJ_=sjML~~V*PW;3Sty-j;S?ic@@%al zTPel93I&m0bV@R~0HT@hW)lP&gcqeSrod+M+L7|=4`SBT`JP$Ked$_uOWA}bfVbfh ztWUf+*E?>i+ApxxCb?9xEH|$-dy9}@rz}KA8U|(;Z*kT$1`>0xDY6#gZ=4Ub*6TdK zg_X3Da%*IJ>|LKgl7E>^?W4Vg{=~Z^FcEEH30te8Aw~kT( delta 1388 zcmV-y1(W)O4TKGlXn#_^zIS$+m}CM12haq90+4h?G%F3v#mO%RJ4RWRl%6X98^I>i zB%l-H--TDd)wn6c9nT?OtqJRdE(A7^#rBv|H34lYp)h{B;h&UiW#oyziVCUXXn38A`p~lXSt6Xm zVHBPos~@e$9)Hvvp`!))3q~3Lq>nQ{9R^vOogOCJ&yrNn@z;)-7?N*?XnAs`^E&Lb zTa&02JUd>;o4k-}QM2R5{#LOQ8)|TGplSMqVc{Fa7}73W#~b^ik7VmkEXQFKaNkLg z2&0-L?FZVoIYM=~X11|H$TDLaq=tHEg2H_vWZMO;$$uuv8V3TTv~iPsqsU8t9!YlO zh+N-@EL?XSF`iaaDYv*bT&H7i*Hnba8c7-TH7%?3<`3J!lRy$2Vy5RCz)J5K10YS( z_=9-qCREjwGW$26&4v-%LK z%tyOq^1$k1G_U4z7Cy-bS-Qb7l?#d>>#-GL)g`8`6P7W3RUy-lYPQMg7expiV;POT zlgL_{*4tZl)3JR^gfGUE2m>rdHUKmLIRHceL;ynoMF2JcEdVnBMF2JcGXO0BGypaL zH~=&NEdV$GLI5!UH~=jGFaSaTL;x@VLjXbmLjXAdH~=vKHIsP*o_}ke!u~#rrQ!kt z2hf0m0w6S@cCDPcLL+5-jTVNXr<#YQ6g`(gs42$nE5+TTPL40W-2PkoxacqB3n@9T2wr87o5~ngg zw?6n-Ec$x<;^f^hy?FXeDSfK@yE}ZK*EIzFU|tOK28;tN=x5Q<)7MV>Q%cg5Ffa_l zhT{Gb6#W|!et#ob0jvl^4VhW(lQo>C&*6Iti1n83n~Sq417N9zy$;C2U*fvwXm!Ao zn2=M|mt&^{1W=*VoYBkXkB410KPBmSVqBnMsF*(+FR0d%G!M*&x59`P6T&951Qk5& z$$=E@pO82e|0Y39i6rRR{AjkcK7POjo)NW897da-ZE@EfO6SK&C|KzG-fu9#lJZ}1 z^!ZOAKtTT{b_N&&a5ulDBkdX=a+lTjNvaq7C6LrIo$oL^Fdr}n1_dh)0|FWZ6ikeQ70te9jgMoVh diff --git a/root/files/resource/X509/SHA512ECDSA.cer b/root/files/resource/X509/SHA512ECDSA.cer deleted file mode 100644 index 04696ca9d..000000000 --- a/root/files/resource/X509/SHA512ECDSA.cer +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICHDCCAX0CCQCp548b2cn2yzAKBggqhkjOPQQDAjBRMQswCQYDVQQGEwJBVTET -MBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ -dHkgTHRkMQowCAYDVQQDDAF4MCAXDTE5MDYyNTA3NDczMloYDzMwMTgxMDI2MDc0 -NzMyWjBRMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE -CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQowCAYDVQQDDAF4MIGbMBAGByqG -SM49AgEGBSuBBAAjA4GGAAQBChF1IPNct+KfoIWEvEM4vT8J+f5BzCB1syQwaDBN -4DiAMjKAI4TLibR7JOYSeNh0E4w3km1hSKmt1lmuIAbOscIBOPkkF6P3O1+wCskt -QwKzh53IKA+4i15+HsoUZ9558jtiMH6lqRwrHOEdnWHZSFHXzdudDiutdzvU3lYC -Xd3kGpkwCgYIKoZIzj0EAwIDgYwAMIGIAkIBamsrJIXEFleYv7iBj3M36OeaPuV2 -HoT+LIrmWNMhMhMyJ4khJJo8gDshc5bFJl0FEkzVRKPZEo6DsVcCo/X6PVoCQgET -SdJC6fI/dbcml0R/F7TynKreJ5pxCR32WNOS8jZmfyiRqbp0NFYwtn0B73PcpZWM -bNWHN6Yt7WZm4yhbDKSoXg== ------END CERTIFICATE----- diff --git a/root/files/resource/X509/SHA512ECDSA.pfx b/root/files/resource/X509/SHA521ECDSA.pfx similarity index 100% rename from root/files/resource/X509/SHA512ECDSA.pfx rename to root/files/resource/X509/SHA521ECDSA.pfx From badd280a0c23ff7f425f36b915f91080575da112 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Wed, 4 Mar 2020 16:40:54 +0900 Subject: [PATCH 34/47] Now, I am fixing #353. --- .../resource/X509/SHA256ECDSA_Client.cer | 11 ++ root/files/resource/X509/SHA521ECDSA.cer | 14 ++ .../Framework/Authentication/JwtAssertion.cs | 171 ++++++++++++++++-- .../Tests/EncAndDecUtilCUI/Program.cs | 4 +- .../Tests/EncAndDecUtilCUI/copy_cert.bat | 4 +- .../core20/EncAndDecUtilCUICore.csproj | 8 +- .../core30/EncAndDecUtilCUICore.csproj | 8 +- .../net45/EncAndDecUtilCUIFx.csproj | 8 +- .../net46/EncAndDecUtilCUIFx.csproj | 8 +- .../net47/EncAndDecUtilCUIFx.csproj | 8 +- 10 files changed, 208 insertions(+), 36 deletions(-) create mode 100644 root/files/resource/X509/SHA256ECDSA_Client.cer create mode 100644 root/files/resource/X509/SHA521ECDSA.cer diff --git a/root/files/resource/X509/SHA256ECDSA_Client.cer b/root/files/resource/X509/SHA256ECDSA_Client.cer new file mode 100644 index 000000000..3e881ab47 --- /dev/null +++ b/root/files/resource/X509/SHA256ECDSA_Client.cer @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBlTCCAToCCQDK5QwMi/MqnjAKBggqhkjOPQQDAjBRMQswCQYDVQQGEwJBVTET +MBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQowCAYDVQQDDAF4MCAXDTE5MDIwNTA3NTI1M1oYDzMwMTgwNjA4MDc1 +MjUzWjBRMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE +CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQowCAYDVQQDDAF4MFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEQHqRgMdwA7DemAL3OrTMMUOPs6dvLLiguQYRTv8I +arqXo/ZMSrPHmD9LYDcI9NqxJwzd1LwO34pgFjdYIBHEITAKBggqhkjOPQQDAgNJ +ADBGAiEA7AReGzXr3llZmVQyVbtaTy+2yKmWR7Jtune/fX6z394CIQCjX2Yzkxnh +7+4iQfVH3CJufY+g2RfEVU3YZHjCdokLJw== +-----END CERTIFICATE----- diff --git a/root/files/resource/X509/SHA521ECDSA.cer b/root/files/resource/X509/SHA521ECDSA.cer new file mode 100644 index 000000000..04696ca9d --- /dev/null +++ b/root/files/resource/X509/SHA521ECDSA.cer @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHDCCAX0CCQCp548b2cn2yzAKBggqhkjOPQQDAjBRMQswCQYDVQQGEwJBVTET +MBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ +dHkgTHRkMQowCAYDVQQDDAF4MCAXDTE5MDYyNTA3NDczMloYDzMwMTgxMDI2MDc0 +NzMyWjBRMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE +CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQowCAYDVQQDDAF4MIGbMBAGByqG +SM49AgEGBSuBBAAjA4GGAAQBChF1IPNct+KfoIWEvEM4vT8J+f5BzCB1syQwaDBN +4DiAMjKAI4TLibR7JOYSeNh0E4w3km1hSKmt1lmuIAbOscIBOPkkF6P3O1+wCskt +QwKzh53IKA+4i15+HsoUZ9558jtiMH6lqRwrHOEdnWHZSFHXzdudDiutdzvU3lYC +Xd3kGpkwCgYIKoZIzj0EAwIDgYwAMIGIAkIBamsrJIXEFleYv7iBj3M36OeaPuV2 +HoT+LIrmWNMhMhMyJ4khJJo8gDshc5bFJl0FEkzVRKPZEo6DsVcCo/X6PVoCQgET +SdJC6fI/dbcml0R/F7TynKreJ5pxCR32WNOS8jZmfyiRqbp0NFYwtn0B73PcpZWM +bNWHN6Yt7WZm4yhbDKSoXg== +-----END CERTIFICATE----- diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs index db7303d12..3976c91a7 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs @@ -30,7 +30,8 @@ //* 2017/12/26 西野 大介 新規作成 //* 2018/03/28 西野 大介 .NET Standard対応で、幾らか、I/F変更あり。 //* 2018/11/27 西野 大介 XML(Base64) ---> Jwk(Base64Url)に変更。 -//* 2018/11/27 西野 大介 秘密鍵 <---> JWKサポート追加 +//* 2018/11/27 西野 大介 秘密鍵 <---> JWKのサポートを追加 +//* 2020/03/04 西野 大介 ...ECDsaのサポートを追加 //********************************************************************************** using System; @@ -64,19 +65,37 @@ public class JwtAssertion public static string Create( string iss, string aud, TimeSpan forExp, string scopes, string jwkPrivateKey) { - RsaPrivateKeyConverter rpkc = new RsaPrivateKeyConverter(JWS_RSA.RS._256); - return JwtAssertion.Create(iss, aud, forExp, scopes, - rpkc.JwkToParam(jwkPrivateKey)); + JObject temp = JsonConvert.DeserializeObject(jwkPrivateKey); + if (temp.ContainsKey("kty")) + { + if (((string)temp["kty"]).ToUpper() == "RSA") + { + RsaPrivateKeyConverter rpkc = new RsaPrivateKeyConverter(JWS_RSA.RS._256); + return JwtAssertion.CreateByRsa(iss, aud, forExp, scopes, + rpkc.JwkToParam(jwkPrivateKey)); + } +#if NET45 || NET46 +#else + else if (((string)temp["kty"]).ToUpper() == "EC") + { + EccPrivateKeyConverter epkc = new EccPrivateKeyConverter(JWS_ECDSA.ES._256); + return JwtAssertion.CreateByECDsa(iss, aud, forExp, scopes, + epkc.JwkToParam(jwkPrivateKey)); + } +#endif + } + + return ""; } - /// Create + /// CreateByRsa /// client_id /// Token2 EndPointのuri /// DateTimeOffset /// scopes /// RS256用のRSAParameters秘密鍵 /// JwtAssertion - public static string Create( + public static string CreateByRsa( string iss, string aud, TimeSpan forExp, string scopes, RSAParameters rsaPrivateKey) { string json = ""; @@ -111,6 +130,52 @@ public static string Create( #endregion } + +#if NET45 || NET46 +#else + /// CreateByRsa + /// client_id + /// Token2 EndPointのuri + /// DateTimeOffset + /// scopes + /// ES256用のECParameters秘密鍵 + /// JwtAssertion + public static string CreateByECDsa( + string iss, string aud, TimeSpan forExp, string scopes, ECParameters eccPrivateKey) + { + string json = ""; + //string jws = ""; + + #region ClaimSetの生成 + + Dictionary jwtAssertionClaimSet = new Dictionary(); + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // Token EndPointのuri。 + +#if NET45 + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, PubCmnFunction.ToUnixTime(DateTimeOffset.Now.Add(forExp)).ToString()); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, PubCmnFunction.ToUnixTime(DateTimeOffset.Now).ToString()); +#else + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, (DateTimeOffset.Now.Add(forExp)).ToUnixTimeSeconds().ToString()); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString()); +#endif + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, Guid.NewGuid().ToString("N")); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); // scopes + + json = JsonConvert.SerializeObject(jwtAssertionClaimSet); + + #endregion + + #region JWT化 + + JWS_ES256_Param jwtES256 = new JWS_ES256_Param(eccPrivateKey, true); + return jwtES256.Create(json); + + #endregion + } +#endif #endregion #region Verify @@ -125,13 +190,37 @@ public static string Create( public static bool Verify(string jwtAssertion, out string iss, out string aud, out string scopes, out JObject jobj, string jwkPublicKey) { - RsaPublicKeyConverter rpkc = new RsaPublicKeyConverter(); - return JwtAssertion.Verify(jwtAssertion, - out iss, out aud, out scopes, out jobj, - rpkc.JwkToParam(jwkPublicKey)); + iss = ""; + aud = ""; + scopes = ""; + jobj = null; + + JObject temp = JsonConvert.DeserializeObject(jwkPublicKey); + if (temp.ContainsKey("kty")) + { + if (((string)temp["kty"]).ToUpper() == "RSA") + { + RsaPublicKeyConverter rpkc = new RsaPublicKeyConverter(); + return JwtAssertion.VerifyByRsa(jwtAssertion, + out iss, out aud, out scopes, out jobj, + rpkc.JwkToParam(jwkPublicKey)); + } +#if NET45 || NET46 +#else + else if (((string)temp["kty"]).ToUpper() == "EC") + { + EccPublicKeyConverter epkc = new EccPublicKeyConverter(); + return JwtAssertion.VerifyByECDsa(jwtAssertion, + out iss, out aud, out scopes, out jobj, + epkc.JwkToParam(jwkPublicKey)); + } +#endif + } + + return false; } - /// Verify + /// VerifyByRsa /// string /// client_id /// Token2 EndPointのuri @@ -139,7 +228,7 @@ public static bool Verify(string jwtAssertion, /// JObject /// RS256用のRSAParameters公開鍵 /// 検証結果 - public static bool Verify(string jwtAssertion, + public static bool VerifyByRsa(string jwtAssertion, out string iss, out string aud, out string scopes, out JObject jobj, RSAParameters rsaPublicKey) { iss = ""; @@ -185,6 +274,64 @@ public static bool Verify(string jwtAssertion, // 認証に失敗 return false; } + +#if NET45 || NET46 +#else + /// VerifyByECDsa + /// string + /// client_id + /// Token2 EndPointのuri + /// scopes + /// JObject + /// ES256用のECParameters公開鍵 + /// 検証結果 + public static bool VerifyByECDsa(string jwtAssertion, + out string iss, out string aud, out string scopes, out JObject jobj, ECParameters eccPublicKey) + { + iss = ""; + aud = ""; + scopes = ""; + jobj = null; + + JWS_ES256_Param jwtES256 = new JWS_ES256_Param(eccPublicKey, false); + + if (jwtES256.Verify(jwtAssertion)) + { + string jwtPayload = CustomEncode.ByteToString( + CustomEncode.FromBase64UrlString(jwtAssertion.Split('.')[1]), CustomEncode.UTF_8); + + jobj = ((JObject)JsonConvert.DeserializeObject(jwtPayload)); + + iss = (string)jobj[OAuth2AndOIDCConst.iss]; + aud = (string)jobj[OAuth2AndOIDCConst.aud]; + //string iat = (string)jobj[OAuth2AndOIDCConst.iat]; + scopes = (string)jobj[OAuth2AndOIDCConst.scope]; + + long unixTimeSeconds = 0; +#if NET45 + unixTimeSeconds = PubCmnFunction.ToUnixTime(DateTimeOffset.Now); +#else + unixTimeSeconds = DateTimeOffset.Now.ToUnixTimeSeconds(); +#endif + string exp = (string)jobj[OAuth2AndOIDCConst.exp]; + if (long.Parse(exp) >= unixTimeSeconds) + { + return true; + } + else + { + // JWTの内容検証に失敗 + } + } + else + { + // JWTの署名検証に失敗 + } + + // 認証に失敗 + return false; + } +#endif #endregion } } diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs index a35a612c9..4ab846724 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/Program.cs @@ -57,9 +57,9 @@ public class Program /// ECDsaのX509証明書のパス(*.cer) private static string PublicECDsaX509_384Path = @"SHA384ECDSA.cer"; /// ECDsaのX509証明書のパス(*.pfx) - private static string PrivateECDsaX509_512Path = @"SHA512ECDSA.pfx"; + private static string PrivateECDsaX509_512Path = @"SHA521ECDSA.pfx"; /// ECDsaのX509証明書のパス(*.cer) - private static string PublicECDsaX509_512Path = @"SHA512ECDSA.cer"; + private static string PublicECDsaX509_512Path = @"SHA521ECDSA.cer"; public static void Main(string[] args) { diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/copy_cert.bat b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/copy_cert.bat index 253c366f6..6f5638a63 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/copy_cert.bat +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/copy_cert.bat @@ -8,5 +8,5 @@ copy "C:\root\files\resource\X509\SHA256ECDSA.cer" SHA256ECDSA.cer copy "C:\root\files\resource\X509\SHA256ECDSA.pfx" SHA256ECDSA.pfx copy "C:\root\files\resource\X509\SHA384ECDSA.cer" SHA384ECDSA.cer copy "C:\root\files\resource\X509\SHA384ECDSA.pfx" SHA384ECDSA.pfx -copy "C:\root\files\resource\X509\SHA512ECDSA.cer" SHA512ECDSA.cer -copy "C:\root\files\resource\X509\SHA512ECDSA.pfx" SHA512ECDSA.pfx +copy "C:\root\files\resource\X509\SHA521ECDSA.cer" SHA521ECDSA.cer +copy "C:\root\files\resource\X509\SHA521ECDSA.pfx" SHA521ECDSA.pfx diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj index 603858c57..a1652b905 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core20/EncAndDecUtilCUICore.csproj @@ -49,10 +49,10 @@ Always - + Always - + Always @@ -86,10 +86,10 @@ Always - + Always - + Always diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj index 8dd6a3c06..f26d9824e 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/core30/EncAndDecUtilCUICore.csproj @@ -49,10 +49,10 @@ Always - + Always - + Always @@ -86,10 +86,10 @@ Always - + Always - + Always diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net45/EncAndDecUtilCUIFx.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net45/EncAndDecUtilCUIFx.csproj index d778288fb..f217f3442 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net45/EncAndDecUtilCUIFx.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net45/EncAndDecUtilCUIFx.csproj @@ -94,12 +94,12 @@ SHA384ECDSA.pfx Always - - SHA512ECDSA.cer + + SHA521ECDSA.cer Always - - SHA512ECDSA.pfx + + SHA521ECDSA.pfx Always diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net46/EncAndDecUtilCUIFx.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net46/EncAndDecUtilCUIFx.csproj index e60dd9e77..41f70acb6 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net46/EncAndDecUtilCUIFx.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net46/EncAndDecUtilCUIFx.csproj @@ -94,12 +94,12 @@ SHA384ECDSA.pfx Always - - SHA512ECDSA.cer + + SHA521ECDSA.cer Always - - SHA512ECDSA.pfx + + SHA521ECDSA.pfx Always diff --git a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net47/EncAndDecUtilCUIFx.csproj b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net47/EncAndDecUtilCUIFx.csproj index 8bc828dda..bc5fecdba 100644 --- a/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net47/EncAndDecUtilCUIFx.csproj +++ b/root/programs/CS/Frameworks/Tests/EncAndDecUtilCUI/net47/EncAndDecUtilCUIFx.csproj @@ -94,12 +94,12 @@ SHA384ECDSA.pfx Always - - SHA512ECDSA.cer + + SHA521ECDSA.cer Always - - SHA512ECDSA.pfx + + SHA521ECDSA.pfx Always From 635210c53c3104603291a4c989e04c36b8bf04d8 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Wed, 4 Mar 2020 19:31:12 +0900 Subject: [PATCH 35/47] Now, I am fixing #353. --- .../Framework/Authentication/CmnJwtToken.cs | 43 ++++++++++++ .../Framework/Authentication/JwtAssertion.cs | 67 +++++++++++++----- .../Framework/Authentication/RequestObject.cs | 68 ++++++++++--------- 3 files changed, 129 insertions(+), 49 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs index 3675926bd..41c7427ba 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs @@ -29,6 +29,7 @@ //* ---------- ---------------- ------------------------------------------------- //* 2018/11/28 西野 大介 新規作成(分割) //* 2020/03/02 西野 大介 検証メソッドの追加 +//* 2020/03/04 西野 大介 Claim生成メソッドの追加 //********************************************************************************** using System; @@ -237,6 +238,48 @@ public static bool Verify(string jwtToken, out string jwtPayload) return ret; } + /// + /// OAuth2AndOIDCConst.jti + /// + /// + /// JitClaim + /// + public static string CreateJitClaim() + { + return Guid.NewGuid().ToString("N"); + } + + /// + /// OAuth2AndOIDCConst.iat + /// + /// + /// IatClaim + /// + public static string CreateIatClaim() + { +#if NET45 + return PubCmnFunction.ToUnixTime(DateTimeOffset.Now).ToString(); +#else + return DateTimeOffset.Now.ToUnixTimeSeconds().ToString(); +#endif + } + + /// + /// OAuth2AndOIDCConst.exp + /// + /// TimeSpan + /// + /// ExpClaim + /// + public static string CreateExpClaim(TimeSpan forExp) + { +#if NET45 + return PubCmnFunction.ToUnixTime(DateTimeOffset.Now.Add(forExp)).ToString(); +#else + return DateTimeOffset.Now.Add(forExp).ToUnixTimeSeconds().ToString(); +#endif + } + /// CheckClaims /// JObject /// string diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs index 3976c91a7..8dc71b20f 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs @@ -32,6 +32,7 @@ //* 2018/11/27 西野 大介 XML(Base64) ---> Jwk(Base64Url)に変更。 //* 2018/11/27 西野 大介 秘密鍵 <---> JWKのサポートを追加 //* 2020/03/04 西野 大介 ...ECDsaのサポートを追加 +//* 2020/03/04 西野 大介 Claim生成メソッドの利用 //********************************************************************************** using System; @@ -108,15 +109,10 @@ public static string CreateByRsa( jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // Token EndPointのuri。 -#if NET45 - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, PubCmnFunction.ToUnixTime(DateTimeOffset.Now.Add(forExp)).ToString()); - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, PubCmnFunction.ToUnixTime(DateTimeOffset.Now).ToString()); -#else - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, (DateTimeOffset.Now.Add(forExp)).ToUnixTimeSeconds().ToString()); - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString()); -#endif + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, CmnJwtToken.CreateExpClaim(forExp)); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, CmnJwtToken.CreateIatClaim()); - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, Guid.NewGuid().ToString("N")); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, CmnJwtToken.CreateJitClaim()); jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); // scopes json = JsonConvert.SerializeObject(jwtAssertionClaimSet); @@ -133,7 +129,7 @@ public static string CreateByRsa( #if NET45 || NET46 #else - /// CreateByRsa + /// CreateByECDsa /// client_id /// Token2 EndPointのuri /// DateTimeOffset @@ -153,15 +149,10 @@ public static string CreateByECDsa( jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // Token EndPointのuri。 -#if NET45 - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, PubCmnFunction.ToUnixTime(DateTimeOffset.Now.Add(forExp)).ToString()); - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, PubCmnFunction.ToUnixTime(DateTimeOffset.Now).ToString()); -#else - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, (DateTimeOffset.Now.Add(forExp)).ToUnixTimeSeconds().ToString()); - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString()); -#endif + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, CmnJwtToken.CreateExpClaim(forExp)); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, CmnJwtToken.CreateIatClaim()); - jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, Guid.NewGuid().ToString("N")); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, CmnJwtToken.CreateJitClaim()); jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); // scopes json = JsonConvert.SerializeObject(jwtAssertionClaimSet); @@ -175,6 +166,48 @@ public static string CreateByECDsa( #endregion } + + /// CreateByECDsa + /// client_id + /// Token2 EndPointのuri + /// DateTimeOffset + /// scopes + /// ES256用の X.509秘密鍵 の File Path + /// ES256用の X.509秘密鍵 の Password + ///// ES256用のECParameters秘密鍵 + /// JwtAssertion + public static string CreateByECDsa( + string iss, string aud, TimeSpan forExp, string scopes, + string ecdsaX509FilePath, string ecdsaX509Password) + //ECParameters ecPrivateKey) // ECDsa.ExportParameters(true)が動かねぇ。 + { + string json = ""; + //string jws = ""; + + #region ClaimSetの生成 + + Dictionary jwtAssertionClaimSet = new Dictionary(); + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // Token EndPointのuri。 + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.exp, CmnJwtToken.CreateExpClaim(forExp)); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.iat, CmnJwtToken.CreateIatClaim()); + + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.jti, CmnJwtToken.CreateJitClaim()); + jwtAssertionClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); // scopes + + json = JsonConvert.SerializeObject(jwtAssertionClaimSet); + + #endregion + + #region JWT化 + + JWS_ES256_X509 jwtES256 = new JWS_ES256_X509(ecdsaX509FilePath, ecdsaX509Password); + return jwtES256.Create(json); + + #endregion + } #endif #endregion diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs index 5a1efa196..e91730244 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs @@ -246,33 +246,33 @@ public static bool Verify(string ro, out string iss, RSAParameters rsaPublicKey) // https://openid.net/specs/openid-financial-api-ciba-ID1.html #region Create - /// CreateCiba - /// string - /// string - /// string - /// string - /// string - /// string - /// string - /// string - /// string - /// string - /// Dictionary(string, object) - /// ES256用のJWK秘密鍵 - /// RequestObject - public static string CreateCiba( - string iss, string aud, string exp, string nbf, string scopes, - string client_notification_token, string binding_message, - string user_code, string requested_expiry, string login_hint, - Dictionary requestContextAndIntent, string jwkPrivateKey) - { - EccPrivateKeyConverter epkc = new EccPrivateKeyConverter(); - return RequestObject.CreateCiba( - iss, aud, exp, nbf, scopes, - client_notification_token, binding_message, - user_code, requested_expiry, login_hint, - requestContextAndIntent, epkc.JwkToParam(jwkPrivateKey)); - } + ///// CreateCiba + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// string + ///// Dictionary(string, object) + ///// ES256用のJWK秘密鍵 + ///// RequestObject + //public static string CreateCiba( + // string iss, string aud, string exp, string nbf, string scopes, + // string client_notification_token, string binding_message, + // string user_code, string requested_expiry, string login_hint, + // Dictionary requestContextAndIntent, string jwkPrivateKey) + //{ + // EccPrivateKeyConverter epkc = new EccPrivateKeyConverter(); + // return RequestObject.CreateCiba( + // iss, aud, exp, nbf, scopes, + // client_notification_token, binding_message, + // user_code, requested_expiry, login_hint, + // requestContextAndIntent, epkc.JwkToParam(jwkPrivateKey)); + //} /// CreateCiba /// string @@ -286,13 +286,17 @@ public static string CreateCiba( /// string /// string /// Dictionary(string, object) - /// ES256用のECParameters秘密鍵 + /// ES256用の X.509秘密鍵 の File Path + /// ES256用の X.509秘密鍵 の Password + ///// ES256用のECParameters秘密鍵 /// RequestObject public static string CreateCiba( string iss, string aud, string exp, string nbf, string scopes, string client_notification_token, string binding_message, string user_code, string requested_expiry, string login_hint, - Dictionary requestContextAndIntent, ECParameters ecPrivateKey) + Dictionary requestContextAndIntent, + string ecdsaX509FilePath, string ecdsaX509Password) + //ECParameters ecPrivateKey) // ECDsa.ExportParameters(true)が動かねぇ。 { string json = ""; @@ -303,9 +307,9 @@ public static string CreateCiba( requestObjectClaimSet.Add(OAuth2AndOIDCConst.iss, iss); // client_id requestObjectClaimSet.Add(OAuth2AndOIDCConst.aud, aud); // ROS EndPointのuri。 requestObjectClaimSet.Add(OAuth2AndOIDCConst.exp, exp); - requestObjectClaimSet.Add(OAuth2AndOIDCConst.iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString()); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.iat, CmnJwtToken.CreateIatClaim()); requestObjectClaimSet.Add(OAuth2AndOIDCConst.nbf, nbf); - requestObjectClaimSet.Add(OAuth2AndOIDCConst.jti, new Guid().ToString()); + requestObjectClaimSet.Add(OAuth2AndOIDCConst.jti, CmnJwtToken.CreateJitClaim()); requestObjectClaimSet.Add(OAuth2AndOIDCConst.scope, scopes); requestObjectClaimSet.Add(OAuth2AndOIDCConst.client_notification_token, client_notification_token); @@ -332,7 +336,7 @@ public static string CreateCiba( #region JWT化 - JWS_ES256_Param jwtES256 = new JWS_ES256_Param(ecPrivateKey, true); + JWS_ES256_X509 jwtES256 = new JWS_ES256_X509(ecdsaX509FilePath, ecdsaX509Password); return jwtES256.Create(json); #endregion From 067bdcbef9db617dd5fa324031f388f82aa3b534 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Wed, 4 Mar 2020 19:42:33 +0900 Subject: [PATCH 36/47] Now, I am fixing #353. --- .../Infrastructure/Framework/Authentication/JwtAssertion.cs | 2 +- .../Infrastructure/Framework/Authentication/RequestObject.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs index 8dc71b20f..61528017d 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/JwtAssertion.cs @@ -174,11 +174,11 @@ public static string CreateByECDsa( /// scopes /// ES256用の X.509秘密鍵 の File Path /// ES256用の X.509秘密鍵 の Password - ///// ES256用のECParameters秘密鍵 /// JwtAssertion public static string CreateByECDsa( string iss, string aud, TimeSpan forExp, string scopes, string ecdsaX509FilePath, string ecdsaX509Password) + ///// ES256用のECParameters秘密鍵 //ECParameters ecPrivateKey) // ECDsa.ExportParameters(true)が動かねぇ。 { string json = ""; diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs index e91730244..996b97f73 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/RequestObject.cs @@ -288,7 +288,6 @@ public static bool Verify(string ro, out string iss, RSAParameters rsaPublicKey) /// Dictionary(string, object) /// ES256用の X.509秘密鍵 の File Path /// ES256用の X.509秘密鍵 の Password - ///// ES256用のECParameters秘密鍵 /// RequestObject public static string CreateCiba( string iss, string aud, string exp, string nbf, string scopes, @@ -296,6 +295,7 @@ public static string CreateCiba( string user_code, string requested_expiry, string login_hint, Dictionary requestContextAndIntent, string ecdsaX509FilePath, string ecdsaX509Password) + ///// ES256用のECParameters秘密鍵 //ECParameters ecPrivateKey) // ECDsa.ExportParameters(true)が動かねぇ。 { string json = ""; From f65fa3720fef208c265afe4361d9f409dc683dd7 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Wed, 4 Mar 2020 20:21:30 +0900 Subject: [PATCH 37/47] Now, I am fixing #353. --- .../Authentication/OAuth2AndOIDCClient.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs index bfce9fc9f..084e5cd89 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs @@ -31,6 +31,7 @@ //* 2017/04/24 西野 大介 新規 //* 2018/08/10 西野 大介 汎用認証サイトからのコード移行 //* 2019/08/01 西野 大介 client_secret_postのサポートを追加 +//* 2020/03/04 西野 大介 CIBAの認可リクエスト(WebAPI)を追加 //********************************************************************************** using System; @@ -644,6 +645,34 @@ public static async Task RegisterRequestObjectAsync( return await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); } + /// FAPI CIBAの認可リクエスト(WebAPI) + /// Uri + /// string + /// 結果のJSON文字列 + public static async Task CibaAuthZRequestAsyncAsync(Uri cibaAuthZUri, string requestObjectUri) + { + // 通信用の変数 + HttpRequestMessage httpRequestMessage = null; + HttpResponseMessage httpResponseMessage = null; + + // HttpRequestMessage (Method & RequestUri) + httpRequestMessage = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = cibaAuthZUri, + }; + + httpRequestMessage.Content = new FormUrlEncodedContent( + new Dictionary + { + { OAuth2AndOIDCConst.request_uri, requestObjectUri } + }); + + // HttpResponseMessage + httpResponseMessage = await OAuth2AndOIDCClient._HttpClient.SendAsync(httpRequestMessage).ConfigureAwait(false); + return await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); + } + #endregion } } \ No newline at end of file From 4729e04f9d49a4cfc8fcdd192404ed79d1365e92 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 9 Mar 2020 18:12:43 +0900 Subject: [PATCH 38/47] Now, I am fixing #353. --- .../Framework/Authentication/CmnJwtToken.cs | 4 +- .../Authentication/OAuth2AndOIDCClient.cs | 57 ++++++++++++++++++- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs index 41c7427ba..6eded38fa 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/CmnJwtToken.cs @@ -335,9 +335,9 @@ public static bool VerifyExp(string exp) public static bool VerifyNbf(string nbf) { #if NET45 - return (long.Parse(nbf) < PubCmnFunction.ToUnixTime(DateTimeOffset.Now)); + return (long.Parse(nbf) <= PubCmnFunction.ToUnixTime(DateTimeOffset.Now)); #else - return (long.Parse(nbf) < DateTimeOffset.Now.ToUnixTimeSeconds()); + return (long.Parse(nbf) <= DateTimeOffset.Now.ToUnixTimeSeconds()); #endif } #endregion diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs index 084e5cd89..6ea0df8c3 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Authentication/OAuth2AndOIDCClient.cs @@ -77,7 +77,7 @@ public static HttpClient HttpClient /// client_secret /// redirect_uri /// code - /// OAuth2AndOIDCEnum.AuthMethods + /// OAuth2AndOIDCEnum.AuthMethods /// 結果のJSON文字列 public static async Task GetAccessTokenByCodeAsync( Uri tokenEndpointUri, string client_id, string client_secret, string redirect_uri, string code, @@ -645,6 +645,7 @@ public static async Task RegisterRequestObjectAsync( return await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); } + #region CIBA /// FAPI CIBAの認可リクエスト(WebAPI) /// Uri /// string @@ -673,6 +674,60 @@ public static async Task CibaAuthZRequestAsyncAsync(Uri cibaAuthZUri, st return await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); } + /// FAPI CIBAのTokenリクエスト + /// Uri + /// client_id + /// client_secret + /// string + /// OAuth2AndOIDCEnum.AuthMethods + /// 結果のJSON文字列 + public static async Task GetAccessTokenByCibaAsync( + Uri tokenEndpointUri, string client_id, string client_secret, string auth_req_id, + OAuth2AndOIDCEnum.AuthMethods authMethod = OAuth2AndOIDCEnum.AuthMethods.client_secret_basic) + { + // 通信用の変数 + HttpRequestMessage httpRequestMessage = null; + HttpResponseMessage httpResponseMessage = null; + + // HttpRequestMessage (Method & RequestUri) + httpRequestMessage = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = tokenEndpointUri, + }; + + // body + Dictionary body = new Dictionary + { + { OAuth2AndOIDCConst.grant_type, OAuth2AndOIDCConst.CibaGrantType }, + { "auth_req_id", auth_req_id } + }; + + // 認証情報の付加 + if (authMethod == OAuth2AndOIDCEnum.AuthMethods.client_secret_basic) + { + httpRequestMessage.Headers.Authorization + = AuthenticationHeader.CreateBasicAuthenticationHeaderValue(client_id, client_secret); + } + else if (authMethod == OAuth2AndOIDCEnum.AuthMethods.client_secret_post) + { + body.Add(OAuth2AndOIDCConst.client_id, client_id); + body.Add(OAuth2AndOIDCConst.client_secret, client_secret); + } + else + { + throw new ArgumentException( + PublicExceptionMessage.ARGUMENT_INCORRECT, "authMethod"); + } + + httpRequestMessage.Content = new FormUrlEncodedContent(body); + + // HttpResponseMessage + httpResponseMessage = await OAuth2AndOIDCClient._HttpClient.SendAsync(httpRequestMessage).ConfigureAwait(false); + return await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); + } + #endregion + #endregion } } \ No newline at end of file From 10e1673b56a3d145682b776fe2b1aafac21ea634 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 17 Mar 2020 13:37:26 +0900 Subject: [PATCH 39/47] Now, I am fixing #353. --- .../Public/IO/ExponentialBackoff.cs | 144 ++++++++++++++++++ .../Infrastructure/Public/Public_net45.csproj | 9 +- .../Infrastructure/Public/Public_net46.csproj | 9 +- .../Infrastructure/Public/Public_net47.csproj | 9 +- .../Infrastructure/Public/Public_net48.csproj | 9 +- 5 files changed, 148 insertions(+), 32 deletions(-) create mode 100644 root/programs/CS/Frameworks/Infrastructure/Public/IO/ExponentialBackoff.cs diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/IO/ExponentialBackoff.cs b/root/programs/CS/Frameworks/Infrastructure/Public/IO/ExponentialBackoff.cs new file mode 100644 index 000000000..66e25d709 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/Public/IO/ExponentialBackoff.cs @@ -0,0 +1,144 @@ +//********************************************************************************** +//* Copyright (C) 2007,2016 Hitachi Solutions,Ltd. +//********************************************************************************** + +#region Apache License +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#endregion + +//********************************************************************************** +//* クラス名 :ExponentialBackoff +//* クラス日本語名 :ExponentialBackoffクラス +//* +//* 作成者 :生技 西野 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2020/03/16 西野 大介 新規作成 +//********************************************************************************** + +using System; +using System.Threading; +using Touryo.Infrastructure.Public.Util; + +namespace Touryo.Infrastructure.Public.IO +{ + /// + /// Exponential Backoff(指数バックオフ) - マイクロソフト系技術情報 Wiki + /// https://techinfoofmicrosofttech.osscons.jp/index.php?Exponential%20Backoff%EF%BC%88%E6%8C%87%E6%95%B0%E3%83%90%E3%83%83%E3%82%AF%E3%82%AA%E3%83%95%EF%BC%89 + /// + public class ExponentialBackoff + { + /// 現在のリトライ間隔 + private int _current_retry_interval_msec = -1; + + /// 現在のリトライ回数 + private int _current_retry_count = 0; + + #region 最大 + + /// 最大リトライ回数 + private int _maximum_retry_count = 0; + + /// + /// リトライ間隔の最大値 + /// ・通常、32 秒または 64 秒 + /// ・適切な値はユースケースによって異なる。 + /// + private int _maximum_backoff_msec = 0; + + #endregion + + /// constructor + /// int + public ExponentialBackoff(int maximum_retry_count) : this(maximum_retry_count, 32) { } + + /// constructor + /// int + /// int + public ExponentialBackoff(int maximum_retry_count, int maximum_backoff_seconds) + { + // maximum_backoff_secondsの既定値は32 + + this._maximum_retry_count = maximum_retry_count; + this._maximum_backoff_msec = maximum_backoff_seconds * 1000; + } + + /// Sleep + /// + /// - true : ループを継続する。 + /// - false : ループを終了する。 + /// + public bool Sleep() + { + int temp = this.CalculateSleepIntervalMSec(); + + if (temp == -1) + { + return false; + } + else + { + Thread.Sleep(temp); + return true; + } + } + + /// GetSleepIntervalMSec + /// int + public int GetSleepIntervalMSec() + { + return this._current_retry_interval_msec; + } + + /// CalculateSleepIntervalMSec + /// int + public int CalculateSleepIntervalMSec() + { + //Thread.Sleep(int millisecondsTimeout) // 引数はミリ秒 + + // 基底のミリ秒 + int temp = (int)(Math.Pow(2, this._current_retry_count) * 1000); + + // 1,000 ミリ秒以下の乱数を足し込む。 + // 再試行リクエストの後に毎回再計算 + temp += (int)(RandomValueGenerator.GenerateRandomUint() % 1000); + + this._current_retry_count++; + + if (this._maximum_retry_count <= this._current_retry_count) + { + // 最大リトライ回数超過 → ループ終了 + this._current_retry_interval_msec = -1; + } + else + { + if (this._maximum_backoff_msec <= temp) + { + // 最大リトライ間隔超過 → 最大値を返す。 + this._current_retry_interval_msec = this._maximum_backoff_msec; + } + else + { + // 計算値を返す。 + this._current_retry_interval_msec = temp; + } + } + + return this._current_retry_interval_msec; + } + } +} diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net45.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net45.csproj index dbaf62097..d33d84fc3 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net45.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net45.csproj @@ -64,18 +64,10 @@ false - - ..\packages\BouncyCastle.NetCore.1.8.3\lib\net20\BouncyCastle.Crypto.dll - True - ..\packages\DotNetZip.1.12.0\lib\net20\DotNetZip.dll True - - ..\packages\jose-jwt.2.4.0\lib\net40\jose-jwt.dll - True - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll True @@ -114,6 +106,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net46.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net46.csproj index 84bc3e0c0..18b5130bd 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net46.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net46.csproj @@ -64,18 +64,10 @@ false - - ..\packages\BouncyCastle.NetCore.1.8.3\lib\net20\BouncyCastle.Crypto.dll - True - ..\packages\DotNetZip.1.12.0\lib\net20\DotNetZip.dll True - - ..\packages\jose-jwt.2.4.0\lib\net40\jose-jwt.dll - True - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll True @@ -114,6 +106,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net47.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net47.csproj index ea01e51f4..9e3b3faf0 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net47.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net47.csproj @@ -64,18 +64,10 @@ false - - ..\packages\BouncyCastle.NetCore.1.8.3\lib\net20\BouncyCastle.Crypto.dll - True - ..\packages\DotNetZip.1.12.0\lib\net20\DotNetZip.dll True - - ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll - True - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll True @@ -114,6 +106,7 @@ + diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net48.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net48.csproj index 38f4a4acf..60f8433da 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_net48.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_net48.csproj @@ -64,18 +64,10 @@ false - - ..\packages\BouncyCastle.NetCore.1.8.3\lib\net20\BouncyCastle.Crypto.dll - True - ..\packages\DotNetZip.1.12.0\lib\net20\DotNetZip.dll True - - ..\packages\jose-jwt.2.4.0\lib\net461\jose-jwt.dll - True - ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll True @@ -114,6 +106,7 @@ + From 29ff1a6199c3db8897224ee9362f7f0c2619c367 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Thu, 19 Mar 2020 18:20:35 +0900 Subject: [PATCH 40/47] fixed #352 --- .../WebForms_Sample/Scripts/touryo/common.js | 84 +++++++++++++++---- .../WebForms_Sample/Scripts/touryo/common.js | 84 +++++++++++++++---- 2 files changed, 138 insertions(+), 30 deletions(-) diff --git a/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/touryo/common.js b/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/touryo/common.js index fc7a131b4..d9584cf27 100644 --- a/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/touryo/common.js +++ b/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/touryo/common.js @@ -43,6 +43,7 @@ //* 2019/03/04 西野 大介 リネーム(ResolveServerUrl -> Fx_ResolveServerUrl) //* 2019/03/04 西野 大介 二重送信防止のブラウザ判定処理を修正 //* 2019/03/04 西野 大介 WebForms版とMVC版のDiffを取り易く修正。 +//* 2020/03/19 西野 大介 モダン・ブラウザ・サポート(2017/04/20)の制限事項解除 //********************************************************************************** // --------------------------------------------------------------- @@ -390,11 +391,9 @@ window.addEventListener('resize', function (event) { } Fx_AjaxDialogMaskResizeTimer = setTimeout(function () { - // マスクのサイズの再計算 Fx_AjaxDialogMask.style.height = Math.max.apply(null, [Fx_getBrowserHeight(), Fx_getContentsHeight()]) + "px"; - Fx_AjaxDialogMask.style.width = Math.max.apply(null, [Fx_getBrowserWidth(), Fx_getContentsWidth()]) + "px"; - + Fx_AjaxDialogMask.style.width = Math.max.apply(null, [Fx_getBrowserWidth(), Fx_getContentsWidth()]) + "px"; }, 100); // 100 msec 間隔 }); @@ -524,6 +523,9 @@ var Fx_AjaxOKPseudoDialog_Height = 300; var Fx_AjaxYesNoPseudoDialog_Width = 500; var Fx_AjaxYesNoPseudoDialog_Height = 300; +// Ajax:Pseudo Dialogのタイムラグ +var TimeLag4BusinessPseudoModelDialog = 300; + // --------------------------------------------------------------- // OK Pseudo Dialogの初期化 // --------------------------------------------------------------- @@ -918,11 +920,35 @@ function Fx_ShowModalScreen(url, style) { // --------------------------------------------------------------- // Business Modal Screenの後処理 // --------------------------------------------------------------- -// 引数 myFlag +// 引数 - // 戻り値 - // --------------------------------------------------------------- function Fx_CallbackOfBusinessModalScreen() { - //alert("hoge"); + // Window.closed 検知までの時間差 + setTimeout( + "Fx_CallbackOfBusinessModalScreen2()", + TimeLag4BusinessPseudoModelDialog); +} + +// --------------------------------------------------------------- +// Business Modal Screenの後処理 +// --------------------------------------------------------------- +// 引数 - +// 戻り値 - +// --------------------------------------------------------------- +function Fx_CallbackOfBusinessModalScreen2() { + + // イベントを外す + if (Fx_BusinessPseudoModelDialog.closed) { + // 閉じている。 + $(Fx_BusinessPseudoModelDialog).off("unload"); //, Fx_CallbackOfBusinessModalScreen); + Fx_BusinessPseudoModelDialog = null; + } else { + // 閉じていない。 + // unloadのCallbackを"再度"仕掛ける。 + Fx_SetCallbackOfBusinessModalScreen(); + return; // このケースでは抜ける。 + } // マスクを外す。 Fx_DialogMaskOff(); @@ -1030,15 +1056,8 @@ function Fx_WindowClose(val) { window.close(); } else { - // IFRAME有り - - //// この処理は、DialogLoader.aspxのonunloadにも実装する。 - //window.parent.opener.Fx_CallbackOfBusinessModalScreen(); - //// 理由は、window.close()ではなく、window.parent.close()だから。 - //window.parent.close(); - - // IFRAME無し - window.opener.Fx_CallbackOfBusinessModalScreen(); + // $(win).on("unload", に移動した。 + //window.opener.Fx_CallbackOfBusinessModalScreen(); window.close(); } } @@ -1063,6 +1082,15 @@ function Fx_ShowNormalScreen(url) { GetElementByName_SuffixSearch("ctl00$NormalScreenStyle").value); } +// Business疑似Model(実体はModeless)Screen +var Fx_BusinessPseudoModelDialog = null; + +// --------------------------------------------------------------- +// モダンブラウザ版のBusiness疑似Model(実体はModeless)Screen +// --------------------------------------------------------------- +// 引数 url +// 戻り値 - +// --------------------------------------------------------------- function Fx_ShowNormalScreen2(url) { // ウィンドウを表示(window.open) @@ -1072,9 +1100,35 @@ function Fx_ShowNormalScreen2(url) { // 第3引数 = 画面のスタイル(「項目1:値1;項目2:値2;…;項目n:値n」の形式) // ウィンドウ名を、Fx_GetRandomString() を使用して可変に実装。 - window.open(url, + Fx_BusinessPseudoModelDialog = window.open(url, Fx_GetRandomString(10), //Math.random().toString(), GetElementByName_SuffixSearch("ctl00$NormalScreenStyle").value); + + // unloadのCallbackを仕掛ける。 + Fx_SetCallbackOfBusinessModalScreen(); +} + +// --------------------------------------------------------------- +// モダンブラウザ版(unloadのcallbackを仕掛ける) +// --------------------------------------------------------------- +// 引数 - +// 戻り値 - +// --------------------------------------------------------------- +function Fx_SetCallbackOfBusinessModalScreen() { + // https://qiita.com/bgn_nakazato/items/0b0c1b8a23dcaa7959df + setTimeout( + "Fx_SetCallbackOfBusinessModalScreen2()", + TimeLag4BusinessPseudoModelDialog); +} + +// --------------------------------------------------------------- +// モダンブラウザ版(unloadのcallbackを仕掛ける) +// --------------------------------------------------------------- +// 引数 - +// 戻り値 - +// --------------------------------------------------------------- +function Fx_SetCallbackOfBusinessModalScreen2() { + $(Fx_BusinessPseudoModelDialog).on("unload", Fx_CallbackOfBusinessModalScreen); } //********************************************************************************** diff --git a/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/touryo/common.js b/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/touryo/common.js index fc7a131b4..d9584cf27 100644 --- a/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/touryo/common.js +++ b/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/touryo/common.js @@ -43,6 +43,7 @@ //* 2019/03/04 西野 大介 リネーム(ResolveServerUrl -> Fx_ResolveServerUrl) //* 2019/03/04 西野 大介 二重送信防止のブラウザ判定処理を修正 //* 2019/03/04 西野 大介 WebForms版とMVC版のDiffを取り易く修正。 +//* 2020/03/19 西野 大介 モダン・ブラウザ・サポート(2017/04/20)の制限事項解除 //********************************************************************************** // --------------------------------------------------------------- @@ -390,11 +391,9 @@ window.addEventListener('resize', function (event) { } Fx_AjaxDialogMaskResizeTimer = setTimeout(function () { - // マスクのサイズの再計算 Fx_AjaxDialogMask.style.height = Math.max.apply(null, [Fx_getBrowserHeight(), Fx_getContentsHeight()]) + "px"; - Fx_AjaxDialogMask.style.width = Math.max.apply(null, [Fx_getBrowserWidth(), Fx_getContentsWidth()]) + "px"; - + Fx_AjaxDialogMask.style.width = Math.max.apply(null, [Fx_getBrowserWidth(), Fx_getContentsWidth()]) + "px"; }, 100); // 100 msec 間隔 }); @@ -524,6 +523,9 @@ var Fx_AjaxOKPseudoDialog_Height = 300; var Fx_AjaxYesNoPseudoDialog_Width = 500; var Fx_AjaxYesNoPseudoDialog_Height = 300; +// Ajax:Pseudo Dialogのタイムラグ +var TimeLag4BusinessPseudoModelDialog = 300; + // --------------------------------------------------------------- // OK Pseudo Dialogの初期化 // --------------------------------------------------------------- @@ -918,11 +920,35 @@ function Fx_ShowModalScreen(url, style) { // --------------------------------------------------------------- // Business Modal Screenの後処理 // --------------------------------------------------------------- -// 引数 myFlag +// 引数 - // 戻り値 - // --------------------------------------------------------------- function Fx_CallbackOfBusinessModalScreen() { - //alert("hoge"); + // Window.closed 検知までの時間差 + setTimeout( + "Fx_CallbackOfBusinessModalScreen2()", + TimeLag4BusinessPseudoModelDialog); +} + +// --------------------------------------------------------------- +// Business Modal Screenの後処理 +// --------------------------------------------------------------- +// 引数 - +// 戻り値 - +// --------------------------------------------------------------- +function Fx_CallbackOfBusinessModalScreen2() { + + // イベントを外す + if (Fx_BusinessPseudoModelDialog.closed) { + // 閉じている。 + $(Fx_BusinessPseudoModelDialog).off("unload"); //, Fx_CallbackOfBusinessModalScreen); + Fx_BusinessPseudoModelDialog = null; + } else { + // 閉じていない。 + // unloadのCallbackを"再度"仕掛ける。 + Fx_SetCallbackOfBusinessModalScreen(); + return; // このケースでは抜ける。 + } // マスクを外す。 Fx_DialogMaskOff(); @@ -1030,15 +1056,8 @@ function Fx_WindowClose(val) { window.close(); } else { - // IFRAME有り - - //// この処理は、DialogLoader.aspxのonunloadにも実装する。 - //window.parent.opener.Fx_CallbackOfBusinessModalScreen(); - //// 理由は、window.close()ではなく、window.parent.close()だから。 - //window.parent.close(); - - // IFRAME無し - window.opener.Fx_CallbackOfBusinessModalScreen(); + // $(win).on("unload", に移動した。 + //window.opener.Fx_CallbackOfBusinessModalScreen(); window.close(); } } @@ -1063,6 +1082,15 @@ function Fx_ShowNormalScreen(url) { GetElementByName_SuffixSearch("ctl00$NormalScreenStyle").value); } +// Business疑似Model(実体はModeless)Screen +var Fx_BusinessPseudoModelDialog = null; + +// --------------------------------------------------------------- +// モダンブラウザ版のBusiness疑似Model(実体はModeless)Screen +// --------------------------------------------------------------- +// 引数 url +// 戻り値 - +// --------------------------------------------------------------- function Fx_ShowNormalScreen2(url) { // ウィンドウを表示(window.open) @@ -1072,9 +1100,35 @@ function Fx_ShowNormalScreen2(url) { // 第3引数 = 画面のスタイル(「項目1:値1;項目2:値2;…;項目n:値n」の形式) // ウィンドウ名を、Fx_GetRandomString() を使用して可変に実装。 - window.open(url, + Fx_BusinessPseudoModelDialog = window.open(url, Fx_GetRandomString(10), //Math.random().toString(), GetElementByName_SuffixSearch("ctl00$NormalScreenStyle").value); + + // unloadのCallbackを仕掛ける。 + Fx_SetCallbackOfBusinessModalScreen(); +} + +// --------------------------------------------------------------- +// モダンブラウザ版(unloadのcallbackを仕掛ける) +// --------------------------------------------------------------- +// 引数 - +// 戻り値 - +// --------------------------------------------------------------- +function Fx_SetCallbackOfBusinessModalScreen() { + // https://qiita.com/bgn_nakazato/items/0b0c1b8a23dcaa7959df + setTimeout( + "Fx_SetCallbackOfBusinessModalScreen2()", + TimeLag4BusinessPseudoModelDialog); +} + +// --------------------------------------------------------------- +// モダンブラウザ版(unloadのcallbackを仕掛ける) +// --------------------------------------------------------------- +// 引数 - +// 戻り値 - +// --------------------------------------------------------------- +function Fx_SetCallbackOfBusinessModalScreen2() { + $(Fx_BusinessPseudoModelDialog).on("unload", Fx_CallbackOfBusinessModalScreen); } //********************************************************************************** From 2ecf9b5e1666498276000611f113bbe0bdc5f615 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 23 Mar 2020 10:51:45 +0900 Subject: [PATCH 41/47] Release preparation. --- .../Infrastructure/Framework/Framework_netstd20.csproj | 2 +- .../Infrastructure/Framework/Framework_netstd21.csproj | 2 +- .../Infrastructure/Framework/Properties/AssemblyInfo.cs | 2 +- .../Framework/RichClient/Properties/AssemblyInfo.cs | 2 +- .../Public/Db/DamManagedOdp/DamManagedOdp_netstd20.csproj | 2 +- .../Public/Db/DamManagedOdp/DamManagedOdp_netstd21.csproj | 2 +- .../Public/Db/DamManagedOdp/Properties/AssemblyInfo.cs | 2 +- .../Public/Db/DamMySQL/DamMySQL_netstd20.csproj | 2 +- .../Public/Db/DamMySQL/DamMySQL_netstd21.csproj | 2 +- .../Public/Db/DamMySQL/Properties/AssemblyInfo.cs | 2 +- .../Public/Db/DamPstGrS/DamPstGrS_netstd20.csproj | 2 +- .../Public/Db/DamPstGrS/DamPstGrS_netstd21.csproj | 2 +- .../Public/Db/DamPstGrS/Properties/AssemblyInfo.cs | 2 +- .../Infrastructure/Public/Properties/AssemblyInfo.cs | 2 +- .../Frameworks/Infrastructure/Public/Public_netstd20.csproj | 2 +- .../Frameworks/Infrastructure/Public/Public_netstd21.csproj | 2 +- .../Public/Security/Properties/AssemblyInfo.cs | 2 +- .../Public/Security/Public.Security_netstd20.csproj | 2 +- .../Public/Security/Public.Security_netstd21.csproj | 2 +- root/programs/CS/NuGet/DamManagedOdp.nuspec | 6 +++--- root/programs/CS/NuGet/DamMySQL.nuspec | 6 +++--- root/programs/CS/NuGet/DamPstGrS.nuspec | 6 +++--- root/programs/CS/NuGet/Framework.RichClient.nuspec | 6 +++--- root/programs/CS/NuGet/Framework.nuspec | 6 +++--- root/programs/CS/NuGet/Public.Security.nuspec | 6 +++--- root/programs/CS/NuGet/Public.nuspec | 2 +- root/programs/CS/NuGet/Symbol_DamManagedOdp.nuspec | 6 +++--- root/programs/CS/NuGet/Symbol_DamMySQL.nuspec | 6 +++--- root/programs/CS/NuGet/Symbol_DamPstGrS.nuspec | 6 +++--- root/programs/CS/NuGet/Symbol_Framework.RichClient.nuspec | 6 +++--- root/programs/CS/NuGet/Symbol_Framework.nuspec | 6 +++--- root/programs/CS/NuGet/Symbol_Public.Security.nuspec | 6 +++--- root/programs/CS/NuGet/Symbol_Public.nuspec | 2 +- 33 files changed, 57 insertions(+), 57 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj index a34a5018b..842715699 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd20.csproj @@ -4,7 +4,7 @@ netstandard2.0 Touryo.Infrastructure.Framework OpenTouryo.Framework - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj index 9935d5a74..1456cf483 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Framework_netstd21.csproj @@ -4,7 +4,7 @@ netstandard2.1 Touryo.Infrastructure.Framework OpenTouryo.Framework - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/Properties/AssemblyInfo.cs index 804a0a9c7..1bfeb4246 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] +[assembly: AssemblyVersion("2.6.0.0")] diff --git a/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Properties/AssemblyInfo.cs index 0dbdf50ba..e3cd51ee8 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Framework/RichClient/Properties/AssemblyInfo.cs @@ -63,4 +63,4 @@ // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を // 既定値にすることができます: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.5.0.0")] +[assembly: AssemblyVersion("2.6.0.0")] diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd20.csproj index 2510559fa..37e68d574 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd20.csproj @@ -3,7 +3,7 @@ netstandard2.0 OpenTouryo.DamManagedOdp Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd21.csproj index 541dad0d4..a42d5b49e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/DamManagedOdp_netstd21.csproj @@ -3,7 +3,7 @@ netstandard2.1 OpenTouryo.DamManagedOdp Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/Properties/AssemblyInfo.cs index dfe89fec8..b326d36c6 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamManagedOdp/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] +[assembly: AssemblyVersion("2.6.0.0")] diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd20.csproj index 8d7f5f339..abada950f 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd20.csproj @@ -3,7 +3,7 @@ netstandard2.0 OpenTouryo.DamMySQL Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd21.csproj index 8967c81c0..bd24e5a71 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/DamMySQL_netstd21.csproj @@ -3,7 +3,7 @@ netstandard2.1 OpenTouryo.DamMySQL Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/Properties/AssemblyInfo.cs index 6b9da0e7c..d5524769d 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamMySQL/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.6.0.0")] \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd20.csproj index 9cb6d4c2f..90752e0bd 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd20.csproj @@ -3,7 +3,7 @@ netstandard2.0 OpenTouryo.DamPstGrS Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd21.csproj index ff85bfc84..99903365d 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/DamPstGrS_netstd21.csproj @@ -3,7 +3,7 @@ netstandard2.1 OpenTouryo.DamPstGrS Touryo.Infrastructure.Public.Db - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/Properties/AssemblyInfo.cs index 3f92dc629..913a2313e 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamPstGrS/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.6.0.0")] \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Properties/AssemblyInfo.cs index 10fae7bbb..d953b091c 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.6.0.0")] \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj index 7fee9fb05..32b46b819 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd20.csproj @@ -4,7 +4,7 @@ netstandard2.0 OpenTouryo.Public Touryo.Infrastructure.Public - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj index e627bc7b7..940660635 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Public_netstd21.csproj @@ -4,7 +4,7 @@ netstandard2.1 OpenTouryo.Public Touryo.Infrastructure.Public - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Properties/AssemblyInfo.cs b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Properties/AssemblyInfo.cs index 1d99b233c..095863085 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Properties/AssemblyInfo.cs +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ // // すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を // 既定値にすることができます: -[assembly: AssemblyVersion("2.5.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.6.0.0")] \ No newline at end of file diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd20.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd20.csproj index ec5fc1553..5c52329ff 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd20.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd20.csproj @@ -4,7 +4,7 @@ netstandard2.0 OpenTouryo.Public.Security Touryo.Infrastructure.Public.Security - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd21.csproj b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd21.csproj index 7cb63b717..f82d73c54 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd21.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Public/Security/Public.Security_netstd21.csproj @@ -4,7 +4,7 @@ netstandard2.1 OpenTouryo.Public.Security Touryo.Infrastructure.Public.Security - 2.5.0.0 + 2.6.0.0 Hitachi Solutions diff --git a/root/programs/CS/NuGet/DamManagedOdp.nuspec b/root/programs/CS/NuGet/DamManagedOdp.nuspec index ba8df7549..dc9307cd7 100644 --- a/root/programs/CS/NuGet/DamManagedOdp.nuspec +++ b/root/programs/CS/NuGet/DamManagedOdp.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public.Db.DamManagedOdp OpenTouryo.DamManagedOdp - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,11 +17,11 @@ OpenTouryo Open棟梁 - + - + diff --git a/root/programs/CS/NuGet/DamMySQL.nuspec b/root/programs/CS/NuGet/DamMySQL.nuspec index 7ca2dbbfe..b96a5698e 100644 --- a/root/programs/CS/NuGet/DamMySQL.nuspec +++ b/root/programs/CS/NuGet/DamMySQL.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public.Db.DamMySQL OpenTouryo.DamMySQL - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,12 +17,12 @@ OpenTouryo Open棟梁 - + - + diff --git a/root/programs/CS/NuGet/DamPstGrS.nuspec b/root/programs/CS/NuGet/DamPstGrS.nuspec index ab5923a93..2caf9595e 100644 --- a/root/programs/CS/NuGet/DamPstGrS.nuspec +++ b/root/programs/CS/NuGet/DamPstGrS.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public.Db.DamPstGrS OpenTouryo.DamPstGrS - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,14 +17,14 @@ OpenTouryo Open棟梁 - + - + diff --git a/root/programs/CS/NuGet/Framework.RichClient.nuspec b/root/programs/CS/NuGet/Framework.RichClient.nuspec index 018a94989..92961e084 100644 --- a/root/programs/CS/NuGet/Framework.RichClient.nuspec +++ b/root/programs/CS/NuGet/Framework.RichClient.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Framework.RichClient OpenTouryo.Framework.RichClient - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,8 +17,8 @@ OpenTouryo Open棟梁 - - + + diff --git a/root/programs/CS/NuGet/Framework.nuspec b/root/programs/CS/NuGet/Framework.nuspec index c7c5b5c2a..a29595332 100644 --- a/root/programs/CS/NuGet/Framework.nuspec +++ b/root/programs/CS/NuGet/Framework.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Framework OpenTouryo.Framework - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,7 +17,7 @@ OpenTouryo Open棟梁 - + @@ -27,7 +27,7 @@ - + diff --git a/root/programs/CS/NuGet/Public.Security.nuspec b/root/programs/CS/NuGet/Public.Security.nuspec index 62e578f29..92bd350e1 100644 --- a/root/programs/CS/NuGet/Public.Security.nuspec +++ b/root/programs/CS/NuGet/Public.Security.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public.Security OpenTouryo.Public.Security - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,13 +17,13 @@ OpenTouryo Open棟梁 - + - + diff --git a/root/programs/CS/NuGet/Public.nuspec b/root/programs/CS/NuGet/Public.nuspec index 8b87c3222..771f84b0a 100644 --- a/root/programs/CS/NuGet/Public.nuspec +++ b/root/programs/CS/NuGet/Public.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public OpenTouryo.Public - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 diff --git a/root/programs/CS/NuGet/Symbol_DamManagedOdp.nuspec b/root/programs/CS/NuGet/Symbol_DamManagedOdp.nuspec index 0d9b2269e..564c621f6 100644 --- a/root/programs/CS/NuGet/Symbol_DamManagedOdp.nuspec +++ b/root/programs/CS/NuGet/Symbol_DamManagedOdp.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public.Db.DamManagedOdp OpenTouryo.DamManagedOdp - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,11 +17,11 @@ OpenTouryo Open棟梁 - + - + diff --git a/root/programs/CS/NuGet/Symbol_DamMySQL.nuspec b/root/programs/CS/NuGet/Symbol_DamMySQL.nuspec index f3c35da2c..9ec439cb3 100644 --- a/root/programs/CS/NuGet/Symbol_DamMySQL.nuspec +++ b/root/programs/CS/NuGet/Symbol_DamMySQL.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public.Db.DamMySQL OpenTouryo.DamMySQL - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,12 +17,12 @@ OpenTouryo Open棟梁 - + - + diff --git a/root/programs/CS/NuGet/Symbol_DamPstGrS.nuspec b/root/programs/CS/NuGet/Symbol_DamPstGrS.nuspec index 8dad8a073..3453cbb67 100644 --- a/root/programs/CS/NuGet/Symbol_DamPstGrS.nuspec +++ b/root/programs/CS/NuGet/Symbol_DamPstGrS.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public.Db.DamPstGrS OpenTouryo.DamPstGrS - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,14 +17,14 @@ OpenTouryo Open棟梁 - + - + diff --git a/root/programs/CS/NuGet/Symbol_Framework.RichClient.nuspec b/root/programs/CS/NuGet/Symbol_Framework.RichClient.nuspec index ab13747fe..e288a0aad 100644 --- a/root/programs/CS/NuGet/Symbol_Framework.RichClient.nuspec +++ b/root/programs/CS/NuGet/Symbol_Framework.RichClient.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Framework.RichClient OpenTouryo.Framework.RichClient - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,8 +17,8 @@ OpenTouryo Open棟梁 - - + + diff --git a/root/programs/CS/NuGet/Symbol_Framework.nuspec b/root/programs/CS/NuGet/Symbol_Framework.nuspec index 7f613be85..73559038b 100644 --- a/root/programs/CS/NuGet/Symbol_Framework.nuspec +++ b/root/programs/CS/NuGet/Symbol_Framework.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Framework OpenTouryo.Framework - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,7 +17,7 @@ OpenTouryo Open棟梁 - + @@ -27,7 +27,7 @@ - + diff --git a/root/programs/CS/NuGet/Symbol_Public.Security.nuspec b/root/programs/CS/NuGet/Symbol_Public.Security.nuspec index eb56a342a..a1b7e0a32 100644 --- a/root/programs/CS/NuGet/Symbol_Public.Security.nuspec +++ b/root/programs/CS/NuGet/Symbol_Public.Security.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public.Security OpenTouryo.Public.Security - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 @@ -17,13 +17,13 @@ OpenTouryo Open棟梁 - + - + diff --git a/root/programs/CS/NuGet/Symbol_Public.nuspec b/root/programs/CS/NuGet/Symbol_Public.nuspec index 1e8880506..c07048cf1 100644 --- a/root/programs/CS/NuGet/Symbol_Public.nuspec +++ b/root/programs/CS/NuGet/Symbol_Public.nuspec @@ -3,7 +3,7 @@ Touryo.Infrastructure.Public OpenTouryo.Public - 2.5.0 + 2.6.0-preview1 OSS Consortium .net subcommittee daisukenishino77 Apache-2.0 From 42f986391da7607207b2924fa3b1f5a5d48fb170 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 23 Mar 2020 14:48:07 +0900 Subject: [PATCH 42/47] fixed #357 --- .../ASPNETWebService/ASPNETWebService/app.config | 4 ++-- .../ASPNETWebServiceCore/appsettings.json | 4 ++-- .../Infrastructure/ServiceInterface/WCFService/App.config | 4 ++-- .../WSClient_sample/WSClientWinCone_sample/app.config | 4 ++-- .../WSClient_sample/WSClientWin_sample/app.config | 4 ++-- .../MVC_Sample/MVC_Sample/Controllers/HomeController.cs | 2 +- .../Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config | 4 ++-- .../Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.cs | 6 +++--- .../WebForms_Sample/Aspx/start/login.aspx.cs | 2 +- .../WebForms_Sample/WebForms_Sample/app.config | 6 +++--- .../MVC_Sample/MVC_Sample/Controllers/HomeController.cs | 2 +- .../Backend/MVC_Sample/MVC_Sample/appsettings.json | 4 ++-- .../WSClient_sample/WSClientWin_sample/appsettings.json | 4 ++-- .../ASPNETWebService/ASPNETWebService/app.config | 4 ++-- .../Infrastructure/ServiceInterface/WCFService/App.config | 4 ++-- .../WSClient_sample/WSClientWin_sample/app.config | 4 ++-- .../MVC_Sample/MVC_Sample/Controllers/HomeController.vb | 2 +- .../Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config | 4 ++-- .../Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.vb | 7 ++++--- .../WebForms_Sample/Aspx/start/login.aspx.vb | 2 +- .../WebForms_Sample/WebForms_Sample/app.config | 4 ++-- 21 files changed, 41 insertions(+), 40 deletions(-) diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config index e0f0d0063..afd5b04aa 100644 --- a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config @@ -29,13 +29,13 @@ - + - + diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json index 841bf1420..c4fddfd02 100644 --- a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/appsettings.json @@ -69,14 +69,14 @@ // アプリケーションの使用するパラメータ - start // OAuth2, OIDC認証 - "OAuth2AndOidcIsser": "http://jwtssoauth.opentouryo.com", + "SpRp_Isser": "https://ssoauth.opentouryo.com", "OAuth2AndOidcClientIDs": [ "67d328bfe8604aae83fb15fa44780d8b", "f53469c17c5a432f86ce563b7805ab89", "b6b393fe861b430eb4ee061006826b03", "f374a155909d486a9234693c34e94479" ], - "OAuth2AndOidcRS256Cer": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", + "SpRp_RsaCerFilePath": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", // SQLファイルファイル(フォルダ)へのパス "SqlTextFilePath": "C:\\root\\files\\resource\\Sql" diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config index a026a2c67..5a573f741 100644 --- a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config @@ -26,13 +26,13 @@ - + - + diff --git a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config index 5395b3d87..826dc22ff 100644 --- a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config +++ b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWinCone_sample/app.config @@ -48,10 +48,10 @@ - + - + diff --git a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config index 44268a253..ff7de67d9 100644 --- a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config +++ b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config @@ -62,10 +62,10 @@ - + - + diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.cs b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.cs index e84ca0bd8..688e20c53 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.cs +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.cs @@ -147,7 +147,7 @@ public ActionResult Login(LoginViewModel model) { // 外部ログイン return Redirect(string.Format( - "https://localhost:44300/MultiPurposeAuthSite/Account/OAuth2Authorize" + "https://localhost:44300/MultiPurposeAuthSite/authorize" + "?client_id=" + OAuth2AndOIDCParams.ClientID + "&response_type=code" + "&scope=profile%20email%20phone%20address%20openid" diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config index ef4c209d1..9d37092ef 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config @@ -38,10 +38,10 @@ - + - + diff --git a/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.cs b/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.cs index 2cff2be25..43192300e 100644 --- a/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.cs +++ b/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.cs @@ -111,9 +111,9 @@ protected async void Page_Load(object sender, EventArgs e) } else { } - - // ログインに失敗 - Response.Redirect("../Start/login.aspx"); + // ResolveClientUrlがInvalidOperationExceptionを吐くので... + //// ログインに失敗 + //Response.Redirect("../Start/login.aspx"); } finally { diff --git a/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/start/login.aspx.cs b/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/start/login.aspx.cs index 174f6e39a..4bc1c64bf 100644 --- a/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/start/login.aspx.cs +++ b/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/start/login.aspx.cs @@ -144,7 +144,7 @@ protected string UOC_btnButton1_Click(FxEventArgs fxEventArgs) /// URL protected string UOC_btnButton2_Click(FxEventArgs fxEventArgs) { - return "https://localhost:44300/MultiPurposeAuthSite/Account/OAuth2Authorize" + return "https://localhost:44300/MultiPurposeAuthSite/authorize" + "?client_id=" + OAuth2AndOIDCParams.ClientID + "&response_type=code" + "&scope=profile%20email%20phone%20address%20roles%20openid" diff --git a/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/app.config b/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/app.config index 4c3bd12ea..7da38c1dc 100644 --- a/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/app.config +++ b/root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/app.config @@ -111,12 +111,12 @@ - + - + - + diff --git a/root/programs/CS/Samples4NetCore/Backend/MVC_Sample/MVC_Sample/Controllers/HomeController.cs b/root/programs/CS/Samples4NetCore/Backend/MVC_Sample/MVC_Sample/Controllers/HomeController.cs index a09b9960a..5c4f154c7 100644 --- a/root/programs/CS/Samples4NetCore/Backend/MVC_Sample/MVC_Sample/Controllers/HomeController.cs +++ b/root/programs/CS/Samples4NetCore/Backend/MVC_Sample/MVC_Sample/Controllers/HomeController.cs @@ -157,7 +157,7 @@ await AuthenticationHttpContextExtensions.SignInAsync( { // 外部ログイン return Redirect(string.Format( - "https://localhost:44300/MultiPurposeAuthSite/Account/OAuth2Authorize" + "https://localhost:44300/MultiPurposeAuthSite/authorize" + "?client_id=" + OAuth2AndOIDCParams.ClientID + "&response_type=code" + "&scope=profile%20email%20phone%20address%20openid" diff --git a/root/programs/CS/Samples4NetCore/Backend/MVC_Sample/MVC_Sample/appsettings.json b/root/programs/CS/Samples4NetCore/Backend/MVC_Sample/MVC_Sample/appsettings.json index 21a55748b..bfe040c85 100644 --- a/root/programs/CS/Samples4NetCore/Backend/MVC_Sample/MVC_Sample/appsettings.json +++ b/root/programs/CS/Samples4NetCore/Backend/MVC_Sample/MVC_Sample/appsettings.json @@ -48,10 +48,10 @@ // アプリケーションの使用するパラメータ - start // OAuth2, OIDC認証 - "OAuth2AndOidcIsser": "http://jwtssoauth.opentouryo.com", + "SpRp_Isser": "https://ssoauth.opentouryo.com", "OAuth2AndOidcClientID": "f53469c17c5a432f86ce563b7805ab89", "OAuth2AndOidcSecret": "cKdwJb6mRKVIJpGxEWjIC94zquQltw_ECfO-55p21YM", - "OAuth2AndOidcRS256Cer": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", + "SpRp_RsaCerFilePath": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", "JwkSetUri": "https://localhost:44300/MultiPurposeAuthSite/jwkcerts/", // SQLファイルファイル(フォルダ)へのパス diff --git a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/appsettings.json b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/appsettings.json index cdf6e6609..9167841a4 100644 --- a/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/appsettings.json +++ b/root/programs/CS/Samples4NetCore/Legacy/WS_sample/WSClient_sample/WSClientWin_sample/appsettings.json @@ -57,10 +57,10 @@ // AvP[V̎gpp[^ - start // OAuth2, OIDCF - "OAuth2AndOidcIsser": "http://jwtssoauth.opentouryo.com", + "SpRp_Isser": "https://ssoauth.opentouryo.com", "OAuth2AndOidcClientID": "b6b393fe861b430eb4ee061006826b03", "OAuth2AndOidcSecret": "p2RgAFKF-JaF0A9F1tyDXp4wMq-uQZYyvTBM8wr_v8g", - "OAuth2AndOidcRS256Cer": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", + "SpRp_RsaCerFilePath": "C:\\root\\files\\resource\\X509\\SHA256RSA_Server.cer", "JwkSetUri": "https://localhost:44300/MultiPurposeAuthSite/jwkcerts/", // SQLt@Ct@CitH_jւ̃pX diff --git a/root/programs/VB/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config b/root/programs/VB/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config index d033e7432..1b6c6451e 100644 --- a/root/programs/VB/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config +++ b/root/programs/VB/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/app.config @@ -29,13 +29,13 @@ - + - + diff --git a/root/programs/VB/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config b/root/programs/VB/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config index 586cd415b..8f11d58d9 100644 --- a/root/programs/VB/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config +++ b/root/programs/VB/Frameworks/Infrastructure/ServiceInterface/WCFService/App.config @@ -25,13 +25,13 @@ - + - + diff --git a/root/programs/VB/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config b/root/programs/VB/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config index 42e06ad60..e7db09881 100644 --- a/root/programs/VB/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config +++ b/root/programs/VB/Samples/WS_sample/WSClient_sample/WSClientWin_sample/app.config @@ -62,10 +62,10 @@ - + - + diff --git a/root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.vb b/root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.vb index f7a27b2dd..ae229881f 100644 --- a/root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.vb +++ b/root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Controllers/HomeController.vb @@ -122,7 +122,7 @@ Namespace Controllers Else ' 外部ログイン Return Redirect(String.Format( - "https://localhost:44300/MultiPurposeAuthSite/Account/OAuth2Authorize" _ + "https://localhost:44300/MultiPurposeAuthSite/authorize" _ & "?client_id=" & OAuth2AndOIDCParams.ClientID _ & "&response_type=code" _ & "&scope=profile%20email%20phone%20address%20openid" _ diff --git a/root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config b/root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config index 21760b89b..b51461bca 100644 --- a/root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config +++ b/root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/app.config @@ -38,10 +38,10 @@ - + - + diff --git a/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.vb b/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.vb index c14520952..bff4f1945 100644 --- a/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.vb +++ b/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/OAuth2/OAuth2AuthorizationCodeGrantClient.aspx.vb @@ -98,9 +98,10 @@ Namespace Aspx.OAuth2 End If Else End If - - ' ログインに失敗 - Response.Redirect("../Start/login.aspx") + + 'ResolveClientUrlがInvalidOperationExceptionを吐くので... + '' ログインに失敗 + 'Response.Redirect("../Start/login.aspx") Finally Me.ClearExLoginsParams() End Try diff --git a/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/start/login.aspx.vb b/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/start/login.aspx.vb index c68ea8791..b34f5087e 100644 --- a/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/start/login.aspx.vb +++ b/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Aspx/start/login.aspx.vb @@ -128,7 +128,7 @@ Namespace Aspx.Start ''' Event Handlerの共通引数 ''' URL Protected Function UOC_btnButton2_Click(fxEventArgs As FxEventArgs) As String - Return "https://localhost:44300/MultiPurposeAuthSite/Account/OAuth2Authorize" _ + Return "https://localhost:44300/MultiPurposeAuthSite/authorize" _ & "?client_id=" & OAuth2AndOIDCParams.ClientID _ & "&response_type=code" _ & "&scope=profile%20email%20phone%20address%20roles%20openid" _ diff --git a/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/app.config b/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/app.config index 355b2a7b7..9b97f8118 100644 --- a/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/app.config +++ b/root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/app.config @@ -111,10 +111,10 @@ - + - + From 97f2b453c7e96659ff57cf134d8debb055072beb Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Mon, 23 Mar 2020 14:51:23 +0900 Subject: [PATCH 43/47] Add leaked files(#328). --- .../Controllers/FxController.cs | 369 ++++++++++++++++++ 1 file changed, 369 insertions(+) create mode 100644 root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/FxController.cs diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/FxController.cs b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/FxController.cs new file mode 100644 index 000000000..4b71d23c4 --- /dev/null +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebServiceCore/ASPNETWebServiceCore/Controllers/FxController.cs @@ -0,0 +1,369 @@ +//********************************************************************************** +//* Copyright (C) 2007,2016 Hitachi Solutions,Ltd. +//********************************************************************************** + +#region Apache License +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#endregion + +//********************************************************************************** +//* クラス名 :FxController +//* クラス日本語名 :ASP.NET WebAPI JSON-RPCの.NETオブジェクトの +//* バイナリ転送用メソッドを公開するサービス インターフェイス基盤 +//* +//* 作成日時 :- +//* 作成者 :生技 +//* 更新履歴 : +//* +//* 日時 更新者 内容 +//* ---------- ---------------- ------------------------------------------------- +//* 2017/08/18 西野 大介 新規作成 +//* 2019/11/18 西野 大介 .NET Core化 +//********************************************************************************** + +using System; +//using System.Data; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Diagnostics; +using System.Runtime.ExceptionServices; + +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Cors; + +using Newtonsoft.Json.Linq; + +using Touryo.Infrastructure.Business.Presentation; +using Touryo.Infrastructure.Framework.Transmission; +using Touryo.Infrastructure.Framework.Authentication; +using Touryo.Infrastructure.Framework.Exceptions; +using Touryo.Infrastructure.Framework.Common; +using Touryo.Infrastructure.Framework.Util; + +using Touryo.Infrastructure.Public.Db; +using Touryo.Infrastructure.Public.IO; +using Touryo.Infrastructure.Public.Log; +using Touryo.Infrastructure.Public.Str; +using Touryo.Infrastructure.Public.Util; +using Touryo.Infrastructure.Public.Reflection; + +namespace ASPNETWebService.Controllers +{ + /// + /// ASP.NET WebAPI JSON-RPCの.NETオブジェクトの + /// バイナリ転送用メソッドを公開するサービス インターフェイス基盤 + /// + [EnableCors] + //[ApiController] + public class FxController : ControllerBase + { + #region 疎通テスト用 + + /// + /// 疎通テスト用 + /// http(s)://hostName:portNum/testで疎通テスト可能。 + /// + /// Dictionary(string, string) + [HttpGet] + [Route("test")] + public Dictionary test() + { + Dictionary dic = new Dictionary(); + dic.Add("AAA", "aaa"); + dic.Add("BBB", "bbb"); + dic.Add("CCC", "ccc"); + + return dic; + } + + #endregion + + #region グローバル変数 + + /// インプロセス呼び出しの名前解決シングルトン クラス + /// + /// 初期化は起動時の1回のみであり、 + /// 読み取り専用のデータを保持する場合 + /// のみに適用するデザインパターンとする。 + /// + private static InProcessNameService IPR_NS = new InProcessNameService(); + + #endregion + + #region ASP.NET WebAPI JSON-RPCの.NETオブジェクトのバイナリ転送用メソッド + + /// + /// ASP.NET WebAPI JSON-RPCの.NETオブジェクトのバイナリ転送用メソッド + /// + /// + /// 引数:Dictionary(string, string) + /// ・ServiceName + /// ・ContextObject + /// ・ParameterValueObject + /// + /// + /// 戻り値:Dictionary(string, string) + /// ・Return + /// ・ContextObject + /// ・ReturnValueObject + /// + [HttpPost] + //[Route("WebAPIControllerForFx")] → Startup.cs へ + public async Task> DotNETOnlineWebAPI([FromBody] Dictionary paramDic) + { + // 引数 + string serviceName = paramDic["ServiceName"]; + byte[] contextObject = CustomEncode.FromBase64String(paramDic["ContextObject"]); + byte[] parameterValueObject = CustomEncode.FromBase64String(paramDic["ParameterValueObject"]); + + // 戻り値 + byte[] ret = null; + byte[] returnValueObject = null; + Dictionary returnDic = new Dictionary(); + + // ステータス + string status = "-"; + + // 初期化のため + returnValueObject = null; + + #region 呼出し制御関係の変数 + + // アセンブリ名 + string assemblyName = ""; + + // クラス名 + string className = ""; + + #endregion + + #region 引数・戻り値関係の変数 + + // コンテキスト情報 + object context; // 2009/09/29-この行 + + // 引数・戻り値の.NETオブジェクト + BaseParameterValue parameterValue = null; + BaseReturnValue returnValue = null; + + // エラー情報(クライアント側で復元するため) + WSErrorInfo wsErrorInfo = new WSErrorInfo(); + + // エラー情報(ログ出力用) + string errorType = ""; // 2009/09/15-この行 + string errorMessageID = ""; + string errorMessage = ""; + string errorToString = ""; + + #endregion + + try + { + // 開始ログの出力 + LogIF.InfoLog("SERVICE-IF", FxLiteral.SIF_STATUS_START); + + #region 名前解決 + + // ★ + status = FxLiteral.SIF_STATUS_NAME_SERVICE; + + // 名前解決(インプロセス) + FxController.IPR_NS.NameResolution(serviceName, out assemblyName, out className); + + #endregion + + #region 引数のデシリアライズ + + // ★ + status = FxLiteral.SIF_STATUS_DESERIALIZE; + + // コンテキストクラスの.NETオブジェクト化 + context = BinarySerialize.BytesToObject(contextObject); // 2009/09/29-この行 + // ※ コンテキストの利用方法は任意だが、サービスインターフェイス上での利用に止める。 + + // 引数クラスの.NETオブジェクト化 + parameterValue = (BaseParameterValue)BinarySerialize.BytesToObject(parameterValueObject); + + // 引数クラスをパラメタ セットに格納 + object[] paramSet = new object[] { parameterValue, DbEnum.IsolationLevelEnum.User }; + + #endregion + + #region 認証処理のUOC + + // ★ + status = FxLiteral.SIF_STATUS_AUTHENTICATION; + + if (context is string) + { + // System.Stringの場合 + string access_token = (string)context; + if (!string.IsNullOrEmpty(access_token)) + { + string sub = ""; + List roles = null; + List scopes = null; + JObject jobj = null; + + if (AccessToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) + { + // 認証成功 + Debug.WriteLine("認証成功"); + } + else + { + // 認証失敗(認証必須ならエラーにする。 + } + } + else + { + // 認証失敗(認証必須ならエラーにする。 + } + } + else + { + // MyUserInfoの場合 + } + + //contextObject = BinarySerialize.ObjectToBytes(hogehoge); // 更新可能だが...。 + + #endregion + + #region B層・D層呼出し + + // ★ + status = FxLiteral.SIF_STATUS_INVOKE; + + // #17-start + try + { + // B層・D層呼出し + Task result = (Task)Latebind.InvokeMethod( + assemblyName, className, + FxLiteral.TRANSMISSION_INPROCESS_ASYNC_METHOD_NAME, paramSet); + returnValue = await result; + } + catch (System.Reflection.TargetInvocationException rtEx) + { + //// InnerExceptionを投げなおす。 + //throw rtEx.InnerException; + + // スタックトレースを保って InnerException を throw + ExceptionDispatchInfo.Capture(rtEx.InnerException).Throw(); + } + // #17-end + + #endregion + + #region 戻り値のシリアライズ + + // ★ + status = FxLiteral.SIF_STATUS_SERIALIZE; + + returnValueObject = BinarySerialize.ObjectToBytes(returnValue); + + #endregion + + // ★ + status = ""; + + // 戻り値を返す。 + ret = BinarySerialize.ObjectToBytes(""); + } + catch (BusinessSystemException bsEx) + { + // システム例外 + + // エラー情報を設定する。 + wsErrorInfo.ErrorType = FxEnum.ErrorType.BusinessSystemException; + wsErrorInfo.ErrorMessageID = bsEx.messageID; + wsErrorInfo.ErrorMessage = bsEx.Message; + + // ログ出力用の情報を保存 + errorType = FxEnum.ErrorType.BusinessSystemException.ToString(); // 2009/09/15-この行 + errorMessageID = bsEx.messageID; + errorMessage = bsEx.Message; + + errorToString = bsEx.ToString(); + + // エラー情報を戻す。 + ret = BinarySerialize.ObjectToBytes(wsErrorInfo); + } + catch (FrameworkException fxEx) + { + // フレームワーク例外 + // ★ インナーエクセプション情報は消失 + + // エラー情報を設定する。 + wsErrorInfo.ErrorType = FxEnum.ErrorType.FrameworkException; + wsErrorInfo.ErrorMessageID = fxEx.messageID; + wsErrorInfo.ErrorMessage = fxEx.Message; + + // ログ出力用の情報を保存 + errorType = FxEnum.ErrorType.FrameworkException.ToString(); // 2009/09/15-この行 + errorMessageID = fxEx.messageID; + errorMessage = fxEx.Message; + + errorToString = fxEx.ToString(); + + // エラー情報を戻す。 + ret = BinarySerialize.ObjectToBytes(wsErrorInfo); + } + catch (Exception ex) + { + // ログ出力用の情報を保存 + errorType = FxEnum.ErrorType.ElseException.ToString(); // 2009/09/15-この行 + errorMessageID = "-"; + errorMessage = ex.Message; + + errorToString = ex.ToString(); + + throw; // SoapExceptionになって伝播 + } + finally + { + //// Sessionステートレス + //Session.Clear(); + //Session.Abandon(); + + // 終了ロクの出力 + if (status == "") + { + // 終了ログ出力 + LogIF.InfoLog("SERVICE-IF", "正常終了"); + } + else + { + // 終了ログ出力 + LogIF.ErrorLog("SERVICE-IF", + "異常終了" + + ":" + status + "\r\n" + + "エラー タイプ:" + errorType + "\r\n" // 2009/09/15-この行 + + "エラー メッセージID:" + errorMessageID + "\r\n" + + "エラー メッセージ:" + errorMessage + "\r\n" + + errorToString); + } + } + + returnDic.Add("Return", CustomEncode.ToBase64String(ret)); + returnDic.Add("ContextObject", CustomEncode.ToBase64String(contextObject)); + returnDic.Add("ReturnValueObject", CustomEncode.ToBase64String(returnValueObject)); + + return returnDic; + } + + #endregion + } +} From 6afa031a2e5709715094cf382b09913c807faff0 Mon Sep 17 00:00:00 2001 From: daisukenishino2 Date: Tue, 24 Mar 2020 14:33:02 +0900 Subject: [PATCH 44/47] Synchronized. (OpenTouryo <---> OpenTouryoTemplates) --- root/programs/CS/0_ExecAllBat.bat | 1 + root/programs/CS/5_Build_2CSCore_sample.bat | 57 ++ root/programs/CS/5_Build_2CS_sample.bat | 2 +- .../Business.RichClient_net46.csproj | 6 +- .../ASPNETWebService/ASPNETWebService.csproj | 3 +- .../ASPNETWebService/Web.config | 4 +- .../Tools/DaoGen_Tool/DaoGen_Tool.csproj | 1 - root/programs/CS/NuGet/_OpenTouryo.ico | Bin 0 -> 17006 bytes .../WSClientWin2_sample.csproj | 1 + .../MVC_Sample/App_Start/BundleConfig.cs | 6 +- .../MVC_Sample/MVC_Sample/MVC_Sample.csproj | 132 ++-- .../MVC_Sample/Scripts/esm/popper-utils.js | 44 +- .../Scripts/esm/popper-utils.js.map | 2 +- .../Scripts/esm/popper-utils.min.js | 2 +- .../Scripts/esm/popper-utils.min.js.map | 2 +- .../MVC_Sample/Scripts/esm/popper.js | 71 ++- .../MVC_Sample/Scripts/esm/popper.js.map | 2 +- .../MVC_Sample/Scripts/esm/popper.min.js | 2 +- .../MVC_Sample/Scripts/esm/popper.min.js.map | 2 +- .../MVC_Sample/MVC_Sample/Scripts/index.d.ts | 249 ++++---- .../MVC_Sample/Scripts/jquery-3.3.1.min.js | 2 - .../MVC_Sample/Scripts/jquery-3.3.1.min.map | 1 - .../Scripts/jquery-3.3.1.slim.min.js | 2 - .../Scripts/jquery-3.3.1.slim.min.map | 1 - ...isense.js => jquery-3.4.1.intellisense.js} | 0 .../{jquery-3.3.1.js => jquery-3.4.1.js} | 596 ++++++++++++------ .../MVC_Sample/Scripts/jquery-3.4.1.min.js | 2 + .../MVC_Sample/Scripts/jquery-3.4.1.min.map | 1 + .../MVC_Sample/Scripts/jquery-3.4.1.slim.js} | 552 +++++++++++----- .../Scripts/jquery-3.4.1.slim.min.js | 2 + .../Scripts/jquery-3.4.1.slim.min.map | 1 + .../Scripts/jquery.unobtrusive-ajax.js | 92 +-- .../Scripts/jquery.unobtrusive-ajax.min.js | 35 +- .../Scripts/jquery.validate-vsdoc.js | 4 +- .../MVC_Sample/Scripts/jquery.validate.js | 151 +++-- .../MVC_Sample/Scripts/jquery.validate.min.js | 8 +- .../Scripts/jquery.validate.unobtrusive.js | 61 +- .../jquery.validate.unobtrusive.min.js | 24 +- .../MVC_Sample/Scripts/popper-utils.js | 40 +- .../MVC_Sample/Scripts/popper-utils.js.map | 2 +- .../MVC_Sample/Scripts/popper-utils.min.js | 2 +- .../Scripts/popper-utils.min.js.map | 2 +- .../MVC_Sample/MVC_Sample/Scripts/popper.js | 66 +- .../MVC_Sample/Scripts/popper.js.map | 2 +- .../MVC_Sample/Scripts/popper.min.js | 2 +- .../MVC_Sample/Scripts/popper.min.js.map | 2 +- .../MVC_Sample/Scripts/umd/popper-utils.js | 44 +- .../Scripts/umd/popper-utils.js.map | 2 +- .../Scripts/umd/popper-utils.min.js | 2 +- .../Scripts/umd/popper-utils.min.js.map | 2 +- .../MVC_Sample/Scripts/umd/popper.js | 71 ++- .../MVC_Sample/Scripts/umd/popper.js.map | 2 +- .../MVC_Sample/Scripts/umd/popper.min.js | 2 +- .../MVC_Sample/Scripts/umd/popper.min.js.map | 2 +- .../MVC_Sample/MVC_Sample/Web.config | 34 +- .../MVC_Sample/MVC_Sample/packages.config | 46 +- .../Scripts/esm/popper-utils.js | 44 +- .../Scripts/esm/popper-utils.js.map | 2 +- .../Scripts/esm/popper-utils.min.js | 2 +- .../Scripts/esm/popper-utils.min.js.map | 2 +- .../WebForms_Sample/Scripts/esm/popper.js | 71 ++- .../WebForms_Sample/Scripts/esm/popper.js.map | 2 +- .../WebForms_Sample/Scripts/esm/popper.min.js | 2 +- .../Scripts/esm/popper.min.js.map | 2 +- .../WebForms_Sample/Scripts/index.d.ts | 249 ++++---- .../Scripts/jquery-3.3.1.min.js | 2 - .../Scripts/jquery-3.3.1.min.map | 1 - .../Scripts/jquery-3.3.1.slim.min.js | 2 - .../Scripts/jquery-3.3.1.slim.min.map | 1 - ...isense.js => jquery-3.4.1.intellisense.js} | 0 .../{jquery-3.3.1.js => jquery-3.4.1.js} | 596 ++++++++++++------ .../Scripts/jquery-3.4.1.min.js | 2 + .../Scripts/jquery-3.4.1.min.map | 1 + .../Scripts/jquery-3.4.1.slim.js} | 552 +++++++++++----- .../Scripts/jquery-3.4.1.slim.min.js | 2 + .../Scripts/jquery-3.4.1.slim.min.map | 1 + .../WebForms_Sample/Scripts/popper-utils.js | 40 +- .../Scripts/popper-utils.js.map | 2 +- .../Scripts/popper-utils.min.js | 2 +- .../Scripts/popper-utils.min.js.map | 2 +- .../WebForms_Sample/Scripts/popper.js | 66 +- .../WebForms_Sample/Scripts/popper.js.map | 2 +- .../WebForms_Sample/Scripts/popper.min.js | 2 +- .../WebForms_Sample/Scripts/popper.min.js.map | 2 +- .../Scripts/umd/popper-utils.js | 44 +- .../Scripts/umd/popper-utils.js.map | 2 +- .../Scripts/umd/popper-utils.min.js | 2 +- .../Scripts/umd/popper-utils.min.js.map | 2 +- .../WebForms_Sample/Scripts/umd/popper.js | 71 ++- .../WebForms_Sample/Scripts/umd/popper.js.map | 2 +- .../WebForms_Sample/Scripts/umd/popper.min.js | 2 +- .../Scripts/umd/popper.min.js.map | 2 +- .../WebForms_Sample/Web.config | 10 +- .../WebForms_Sample/WebForms_Sample.csproj | 137 ++-- .../WebForms_Sample/packages.config | 18 +- .../MVC_Sample/MVC_Sample/package.json | 6 +- root/programs/VB/1_DeleteDir.bat | 2 +- root/programs/VB/5_Build_2CS_sample.bat | 2 +- .../Business.RichClient_net46.vbproj | 6 +- .../ASPNETWebService/ASPNETWebService.vbproj | 12 +- .../ASPNETWebService/Web.config | 4 +- .../WebApp_sample/MVC_Sample/MVC_Sample.sln | 7 +- .../MVC_Sample/App_Start/BundleConfig.vb | 6 +- .../MVC_Sample/MVC_Sample/MVC_Sample.vbproj | 85 ++- .../MVC_Sample/Scripts/esm/popper-utils.js | 44 +- .../Scripts/esm/popper-utils.js.map | 2 +- .../Scripts/esm/popper-utils.min.js | 2 +- .../Scripts/esm/popper-utils.min.js.map | 2 +- .../MVC_Sample/Scripts/esm/popper.js | 71 ++- .../MVC_Sample/Scripts/esm/popper.js.map | 2 +- .../MVC_Sample/Scripts/esm/popper.min.js | 2 +- .../MVC_Sample/Scripts/esm/popper.min.js.map | 2 +- .../MVC_Sample/MVC_Sample/Scripts/index.d.ts | 249 ++++---- .../MVC_Sample/Scripts/jquery-3.3.1.min.js | 2 - .../MVC_Sample/Scripts/jquery-3.3.1.min.map | 1 - .../Scripts/jquery-3.3.1.slim.min.js | 2 - .../Scripts/jquery-3.3.1.slim.min.map | 1 - ...isense.js => jquery-3.4.1.intellisense.js} | 0 .../{jquery-3.3.1.js => jquery-3.4.1.js} | 596 ++++++++++++------ .../MVC_Sample/Scripts/jquery-3.4.1.min.js | 2 + .../MVC_Sample/Scripts/jquery-3.4.1.min.map | 1 + .../MVC_Sample/Scripts/jquery-3.4.1.slim.js} | 552 +++++++++++----- .../Scripts/jquery-3.4.1.slim.min.js | 2 + .../Scripts/jquery-3.4.1.slim.min.map | 1 + .../Scripts/jquery.unobtrusive-ajax.js | 92 +-- .../Scripts/jquery.unobtrusive-ajax.min.js | 35 +- .../Scripts/jquery.validate-vsdoc.js | 4 +- .../MVC_Sample/Scripts/jquery.validate.js | 151 +++-- .../MVC_Sample/Scripts/jquery.validate.min.js | 8 +- .../Scripts/jquery.validate.unobtrusive.js | 61 +- .../jquery.validate.unobtrusive.min.js | 24 +- .../MVC_Sample/Scripts/popper-utils.js | 40 +- .../MVC_Sample/Scripts/popper-utils.js.map | 2 +- .../MVC_Sample/Scripts/popper-utils.min.js | 2 +- .../Scripts/popper-utils.min.js.map | 2 +- .../MVC_Sample/MVC_Sample/Scripts/popper.js | 66 +- .../MVC_Sample/Scripts/popper.js.map | 2 +- .../MVC_Sample/Scripts/popper.min.js | 2 +- .../MVC_Sample/Scripts/popper.min.js.map | 2 +- .../MVC_Sample/Scripts/umd/popper-utils.js | 44 +- .../Scripts/umd/popper-utils.js.map | 2 +- .../Scripts/umd/popper-utils.min.js | 2 +- .../Scripts/umd/popper-utils.min.js.map | 2 +- .../MVC_Sample/Scripts/umd/popper.js | 71 ++- .../MVC_Sample/Scripts/umd/popper.js.map | 2 +- .../MVC_Sample/Scripts/umd/popper.min.js | 2 +- .../MVC_Sample/Scripts/umd/popper.min.js.map | 2 +- .../MVC_Sample/MVC_Sample/Web.config | 34 +- .../MVC_Sample/MVC_Sample/packages.config | 46 +- .../Scripts/esm/popper-utils.js | 44 +- .../Scripts/esm/popper-utils.js.map | 2 +- .../Scripts/esm/popper-utils.min.js | 2 +- .../Scripts/esm/popper-utils.min.js.map | 2 +- .../WebForms_Sample/Scripts/esm/popper.js | 71 ++- .../WebForms_Sample/Scripts/esm/popper.js.map | 2 +- .../WebForms_Sample/Scripts/esm/popper.min.js | 2 +- .../Scripts/esm/popper.min.js.map | 2 +- .../WebForms_Sample/Scripts/index.d.ts | 249 ++++---- .../Scripts/jquery-3.3.1.min.js | 2 - .../Scripts/jquery-3.3.1.min.map | 1 - .../Scripts/jquery-3.3.1.slim.min.js | 2 - .../Scripts/jquery-3.3.1.slim.min.map | 1 - ...isense.js => jquery-3.4.1.intellisense.js} | 0 .../{jquery-3.3.1.js => jquery-3.4.1.js} | 596 ++++++++++++------ .../Scripts/jquery-3.4.1.min.js | 2 + .../Scripts/jquery-3.4.1.min.map | 1 + .../Scripts/jquery-3.4.1.slim.js} | 552 +++++++++++----- .../Scripts/jquery-3.4.1.slim.min.js | 2 + .../Scripts/jquery-3.4.1.slim.min.map | 1 + .../WebForms_Sample/Scripts/popper-utils.js | 40 +- .../Scripts/popper-utils.js.map | 2 +- .../Scripts/popper-utils.min.js | 2 +- .../Scripts/popper-utils.min.js.map | 2 +- .../WebForms_Sample/Scripts/popper.js | 66 +- .../WebForms_Sample/Scripts/popper.js.map | 2 +- .../WebForms_Sample/Scripts/popper.min.js | 2 +- .../WebForms_Sample/Scripts/popper.min.js.map | 2 +- .../Scripts/umd/popper-utils.js | 44 +- .../Scripts/umd/popper-utils.js.map | 2 +- .../Scripts/umd/popper-utils.min.js | 2 +- .../Scripts/umd/popper-utils.min.js.map | 2 +- .../WebForms_Sample/Scripts/umd/popper.js | 71 ++- .../WebForms_Sample/Scripts/umd/popper.js.map | 2 +- .../WebForms_Sample/Scripts/umd/popper.min.js | 2 +- .../Scripts/umd/popper.min.js.map | 2 +- .../WebForms_Sample/WebForms_Sample.vbproj | 83 +-- .../WebForms_Sample/packages.config | 18 +- .../WebForms_Sample/web.config | 8 +- root/programs/VB/z_Common.bat | 7 +- root/programs/nuget.exe | Bin 5734488 -> 5803104 bytes 190 files changed, 5352 insertions(+), 3306 deletions(-) create mode 100644 root/programs/CS/5_Build_2CSCore_sample.bat create mode 100644 root/programs/CS/NuGet/_OpenTouryo.ico delete mode 100644 root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.js delete mode 100644 root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.map delete mode 100644 root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.slim.min.js delete mode 100644 root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.slim.min.map rename root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/{jquery-3.3.1.intellisense.js => jquery-3.4.1.intellisense.js} (100%) rename root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/{jquery-3.3.1.js => jquery-3.4.1.js} (94%) create mode 100644 root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.min.js create mode 100644 root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.min.map rename root/programs/{VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.slim.js => CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.slim.js} (93%) create mode 100644 root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.slim.min.js create mode 100644 root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.slim.min.map delete mode 100644 root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.min.js delete mode 100644 root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.min.map delete mode 100644 root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.slim.min.js delete mode 100644 root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.slim.min.map rename root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/{jquery-3.3.1.intellisense.js => jquery-3.4.1.intellisense.js} (100%) rename root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/{jquery-3.3.1.js => jquery-3.4.1.js} (94%) create mode 100644 root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.min.js create mode 100644 root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.min.map rename root/programs/{VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.slim.js => CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.slim.js} (93%) create mode 100644 root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.slim.min.js create mode 100644 root/programs/CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.slim.min.map delete mode 100644 root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.js delete mode 100644 root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.map delete mode 100644 root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.slim.min.js delete mode 100644 root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.slim.min.map rename root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/{jquery-3.3.1.intellisense.js => jquery-3.4.1.intellisense.js} (100%) rename root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/{jquery-3.3.1.js => jquery-3.4.1.js} (94%) create mode 100644 root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.min.js create mode 100644 root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.min.map rename root/programs/{CS/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.slim.js => VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.slim.js} (93%) create mode 100644 root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.slim.min.js create mode 100644 root/programs/VB/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.4.1.slim.min.map delete mode 100644 root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.min.js delete mode 100644 root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.min.map delete mode 100644 root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.slim.min.js delete mode 100644 root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.3.1.slim.min.map rename root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/{jquery-3.3.1.intellisense.js => jquery-3.4.1.intellisense.js} (100%) rename root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/{jquery-3.3.1.js => jquery-3.4.1.js} (94%) create mode 100644 root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.min.js create mode 100644 root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.min.map rename root/programs/{CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.slim.js => VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.slim.js} (93%) create mode 100644 root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.slim.min.js create mode 100644 root/programs/VB/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/Scripts/jquery-3.4.1.slim.min.map diff --git a/root/programs/CS/0_ExecAllBat.bat b/root/programs/CS/0_ExecAllBat.bat index c9c8762db..f586eb60e 100644 --- a/root/programs/CS/0_ExecAllBat.bat +++ b/root/programs/CS/0_ExecAllBat.bat @@ -36,6 +36,7 @@ echo | call 4_Build_Framework_Tool.bat echo | call 4_Build_Framework_ToolCore.bat echo | call 5_Build_2CS_sample.bat +echo | call 5_Build_2CSCore_sample.bat echo | call 5_Build_Bat_sample.bat echo | call 5_Build_BatCore_sample.bat diff --git a/root/programs/CS/5_Build_2CSCore_sample.bat b/root/programs/CS/5_Build_2CSCore_sample.bat new file mode 100644 index 000000000..f42958565 --- /dev/null +++ b/root/programs/CS/5_Build_2CSCore_sample.bat @@ -0,0 +1,57 @@ +setlocal + +@rem -------------------------------------------------- +@rem Turn off the echo function. +@rem -------------------------------------------------- +@echo off + +@rem -------------------------------------------------- +@rem Get the path to the executable file. +@rem -------------------------------------------------- +set CURRENT_DIR="%~dp0" + +@rem -------------------------------------------------- +@rem Execution of the common processing. +@rem -------------------------------------------------- +call %CURRENT_DIR%z_Common.bat + +rem -------------------------------------------------- +rem Batch build of 2CSClientWin_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\2CSClientWin_sample\2CSClientWin_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\2CSClientWin_sample\2CSClientWin_sample.sln" + +rem -------------------------------------------------- +rem Batch build of GenDaoAndBatUpd_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\GenDaoAndBatUpd_sample\GenDaoAndBatUpd_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\GenDaoAndBatUpd_sample\GenDaoAndBatUpd_sample.sln" + +rem -------------------------------------------------- +rem Batch build of TimeStamp_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\TimeStamp_sample\TimeStamp_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\TimeStamp_sample\TimeStamp_sample.sln" + +rem -------------------------------------------------- +rem Batch build of 2CSClientWPF_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\2CSClientWPF_sample\2CSClientWPF_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\2CSClientWPF_sample\2CSClientWPF_sample.sln" + +rem -------------------------------------------------- +rem Batch build of AsyncEvent_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\AsyncEvent_sample\AsyncEvent_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\AsyncEvent_sample\AsyncEvent_sample.sln" + +rem -------------------------------------------------- +rem Batch build of CustCtrl_sample. +rem -------------------------------------------------- +dotnet restore "Samples4NetCore\Legacy\2CS_sample\CustCtrl_sample\CustCtrl_sample.sln" +dotnet msbuild %COMMANDLINE% "Samples4NetCore\Legacy\2CS_sample\CustCtrl_sample\CustCtrl_sample.sln" + +pause + +rem ------------------------------------------------------- +endlocal diff --git a/root/programs/CS/5_Build_2CS_sample.bat b/root/programs/CS/5_Build_2CS_sample.bat index d98884fe2..f41ecc72c 100644 --- a/root/programs/CS/5_Build_2CS_sample.bat +++ b/root/programs/CS/5_Build_2CS_sample.bat @@ -23,7 +23,7 @@ rem -------------------------------------------------- pause rem -------------------------------------------------- -rem Batch build of DenDaoAndBatUpd_sample. +rem Batch build of GenDaoAndBatUpd_sample. rem -------------------------------------------------- %BUILDFILEPATH% %COMMANDLINE% "Samples\2CS_sample\GenDaoAndBatUpd_sample\GenDaoAndBatUpd_sample.sln" diff --git a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_net46.csproj b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_net46.csproj index fd8fe22e6..b42461471 100644 --- a/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_net46.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/Business/RichClient/Business.RichClient_net46.csproj @@ -81,15 +81,15 @@ ..\..\Build_net46\OpenTouryo.Framework.RichClient.dll + + ..\..\Build\OpenTouryo.Public.dll + 3.0 3.0 - - ..\..\Build\OpenTouryo.Public.dll - diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/ASPNETWebService.csproj b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/ASPNETWebService.csproj index e8b2a3206..92993312f 100644 --- a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/ASPNETWebService.csproj +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/ASPNETWebService.csproj @@ -16,6 +16,7 @@ ASPNETWebService v4.6 true + @@ -23,7 +24,7 @@ - + true True diff --git a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/Web.config b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/Web.config index 898f5422a..797ebe6bd 100644 --- a/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/Web.config +++ b/root/programs/CS/Frameworks/Infrastructure/ServiceInterface/ASPNETWebService/ASPNETWebService/Web.config @@ -234,13 +234,13 @@ - - + + diff --git a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_Tool.csproj b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_Tool.csproj index aec715348..d04746c4e 100644 --- a/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_Tool.csproj +++ b/root/programs/CS/Frameworks/Tools/DaoGen_Tool/DaoGen_Tool.csproj @@ -154,7 +154,6 @@ SimpleTextBoxWindow.cs - diff --git a/root/programs/CS/NuGet/_OpenTouryo.ico b/root/programs/CS/NuGet/_OpenTouryo.ico new file mode 100644 index 0000000000000000000000000000000000000000..9584927021cc9479f572ae22fdf50ff342c8bb2e GIT binary patch literal 17006 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 literal 0 HcmV?d00001 diff --git a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj index db68c015a..33dcd210c 100644 --- a/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj +++ b/root/programs/CS/Samples/WS_sample/WSClient_sample/WSClientWin2_sample/WSClientWin2_sample.csproj @@ -31,6 +31,7 @@ false false true + true true diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/App_Start/BundleConfig.cs b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/App_Start/BundleConfig.cs index 624ab1c2d..e1c467897 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/App_Start/BundleConfig.cs +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/App_Start/BundleConfig.cs @@ -38,7 +38,7 @@ public static void RegisterBundles(BundleCollection bundles) { // see : https://www.asp.net/ajax/cdn - string jqueryVersion = "3.3.1"; + string jqueryVersion = "3.4.1"; BundleTable.EnableOptimizations = true; BundleTable.Bundles.UseCdn = true; // same as: bundles.UseCdn = true; @@ -62,7 +62,7 @@ public static void RegisterBundles(BundleCollection bundles) bundles.Add(new ScriptBundle( "~/bundles/jqueryval", - "//ajax.aspnetcdn.com/ajax/jquery.validate/1.16.0/jquery.validate.min.js") + "//ajax.aspnetcdn.com/ajax/jquery.validate/1.17.0/jquery.validate.min.js") { CdnFallbackExpression = "window.jQuery.validator" }.Include("~/Scripts/jquery.validate.js")); @@ -88,7 +88,7 @@ public static void RegisterBundles(BundleCollection bundles) bundles.Add(new ScriptBundle( "~/bundles/bootstrap", - "//ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js") + "//ajax.aspnetcdn.com/ajax/bootstrap/4.3.1/bootstrap.min.js") { CdnFallbackExpression = "window.jQuery.fn.modal" }.Include("~/Scripts/bootstrap.js")); diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/MVC_Sample.csproj b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/MVC_Sample.csproj index ec34a355f..b9bd2cbf7 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/MVC_Sample.csproj +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/MVC_Sample.csproj @@ -17,23 +17,15 @@ v4.6 false true + - true - - - - - 12.0 - - ..\ - true - + true 3.0 @@ -56,19 +48,19 @@ ..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll - True - - ..\packages\Microsoft.Owin.4.0.0\lib\net451\Microsoft.Owin.dll + + + ..\packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll - - ..\packages\Microsoft.Owin.Host.SystemWeb.4.0.0\lib\net451\Microsoft.Owin.Host.SystemWeb.dll + + ..\packages\Microsoft.Owin.Host.SystemWeb.4.0.1\lib\net45\Microsoft.Owin.Host.SystemWeb.dll - - ..\packages\Microsoft.Owin.Security.4.0.0\lib\net451\Microsoft.Owin.Security.dll + + ..\packages\Microsoft.Owin.Security.4.0.1\lib\net45\Microsoft.Owin.Security.dll - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Business.dll @@ -76,17 +68,16 @@ ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Framework.dll - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.Security.dll + + ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll True - - ..\..\..\..\Frameworks\Infrastructure\Build\OpenTouryo.Public.dll - @@ -96,8 +87,8 @@ - - ..\packages\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll + + ..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll ..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net46\System.Security.Cryptography.Algorithms.dll @@ -115,43 +106,64 @@ - ..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.Helpers.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.Helpers.dll - - ..\packages\Microsoft.AspNet.WebApi.Core.5.2.6\lib\net45\System.Web.Http.dll + + ..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll - - ..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.6\lib\net45\System.Web.Http.WebHost.dll + + ..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.7\lib\net45\System.Web.Http.WebHost.dll - - ..\packages\Microsoft.AspNet.Mvc.5.2.6\lib\net45\System.Web.Mvc.dll + + ..\packages\Microsoft.AspNet.Mvc.5.2.7\lib\net45\System.Web.Mvc.dll ..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll - True - ..\packages\Microsoft.AspNet.Razor.3.2.6\lib\net45\System.Web.Razor.dll + ..\packages\Microsoft.AspNet.Razor.3.2.7\lib\net45\System.Web.Razor.dll - - True - ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - ..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.dll - ..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.Deployment.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Deployment.dll - ..\packages\Microsoft.AspNet.WebPages.3.2.6\lib\net45\System.Web.WebPages.Razor.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll - ..\packages\WebGrease.1.6.0\lib\WebGrease.dll + + + + + + + + + + + + + + + + + + + + + + True + ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + + True + ..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll @@ -207,14 +219,6 @@ - - - - - - - - @@ -225,15 +229,23 @@ - - - - - + + + + + + + + + + + + + + + - - @@ -287,15 +299,15 @@ - - - + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js index 3ae4fe132..d50c0f549 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js @@ -1,6 +1,6 @@ /**! * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.14.0 + * @version 1.14.3 * @license * Copyright (c) 2016 Federico Zivolo and contributors * @@ -87,40 +87,27 @@ function getScrollParent(element) { return getScrollParent(getParentNode(element)); } +var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; + +var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); +var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); + /** - * Tells if you are running Internet Explorer + * Determines if the browser is Internet Explorer * @method * @memberof Popper.Utils - * @argument {number} version to check + * @param {Number} version to check * @returns {Boolean} isIE */ -var cache = {}; - -var isIE = function () { - var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all'; - - version = version.toString(); - if (cache.hasOwnProperty(version)) { - return cache[version]; +function isIE(version) { + if (version === 11) { + return isIE11; } - switch (version) { - case '11': - cache[version] = navigator.userAgent.indexOf('Trident') !== -1; - break; - case '10': - cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1; - break; - case 'all': - cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1; - break; + if (version === 10) { + return isIE10; } - - //Set IE - cache.all = cache.all || Object.keys(cache).some(function (key) { - return cache[key]; - }); - return cache[version]; -}; + return isIE11 || isIE10; +} /** * Returns the offset parent of the given element @@ -629,7 +616,6 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE return computedPlacement + (variation ? '-' + variation : ''); } -var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; var timeoutDuration = 0; for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js.map b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js.map index bb8f0f500..457818e91 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js.map +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.js.map @@ -1 +1 @@ -{"version":3,"file":"popper-utils.js","sources":["../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/debounce.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/getOffsetRect.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getSupportedPropertyName.js","../../src/utils/isFunction.js","../../src/utils/isModifierEnabled.js","../../src/utils/isModifierRequired.js","../../src/utils/isNumeric.js","../../src/utils/getWindow.js","../../src/utils/removeEventListeners.js","../../src/utils/runModifiers.js","../../src/utils/setAttributes.js","../../src/utils/setStyles.js","../../src/utils/setupEventListeners.js","../../src/utils/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","document","body","ownerDocument","overflow","overflowX","overflowY","test","cache","version","toString","hasOwnProperty","navigator","userAgent","indexOf","appVersion","all","Object","keys","some","key","getOffsetParent","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isIE10","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","window","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","sort","a","b","area","filteredAreas","filter","computedPlacement","length","variation","split","isBrowser","longerTimeoutBrowsers","timeoutDuration","i","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","getOffsetRect","elementRect","offsetLeft","offsetTop","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","getReferenceOffsets","state","commonOffsetParent","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","isFunction","functionToCheck","getType","call","isModifierEnabled","modifiers","modifierName","name","enabled","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","warn","isNumeric","n","isNaN","isFinite","getWindow","defaultView","removeEventListeners","removeEventListener","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","runModifiers","data","ends","modifiersToRun","undefined","setAttributes","attributes","setAttribute","removeAttribute","setStyles","unit","attachToScrollParents","event","callback","isBody","target","addEventListener","passive","push","setupEventListeners","options"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"popper-utils.js","sources":["../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isBrowser.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/debounce.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/getOffsetRect.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getSupportedPropertyName.js","../../src/utils/isFunction.js","../../src/utils/isModifierEnabled.js","../../src/utils/isModifierRequired.js","../../src/utils/isNumeric.js","../../src/utils/getWindow.js","../../src/utils/removeEventListeners.js","../../src/utils/runModifiers.js","../../src/utils/setAttributes.js","../../src/utils/setStyles.js","../../src/utils/setupEventListeners.js","../../src/utils/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","export default typeof window !== 'undefined' && typeof document !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import isBrowser from './isBrowser';\n\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","document","body","ownerDocument","overflow","overflowX","overflowY","test","window","isIE11","isBrowser","MSInputMethodContext","documentMode","isIE10","navigator","userAgent","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","indexOf","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","Object","keys","map","key","sort","a","b","area","filteredAreas","filter","computedPlacement","length","variation","split","longerTimeoutBrowsers","timeoutDuration","i","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","getOffsetRect","elementRect","offsetLeft","offsetTop","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","getReferenceOffsets","state","commonOffsetParent","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","isFunction","functionToCheck","getType","toString","call","isModifierEnabled","modifiers","modifierName","some","name","enabled","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","warn","isNumeric","n","isNaN","isFinite","getWindow","defaultView","removeEventListeners","removeEventListener","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","runModifiers","data","ends","modifiersToRun","undefined","setAttributes","attributes","setAttribute","removeAttribute","setStyles","unit","attachToScrollParents","event","callback","isBody","target","addEventListener","passive","push","setupEventListeners","options"],"mappings":"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"} \ No newline at end of file diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.min.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.min.js index 95cd4b83f..ab4383924 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.min.js +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper-utils.min.js @@ -1,5 +1,5 @@ /* Copyright (C) Federico Zivolo 2018 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). - */function a(a,b){if(1!==a.nodeType)return[];var c=getComputedStyle(a,null);return b?c[b]:c}function b(a){return'HTML'===a.nodeName?a:a.parentNode||a.host}function c(d){if(!d)return document.body;switch(d.nodeName){case'HTML':case'BODY':return d.ownerDocument.body;case'#document':return d.body;}var e=a(d),f=e.overflow,g=e.overflowX,h=e.overflowY;return /(auto|scroll|overlay)/.test(f+h+g)?d:c(b(d))}var d={},e=function(){var a=0=c.clientWidth&&d>=c.clientHeight}),k=0=c.clientWidth&&d>=c.clientHeight}),k=0 cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","document","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","cache","version","toString","hasOwnProperty","navigator","userAgent","indexOf","appVersion","all","Object","keys","some","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","isIE10","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","window","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","length","key","variation","split","isBrowser","longerTimeoutBrowsers","timeoutDuration","i","called","Promise","resolve","then","scheduled","supportsMicroTasks","Array","prototype","find","arr","findIndex","cur","match","obj","elementRect","offsetLeft","offsetTop","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","commonOffsetParent","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","functionToCheck","getType","call","modifiers","name","enabled","requesting","isRequired","warn","requested","n","isNaN","isFinite","defaultView","removeEventListener","state","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","modifiersToRun","ends","fn","isFunction","data","reference","value","attributes","removeAttribute","setAttribute","unit","isNumeric","isBody","target","addEventListener","passive","push"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"popper-utils.min.js","sources":["../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isBrowser.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/debounce.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/getOffsetRect.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getSupportedPropertyName.js","../../src/utils/isFunction.js","../../src/utils/isModifierEnabled.js","../../src/utils/isModifierRequired.js","../../src/utils/isNumeric.js","../../src/utils/getWindow.js","../../src/utils/removeEventListeners.js","../../src/utils/runModifiers.js","../../src/utils/setAttributes.js","../../src/utils/setStyles.js","../../src/utils/setupEventListeners.js","../../src/utils/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","export default typeof window !== 'undefined' && typeof document !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import isBrowser from './isBrowser';\n\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import getWindowSizes from './getWindowSizes';\nimport getClientRect from './getClientRect';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n // position\n return getClientRect(elementRect);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNumeric from './isNumeric';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n\n// This is here just for backward compatibility with versions lower than v1.10.3\n// you should import the utilities using named exports, if you want them all use:\n// ```\n// import * as PopperUtils from 'popper-utils';\n// ```\n// The default export will be removed in the next major version.\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNumeric,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n"],"names":["element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","document","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","window","isIE10","isBrowser","navigator","userAgent","version","isIE11","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","indexOf","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","Object","keys","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","length","key","variation","split","longerTimeoutBrowsers","timeoutDuration","i","called","Promise","resolve","then","scheduled","supportsMicroTasks","Array","prototype","find","arr","findIndex","cur","match","obj","elementRect","offsetLeft","offsetTop","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","commonOffsetParent","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","functionToCheck","getType","toString","call","modifiers","some","name","enabled","requesting","isRequired","warn","requested","n","isNaN","isFinite","defaultView","removeEventListener","state","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","modifiersToRun","ends","fn","isFunction","data","reference","value","attributes","removeAttribute","setAttribute","unit","isNumeric","isBody","target","addEventListener","passive","push"],"mappings":"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"} \ No newline at end of file diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js index f179271e6..3994fd517 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js @@ -1,6 +1,6 @@ /**! * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.14.0 + * @version 1.14.3 * @license * Copyright (c) 2016 Federico Zivolo and contributors * @@ -23,6 +23,7 @@ * SOFTWARE. */ var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; + var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; var timeoutDuration = 0; for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { @@ -149,40 +150,25 @@ function getScrollParent(element) { return getScrollParent(getParentNode(element)); } +var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); +var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); + /** - * Tells if you are running Internet Explorer + * Determines if the browser is Internet Explorer * @method * @memberof Popper.Utils - * @argument {number} version to check + * @param {Number} version to check * @returns {Boolean} isIE */ -var cache = {}; - -var isIE = function () { - var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all'; - - version = version.toString(); - if (cache.hasOwnProperty(version)) { - return cache[version]; +function isIE(version) { + if (version === 11) { + return isIE11; } - switch (version) { - case '11': - cache[version] = navigator.userAgent.indexOf('Trident') !== -1; - break; - case '10': - cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1; - break; - case 'all': - cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1; - break; + if (version === 10) { + return isIE10; } - - //Set IE - cache.all = cache.all || Object.keys(cache).some(function (key) { - return cache[key]; - }); - return cache[version]; -}; + return isIE11 || isIE10; +} /** * Returns the offset parent of the given element @@ -935,6 +921,7 @@ function update() { // compute the popper offsets data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); + data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers @@ -1240,11 +1227,13 @@ function computeStyle(data, options) { position: popper.position }; - // floor sides to avoid blurry text + // Avoid blurry text by using full pixel integers. + // For pixel-perfect positioning, top/bottom prefers rounded + // values, while left/right prefers floored values. var offsets = { left: Math.floor(popper.left), - top: Math.floor(popper.top), - bottom: Math.floor(popper.bottom), + top: Math.round(popper.top), + bottom: Math.round(popper.bottom), right: Math.floor(popper.right) }; @@ -1800,7 +1789,27 @@ function preventOverflow(data, options) { boundariesElement = getOffsetParent(boundariesElement); } + // NOTE: DOM access here + // resets the popper's position so that the document size can be calculated excluding + // the size of the popper element itself + var transformProp = getSupportedPropertyName('transform'); + var popperStyles = data.instance.popper.style; // assignment to help minification + var top = popperStyles.top, + left = popperStyles.left, + transform = popperStyles[transformProp]; + + popperStyles.top = ''; + popperStyles.left = ''; + popperStyles[transformProp] = ''; + var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); + + // NOTE: DOM access here + // restores the original style properties after the offsets have been computed + popperStyles.top = top; + popperStyles.left = left; + popperStyles[transformProp] = transform; + options.boundaries = boundaries; var order = options.priority; diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js.map b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js.map index 29ed081e9..b63e8370e 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js.map +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.js.map @@ -1 +1 @@ -{"version":3,"file":"popper.js","sources":["../../src/utils/debounce.js","../../src/utils/isFunction.js","../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/runModifiers.js","../../src/methods/update.js","../../src/utils/isModifierEnabled.js","../../src/utils/getSupportedPropertyName.js","../../src/methods/destroy.js","../../src/utils/getWindow.js","../../src/utils/setupEventListeners.js","../../src/methods/enableEventListeners.js","../../src/utils/removeEventListeners.js","../../src/methods/disableEventListeners.js","../../src/utils/isNumeric.js","../../src/utils/setStyles.js","../../src/utils/setAttributes.js","../../src/modifiers/applyStyle.js","../../src/modifiers/computeStyle.js","../../src/utils/isModifierRequired.js","../../src/modifiers/arrow.js","../../src/utils/getOppositeVariation.js","../../src/methods/placements.js","../../src/utils/clockwise.js","../../src/modifiers/flip.js","../../src/modifiers/keepTogether.js","../../src/modifiers/offset.js","../../src/modifiers/preventOverflow.js","../../src/modifiers/shift.js","../../src/modifiers/hide.js","../../src/modifiers/inner.js","../../src/modifiers/index.js","../../src/methods/defaults.js","../../src/index.js"],"sourcesContent":["const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // floor sides to avoid blurry text\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.floor(popper.top),\n bottom: Math.floor(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side = ['left', 'top'].indexOf(placement) !== -1\n ? 'primary'\n : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["isBrowser","window","document","longerTimeoutBrowsers","timeoutDuration","i","length","navigator","userAgent","indexOf","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","isFunction","functionToCheck","getType","toString","call","getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","ownerDocument","overflow","overflowX","overflowY","test","cache","version","hasOwnProperty","appVersion","all","Object","keys","some","key","getOffsetParent","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isIE10","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","sort","a","b","area","filteredAreas","filter","computedPlacement","variation","split","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","runModifiers","modifiers","data","ends","modifiersToRun","undefined","slice","forEach","warn","enabled","update","isDestroyed","options","positionFixed","flip","originalPlacement","position","isCreated","onCreate","onUpdate","isModifierEnabled","modifierName","name","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","defaultView","attachToScrollParents","event","callback","scrollParents","isBody","target","addEventListener","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","setAttributes","attributes","setAttribute","applyStyle","instance","arrowElement","arrowStyles","applyStyleOnLoad","modifierOptions","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","floor","prefixedProperty","invertTop","invertLeft","arrow","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","round","getOppositeVariation","validPlacements","placements","clockwise","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","COUNTERCLOCKWISE","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","keepTogether","toValue","str","size","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","priority","escapeWithReference","shift","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","Popper","requestAnimationFrame","debounce","bind","Defaults","jquery","onLoad","Utils","global","PopperUtils"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"popper.js","sources":["../../src/utils/isBrowser.js","../../src/utils/debounce.js","../../src/utils/isFunction.js","../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/runModifiers.js","../../src/methods/update.js","../../src/utils/isModifierEnabled.js","../../src/utils/getSupportedPropertyName.js","../../src/methods/destroy.js","../../src/utils/getWindow.js","../../src/utils/setupEventListeners.js","../../src/methods/enableEventListeners.js","../../src/utils/removeEventListeners.js","../../src/methods/disableEventListeners.js","../../src/utils/isNumeric.js","../../src/utils/setStyles.js","../../src/utils/setAttributes.js","../../src/modifiers/applyStyle.js","../../src/modifiers/computeStyle.js","../../src/utils/isModifierRequired.js","../../src/modifiers/arrow.js","../../src/utils/getOppositeVariation.js","../../src/methods/placements.js","../../src/utils/clockwise.js","../../src/modifiers/flip.js","../../src/modifiers/keepTogether.js","../../src/modifiers/offset.js","../../src/modifiers/preventOverflow.js","../../src/modifiers/shift.js","../../src/modifiers/hide.js","../../src/modifiers/inner.js","../../src/modifiers/index.js","../../src/methods/defaults.js","../../src/index.js"],"sourcesContent":["export default typeof window !== 'undefined' && typeof document !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["window","document","longerTimeoutBrowsers","timeoutDuration","i","length","isBrowser","navigator","userAgent","indexOf","microtaskDebounce","fn","called","Promise","resolve","then","taskDebounce","scheduled","supportsMicroTasks","isFunction","functionToCheck","getType","toString","call","getStyleComputedProperty","element","property","nodeType","css","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","ownerDocument","overflow","overflowX","overflowY","test","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","isOffsetContainer","firstElementChild","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","getClientRect","offsets","width","height","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","getArea","computeAutoPlacement","placement","refRect","rects","sortedAreas","Object","keys","map","key","sort","a","b","area","filteredAreas","filter","computedPlacement","variation","split","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","prototype","findIndex","prop","value","cur","match","obj","runModifiers","modifiers","data","ends","modifiersToRun","undefined","slice","forEach","warn","enabled","update","isDestroyed","options","positionFixed","flip","originalPlacement","position","isCreated","onCreate","onUpdate","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","defaultView","attachToScrollParents","event","callback","scrollParents","isBody","target","addEventListener","passive","push","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","removeEventListeners","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","setAttributes","attributes","setAttribute","applyStyle","instance","arrowElement","arrowStyles","applyStyleOnLoad","modifierOptions","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","floor","round","prefixedProperty","invertTop","invertLeft","arrow","isModifierRequired","requestingName","requestedName","requesting","isRequired","requested","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","getOppositeVariation","validPlacements","placements","clockwise","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","COUNTERCLOCKWISE","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","keepTogether","toValue","str","size","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","preventOverflow","transformProp","popperStyles","transform","priority","escapeWithReference","shift","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","Popper","requestAnimationFrame","debounce","bind","Defaults","jquery","onLoad","Utils","global","PopperUtils"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,gBAAe,OAAOA,MAAP,KAAkB,WAAlB,IAAiC,OAAOC,QAAP,KAAoB,WAApE;;ACEA,IAAMC,wBAAwB,CAAC,MAAD,EAAS,SAAT,EAAoB,SAApB,CAA9B;AACA,IAAIC,kBAAkB,CAAtB;AACA,KAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIF,sBAAsBG,MAA1C,EAAkDD,KAAK,CAAvD,EAA0D;MACpDE,aAAaC,UAAUC,SAAV,CAAoBC,OAApB,CAA4BP,sBAAsBE,CAAtB,CAA5B,KAAyD,CAA1E,EAA6E;sBACzD,CAAlB;;;;;AAKJ,AAAO,SAASM,iBAAT,CAA2BC,EAA3B,EAA+B;MAChCC,SAAS,KAAb;SACO,YAAM;QACPA,MAAJ,EAAY;;;aAGH,IAAT;WACOC,OAAP,CAAeC,OAAf,GAAyBC,IAAzB,CAA8B,YAAM;eACzB,KAAT;;KADF;GALF;;;AAYF,AAAO,SAASC,YAAT,CAAsBL,EAAtB,EAA0B;MAC3BM,YAAY,KAAhB;SACO,YAAM;QACP,CAACA,SAAL,EAAgB;kBACF,IAAZ;iBACW,YAAM;oBACH,KAAZ;;OADF,EAGGd,eAHH;;GAHJ;;;AAWF,IAAMe,qBAAqBZ,aAAaN,OAAOa,OAA/C;;;;;;;;;;;AAYA,eAAgBK,qBACZR,iBADY,GAEZM,YAFJ;;AClDA;;;;;;;AAOA,AAAe,SAASG,UAAT,CAAoBC,eAApB,EAAqC;MAC5CC,UAAU,EAAhB;SAEED,mBACAC,QAAQC,QAAR,CAAiBC,IAAjB,CAAsBH,eAAtB,MAA2C,mBAF7C;;;ACTF;;;;;;;AAOA,AAAe,SAASI,wBAAT,CAAkCC,OAAlC,EAA2CC,QAA3C,EAAqD;MAC9DD,QAAQE,QAAR,KAAqB,CAAzB,EAA4B;WACnB,EAAP;;;MAGIC,MAAMC,iBAAiBJ,OAAjB,EAA0B,IAA1B,CAAZ;SACOC,WAAWE,IAAIF,QAAJ,CAAX,GAA2BE,GAAlC;;;ACbF;;;;;;;AAOA,AAAe,SAASE,aAAT,CAAuBL,OAAvB,EAAgC;MACzCA,QAAQM,QAAR,KAAqB,MAAzB,EAAiC;WACxBN,OAAP;;SAEKA,QAAQO,UAAR,IAAsBP,QAAQQ,IAArC;;;ACRF;;;;;;;AAOA,AAAe,SAASC,eAAT,CAAyBT,OAAzB,EAAkC;;MAE3C,CAACA,OAAL,EAAc;WACLxB,SAASkC,IAAhB;;;UAGMV,QAAQM,QAAhB;SACO,MAAL;SACK,MAAL;aACSN,QAAQW,aAAR,CAAsBD,IAA7B;SACG,WAAL;aACSV,QAAQU,IAAf;;;;;8BAIuCX,yBAAyBC,OAAzB,CAfI;MAevCY,QAfuC,yBAevCA,QAfuC;MAe7BC,SAf6B,yBAe7BA,SAf6B;MAelBC,SAfkB,yBAelBA,SAfkB;;MAgB3C,wBAAwBC,IAAxB,CAA6BH,WAAWE,SAAX,GAAuBD,SAApD,CAAJ,EAAoE;WAC3Db,OAAP;;;SAGKS,gBAAgBJ,cAAcL,OAAd,CAAhB,CAAP;;;AC5BF,IAAMgB,SAASnC,aAAa,CAAC,EAAEN,OAAO0C,oBAAP,IAA+BzC,SAAS0C,YAA1C,CAA7B;AACA,IAAMC,SAAStC,aAAa,UAAUkC,IAAV,CAAejC,UAAUC,SAAzB,CAA5B;;;;;;;;;AASA,AAAe,SAASqC,IAAT,CAAcC,OAAd,EAAuB;MAChCA,YAAY,EAAhB,EAAoB;WACXL,MAAP;;MAEEK,YAAY,EAAhB,EAAoB;WACXF,MAAP;;SAEKH,UAAUG,MAAjB;;;ACjBF;;;;;;;AAOA,AAAe,SAASG,eAAT,CAAyBtB,OAAzB,EAAkC;MAC3C,CAACA,OAAL,EAAc;WACLxB,SAAS+C,eAAhB;;;MAGIC,iBAAiBJ,KAAK,EAAL,IAAW5C,SAASkC,IAApB,GAA2B,IAAlD;;;MAGIe,eAAezB,QAAQyB,YAA3B;;SAEOA,iBAAiBD,cAAjB,IAAmCxB,QAAQ0B,kBAAlD,EAAsE;mBACrD,CAAC1B,UAAUA,QAAQ0B,kBAAnB,EAAuCD,YAAtD;;;MAGInB,WAAWmB,gBAAgBA,aAAanB,QAA9C;;MAEI,CAACA,QAAD,IAAaA,aAAa,MAA1B,IAAoCA,aAAa,MAArD,EAA6D;WACpDN,UAAUA,QAAQW,aAAR,CAAsBY,eAAhC,GAAkD/C,SAAS+C,eAAlE;;;;;MAMA,CAAC,IAAD,EAAO,OAAP,EAAgBvC,OAAhB,CAAwByC,aAAanB,QAArC,MAAmD,CAAC,CAApD,IACAP,yBAAyB0B,YAAzB,EAAuC,UAAvC,MAAuD,QAFzD,EAGE;WACOH,gBAAgBG,YAAhB,CAAP;;;SAGKA,YAAP;;;ACpCa,SAASE,iBAAT,CAA2B3B,OAA3B,EAAoC;MACzCM,QADyC,GAC5BN,OAD4B,CACzCM,QADyC;;MAE7CA,aAAa,MAAjB,EAAyB;WAChB,KAAP;;SAGAA,aAAa,MAAb,IAAuBgB,gBAAgBtB,QAAQ4B,iBAAxB,MAA+C5B,OADxE;;;ACPF;;;;;;;AAOA,AAAe,SAAS6B,OAAT,CAAiBC,IAAjB,EAAuB;MAChCA,KAAKvB,UAAL,KAAoB,IAAxB,EAA8B;WACrBsB,QAAQC,KAAKvB,UAAb,CAAP;;;SAGKuB,IAAP;;;ACRF;;;;;;;;AAQA,AAAe,SAASC,sBAAT,CAAgCC,QAAhC,EAA0CC,QAA1C,EAAoD;;MAE7D,CAACD,QAAD,IAAa,CAACA,SAAS9B,QAAvB,IAAmC,CAAC+B,QAApC,IAAgD,CAACA,SAAS/B,QAA9D,EAAwE;WAC/D1B,SAAS+C,eAAhB;;;;MAIIW,QACJF,SAASG,uBAAT,CAAiCF,QAAjC,IACAG,KAAKC,2BAFP;MAGMC,QAAQJ,QAAQF,QAAR,GAAmBC,QAAjC;MACMM,MAAML,QAAQD,QAAR,GAAmBD,QAA/B;;;MAGMQ,QAAQhE,SAASiE,WAAT,EAAd;QACMC,QAAN,CAAeJ,KAAf,EAAsB,CAAtB;QACMK,MAAN,CAAaJ,GAAb,EAAkB,CAAlB;MACQK,uBAjByD,GAiB7BJ,KAjB6B,CAiBzDI,uBAjByD;;;;MAqB9DZ,aAAaY,uBAAb,IACCX,aAAaW,uBADf,IAEAN,MAAMO,QAAN,CAAeN,GAAf,CAHF,EAIE;QACIZ,kBAAkBiB,uBAAlB,CAAJ,EAAgD;aACvCA,uBAAP;;;WAGKtB,gBAAgBsB,uBAAhB,CAAP;;;;MAIIE,eAAejB,QAAQG,QAAR,CAArB;MACIc,aAAatC,IAAjB,EAAuB;WACduB,uBAAuBe,aAAatC,IAApC,EAA0CyB,QAA1C,CAAP;GADF,MAEO;WACEF,uBAAuBC,QAAvB,EAAiCH,QAAQI,QAAR,EAAkBzB,IAAnD,CAAP;;;;ACjDJ;;;;;;;;AAQA,AAAe,SAASuC,SAAT,CAAmB/C,OAAnB,EAA0C;MAAdgD,IAAc,uEAAP,KAAO;;MACjDC,YAAYD,SAAS,KAAT,GAAiB,WAAjB,GAA+B,YAAjD;MACM1C,WAAWN,QAAQM,QAAzB;;MAEIA,aAAa,MAAb,IAAuBA,aAAa,MAAxC,EAAgD;QACxC4C,OAAOlD,QAAQW,aAAR,CAAsBY,eAAnC;QACM4B,mBAAmBnD,QAAQW,aAAR,CAAsBwC,gBAAtB,IAA0CD,IAAnE;WACOC,iBAAiBF,SAAjB,CAAP;;;SAGKjD,QAAQiD,SAAR,CAAP;;;AChBF;;;;;;;;;AASA,AAAe,SAASG,aAAT,CAAuBC,IAAvB,EAA6BrD,OAA7B,EAAwD;MAAlBsD,QAAkB,uEAAP,KAAO;;MAC/DC,YAAYR,UAAU/C,OAAV,EAAmB,KAAnB,CAAlB;MACMwD,aAAaT,UAAU/C,OAAV,EAAmB,MAAnB,CAAnB;MACMyD,WAAWH,WAAW,CAAC,CAAZ,GAAgB,CAAjC;OACKI,GAAL,IAAYH,YAAYE,QAAxB;OACKE,MAAL,IAAeJ,YAAYE,QAA3B;OACKG,IAAL,IAAaJ,aAAaC,QAA1B;OACKI,KAAL,IAAcL,aAAaC,QAA3B;SACOJ,IAAP;;;ACnBF;;;;;;;;;;AAUA,AAAe,SAASS,cAAT,CAAwBC,MAAxB,EAAgCC,IAAhC,EAAsC;MAC7CC,QAAQD,SAAS,GAAT,GAAe,MAAf,GAAwB,KAAtC;MACME,QAAQD,UAAU,MAAV,GAAmB,OAAnB,GAA6B,QAA3C;;SAGEE,WAAWJ,kBAAgBE,KAAhB,WAAX,EAA0C,EAA1C,IACAE,WAAWJ,kBAAgBG,KAAhB,WAAX,EAA0C,EAA1C,CAFF;;;ACZF,SAASE,OAAT,CAAiBJ,IAAjB,EAAuBtD,IAAvB,EAA6BwC,IAA7B,EAAmCmB,aAAnC,EAAkD;SACzCC,KAAKC,GAAL,CACL7D,gBAAcsD,IAAd,CADK,EAELtD,gBAAcsD,IAAd,CAFK,EAGLd,gBAAcc,IAAd,CAHK,EAILd,gBAAcc,IAAd,CAJK,EAKLd,gBAAcc,IAAd,CALK,EAML5C,KAAK,EAAL,IACI8B,gBAAcc,IAAd,IACAK,0BAAuBL,SAAS,QAAT,GAAoB,KAApB,GAA4B,MAAnD,EADA,GAEAK,0BAAuBL,SAAS,QAAT,GAAoB,QAApB,GAA+B,OAAtD,EAHJ,GAII,CAVC,CAAP;;;AAcF,AAAe,SAASQ,cAAT,GAA0B;MACjC9D,OAAOlC,SAASkC,IAAtB;MACMwC,OAAO1E,SAAS+C,eAAtB;MACM8C,gBAAgBjD,KAAK,EAAL,KAAYhB,iBAAiB8C,IAAjB,CAAlC;;SAEO;YACGkB,QAAQ,QAAR,EAAkB1D,IAAlB,EAAwBwC,IAAxB,EAA8BmB,aAA9B,CADH;WAEED,QAAQ,OAAR,EAAiB1D,IAAjB,EAAuBwC,IAAvB,EAA6BmB,aAA7B;GAFT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBF;;;;;;;AAOA,AAAe,SAASI,aAAT,CAAuBC,OAAvB,EAAgC;sBAExCA,OADL;WAESA,QAAQd,IAAR,GAAec,QAAQC,KAFhC;YAGUD,QAAQhB,GAAR,GAAcgB,QAAQE;;;;ACJlC;;;;;;;AAOA,AAAe,SAASC,qBAAT,CAA+B7E,OAA/B,EAAwC;MACjDqD,OAAO,EAAX;;;;;MAKI;QACEjC,KAAK,EAAL,CAAJ,EAAc;aACLpB,QAAQ6E,qBAAR,EAAP;UACMtB,YAAYR,UAAU/C,OAAV,EAAmB,KAAnB,CAAlB;UACMwD,aAAaT,UAAU/C,OAAV,EAAmB,MAAnB,CAAnB;WACK0D,GAAL,IAAYH,SAAZ;WACKK,IAAL,IAAaJ,UAAb;WACKG,MAAL,IAAeJ,SAAf;WACKM,KAAL,IAAcL,UAAd;KAPF,MASK;aACIxD,QAAQ6E,qBAAR,EAAP;;GAXJ,CAcA,OAAMC,CAAN,EAAQ;;MAEFC,SAAS;UACP1B,KAAKO,IADE;SAERP,KAAKK,GAFG;WAGNL,KAAKQ,KAAL,GAAaR,KAAKO,IAHZ;YAILP,KAAKM,MAAL,GAAcN,KAAKK;GAJ7B;;;MAQMsB,QAAQhF,QAAQM,QAAR,KAAqB,MAArB,GAA8BkE,gBAA9B,GAAiD,EAA/D;MACMG,QACJK,MAAML,KAAN,IAAe3E,QAAQiF,WAAvB,IAAsCF,OAAOlB,KAAP,GAAekB,OAAOnB,IAD9D;MAEMgB,SACJI,MAAMJ,MAAN,IAAgB5E,QAAQkF,YAAxB,IAAwCH,OAAOpB,MAAP,GAAgBoB,OAAOrB,GADjE;;MAGIyB,iBAAiBnF,QAAQoF,WAAR,GAAsBT,KAA3C;MACIU,gBAAgBrF,QAAQsF,YAAR,GAAuBV,MAA3C;;;;MAIIO,kBAAkBE,aAAtB,EAAqC;QAC7BtB,SAAShE,yBAAyBC,OAAzB,CAAf;sBACkB8D,eAAeC,MAAf,EAAuB,GAAvB,CAAlB;qBACiBD,eAAeC,MAAf,EAAuB,GAAvB,CAAjB;;WAEOY,KAAP,IAAgBQ,cAAhB;WACOP,MAAP,IAAiBS,aAAjB;;;SAGKZ,cAAcM,MAAd,CAAP;;;ACzDa,SAASQ,oCAAT,CAA8CC,QAA9C,EAAwDC,MAAxD,EAAuF;MAAvBC,aAAuB,uEAAP,KAAO;;MAC9FvE,SAASwE,KAAQ,EAAR,CAAf;MACMC,SAASH,OAAOnF,QAAP,KAAoB,MAAnC;MACMuF,eAAehB,sBAAsBW,QAAtB,CAArB;MACMM,aAAajB,sBAAsBY,MAAtB,CAAnB;MACMM,eAAetF,gBAAgB+E,QAAhB,CAArB;;MAEMzB,SAAShE,yBAAyB0F,MAAzB,CAAf;MACMO,iBAAiB7B,WAAWJ,OAAOiC,cAAlB,EAAkC,EAAlC,CAAvB;MACMC,kBAAkB9B,WAAWJ,OAAOkC,eAAlB,EAAmC,EAAnC,CAAxB;;;MAGGP,iBAAiBD,OAAOnF,QAAP,KAAoB,MAAxC,EAAgD;eACnCoD,GAAX,GAAiBY,KAAKC,GAAL,CAASuB,WAAWpC,GAApB,EAAyB,CAAzB,CAAjB;eACWE,IAAX,GAAkBU,KAAKC,GAAL,CAASuB,WAAWlC,IAApB,EAA0B,CAA1B,CAAlB;;MAEEc,UAAUD,cAAc;SACrBoB,aAAanC,GAAb,GAAmBoC,WAAWpC,GAA9B,GAAoCsC,cADf;UAEpBH,aAAajC,IAAb,GAAoBkC,WAAWlC,IAA/B,GAAsCqC,eAFlB;WAGnBJ,aAAalB,KAHM;YAIlBkB,aAAajB;GAJT,CAAd;UAMQsB,SAAR,GAAoB,CAApB;UACQC,UAAR,GAAqB,CAArB;;;;;;MAMI,CAAChF,MAAD,IAAWyE,MAAf,EAAuB;QACfM,YAAY/B,WAAWJ,OAAOmC,SAAlB,EAA6B,EAA7B,CAAlB;QACMC,aAAahC,WAAWJ,OAAOoC,UAAlB,EAA8B,EAA9B,CAAnB;;YAEQzC,GAAR,IAAesC,iBAAiBE,SAAhC;YACQvC,MAAR,IAAkBqC,iBAAiBE,SAAnC;YACQtC,IAAR,IAAgBqC,kBAAkBE,UAAlC;YACQtC,KAAR,IAAiBoC,kBAAkBE,UAAnC;;;YAGQD,SAAR,GAAoBA,SAApB;YACQC,UAAR,GAAqBA,UAArB;;;MAIAhF,UAAU,CAACuE,aAAX,GACID,OAAO5C,QAAP,CAAgBkD,YAAhB,CADJ,GAEIN,WAAWM,YAAX,IAA2BA,aAAazF,QAAb,KAA0B,MAH3D,EAIE;cACU8C,cAAcsB,OAAd,EAAuBe,MAAvB,CAAV;;;SAGKf,OAAP;;;ACtDa,SAAS0B,6CAAT,CAAuDpG,OAAvD,EAAuF;MAAvBqG,aAAuB,uEAAP,KAAO;;MAC9FnD,OAAOlD,QAAQW,aAAR,CAAsBY,eAAnC;MACM+E,iBAAiBf,qCAAqCvF,OAArC,EAA8CkD,IAA9C,CAAvB;MACMyB,QAAQL,KAAKC,GAAL,CAASrB,KAAK+B,WAAd,EAA2B1G,OAAOgI,UAAP,IAAqB,CAAhD,CAAd;MACM3B,SAASN,KAAKC,GAAL,CAASrB,KAAKgC,YAAd,EAA4B3G,OAAOiI,WAAP,IAAsB,CAAlD,CAAf;;MAEMjD,YAAY,CAAC8C,aAAD,GAAiBtD,UAAUG,IAAV,CAAjB,GAAmC,CAArD;MACMM,aAAa,CAAC6C,aAAD,GAAiBtD,UAAUG,IAAV,EAAgB,MAAhB,CAAjB,GAA2C,CAA9D;;MAEMuD,SAAS;SACRlD,YAAY+C,eAAe5C,GAA3B,GAAiC4C,eAAeJ,SADxC;UAEP1C,aAAa8C,eAAe1C,IAA5B,GAAmC0C,eAAeH,UAF3C;gBAAA;;GAAf;;SAOO1B,cAAcgC,MAAd,CAAP;;;ACjBF;;;;;;;;AAQA,AAAe,SAASC,OAAT,CAAiB1G,OAAjB,EAA0B;MACjCM,WAAWN,QAAQM,QAAzB;MACIA,aAAa,MAAb,IAAuBA,aAAa,MAAxC,EAAgD;WACvC,KAAP;;MAEEP,yBAAyBC,OAAzB,EAAkC,UAAlC,MAAkD,OAAtD,EAA+D;WACtD,IAAP;;SAEK0G,QAAQrG,cAAcL,OAAd,CAAR,CAAP;;;ACjBF;;;;;;;;AAQA,AAAe,SAAS2G,4BAAT,CAAsC3G,OAAtC,EAA+C;;MAEvD,CAACA,OAAD,IAAY,CAACA,QAAQ4G,aAArB,IAAsCxF,MAA1C,EAAkD;WAC1C5C,SAAS+C,eAAhB;;MAEEsF,KAAK7G,QAAQ4G,aAAjB;SACOC,MAAM9G,yBAAyB8G,EAAzB,EAA6B,WAA7B,MAA8C,MAA3D,EAAmE;SAC5DA,GAAGD,aAAR;;SAEKC,MAAMrI,SAAS+C,eAAtB;;;ACVF;;;;;;;;;;;AAWA,AAAe,SAASuF,aAAT,CACbC,MADa,EAEbC,SAFa,EAGbC,OAHa,EAIbC,iBAJa,EAMb;MADAxB,aACA,uEADgB,KAChB;;;;MAGIyB,aAAa,EAAEzD,KAAK,CAAP,EAAUE,MAAM,CAAhB,EAAjB;MACMnC,eAAeiE,gBAAgBiB,6BAA6BI,MAA7B,CAAhB,GAAuDhF,uBAAuBgF,MAAvB,EAA+BC,SAA/B,CAA5E;;;MAGIE,sBAAsB,UAA1B,EAAuC;iBACxBd,8CAA8C3E,YAA9C,EAA4DiE,aAA5D,CAAb;GADF,MAIK;;QAEC0B,uBAAJ;QACIF,sBAAsB,cAA1B,EAA0C;uBACvBzG,gBAAgBJ,cAAc2G,SAAd,CAAhB,CAAjB;UACII,eAAe9G,QAAf,KAA4B,MAAhC,EAAwC;yBACrByG,OAAOpG,aAAP,CAAqBY,eAAtC;;KAHJ,MAKO,IAAI2F,sBAAsB,QAA1B,EAAoC;uBACxBH,OAAOpG,aAAP,CAAqBY,eAAtC;KADK,MAEA;uBACY2F,iBAAjB;;;QAGIxC,UAAUa,qCACd6B,cADc,EAEd3F,YAFc,EAGdiE,aAHc,CAAhB;;;QAOI0B,eAAe9G,QAAf,KAA4B,MAA5B,IAAsC,CAACoG,QAAQjF,YAAR,CAA3C,EAAkE;4BACtC+C,gBADsC;UACxDI,MADwD,mBACxDA,MADwD;UAChDD,KADgD,mBAChDA,KADgD;;iBAErDjB,GAAX,IAAkBgB,QAAQhB,GAAR,GAAcgB,QAAQwB,SAAxC;iBACWvC,MAAX,GAAoBiB,SAASF,QAAQhB,GAArC;iBACWE,IAAX,IAAmBc,QAAQd,IAAR,GAAec,QAAQyB,UAA1C;iBACWtC,KAAX,GAAmBc,QAAQD,QAAQd,IAAnC;KALF,MAMO;;mBAEQc,OAAb;;;;;aAKOd,IAAX,IAAmBqD,OAAnB;aACWvD,GAAX,IAAkBuD,OAAlB;aACWpD,KAAX,IAAoBoD,OAApB;aACWtD,MAAX,IAAqBsD,OAArB;;SAEOE,UAAP;;;AC1EF,SAASE,OAAT,OAAoC;MAAjB1C,KAAiB,QAAjBA,KAAiB;MAAVC,MAAU,QAAVA,MAAU;;SAC3BD,QAAQC,MAAf;;;;;;;;;;;;AAYF,AAAe,SAAS0C,oBAAT,CACbC,SADa,EAEbC,OAFa,EAGbT,MAHa,EAIbC,SAJa,EAKbE,iBALa,EAOb;MADAD,OACA,uEADU,CACV;;MACIM,UAAUvI,OAAV,CAAkB,MAAlB,MAA8B,CAAC,CAAnC,EAAsC;WAC7BuI,SAAP;;;MAGIJ,aAAaL,cACjBC,MADiB,EAEjBC,SAFiB,EAGjBC,OAHiB,EAIjBC,iBAJiB,CAAnB;;MAOMO,QAAQ;SACP;aACIN,WAAWxC,KADf;cAEK6C,QAAQ9D,GAAR,GAAcyD,WAAWzD;KAHvB;WAKL;aACEyD,WAAWtD,KAAX,GAAmB2D,QAAQ3D,KAD7B;cAEGsD,WAAWvC;KAPT;YASJ;aACCuC,WAAWxC,KADZ;cAEEwC,WAAWxD,MAAX,GAAoB6D,QAAQ7D;KAX1B;UAaN;aACG6D,QAAQ5D,IAAR,GAAeuD,WAAWvD,IAD7B;cAEIuD,WAAWvC;;GAfvB;;MAmBM8C,cAAcC,OAAOC,IAAP,CAAYH,KAAZ,EACjBI,GADiB,CACb;;;OAEAJ,MAAMK,GAAN,CAFA;YAGGT,QAAQI,MAAMK,GAAN,CAAR;;GAJU,EAMjBC,IANiB,CAMZ,UAACC,CAAD,EAAIC,CAAJ;WAAUA,EAAEC,IAAF,GAASF,EAAEE,IAArB;GANY,CAApB;;MAQMC,gBAAgBT,YAAYU,MAAZ,CACpB;QAAGzD,KAAH,SAAGA,KAAH;QAAUC,MAAV,SAAUA,MAAV;WACED,SAASoC,OAAO9B,WAAhB,IAA+BL,UAAUmC,OAAO7B,YADlD;GADoB,CAAtB;;MAKMmD,oBAAoBF,cAAcvJ,MAAd,GAAuB,CAAvB,GACtBuJ,cAAc,CAAd,EAAiBL,GADK,GAEtBJ,YAAY,CAAZ,EAAeI,GAFnB;;MAIMQ,YAAYf,UAAUgB,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAlB;;SAEOF,qBAAqBC,kBAAgBA,SAAhB,GAA8B,EAAnD,CAAP;;;ACpEF;;;;;;;;;;AAUA,AAAe,SAASE,mBAAT,CAA6BC,KAA7B,EAAoC1B,MAApC,EAA4CC,SAA5C,EAA6E;MAAtBtB,aAAsB,uEAAN,IAAM;;MACpFgD,qBAAqBhD,gBAAgBiB,6BAA6BI,MAA7B,CAAhB,GAAuDhF,uBAAuBgF,MAAvB,EAA+BC,SAA/B,CAAlF;SACOzB,qCAAqCyB,SAArC,EAAgD0B,kBAAhD,EAAoEhD,aAApE,CAAP;;;AChBF;;;;;;;AAOA,AAAe,SAASiD,aAAT,CAAuB3I,OAAvB,EAAgC;MACvC+D,SAAS3D,iBAAiBJ,OAAjB,CAAf;MACM4I,IAAIzE,WAAWJ,OAAOmC,SAAlB,IAA+B/B,WAAWJ,OAAO8E,YAAlB,CAAzC;MACMC,IAAI3E,WAAWJ,OAAOoC,UAAlB,IAAgChC,WAAWJ,OAAOgF,WAAlB,CAA1C;MACMhE,SAAS;WACN/E,QAAQoF,WAAR,GAAsB0D,CADhB;YAEL9I,QAAQsF,YAAR,GAAuBsD;GAFjC;SAIO7D,MAAP;;;ACfF;;;;;;;AAOA,AAAe,SAASiE,oBAAT,CAA8BzB,SAA9B,EAAyC;MAChD0B,OAAO,EAAErF,MAAM,OAAR,EAAiBC,OAAO,MAAxB,EAAgCF,QAAQ,KAAxC,EAA+CD,KAAK,QAApD,EAAb;SACO6D,UAAU2B,OAAV,CAAkB,wBAAlB,EAA4C;WAAWD,KAAKE,OAAL,CAAX;GAA5C,CAAP;;;ACNF;;;;;;;;;;AAUA,AAAe,SAASC,gBAAT,CAA0BrC,MAA1B,EAAkCsC,gBAAlC,EAAoD9B,SAApD,EAA+D;cAChEA,UAAUgB,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAZ;;;MAGMe,aAAaX,cAAc5B,MAAd,CAAnB;;;MAGMwC,gBAAgB;WACbD,WAAW3E,KADE;YAEZ2E,WAAW1E;GAFrB;;;MAMM4E,UAAU,CAAC,OAAD,EAAU,MAAV,EAAkBxK,OAAlB,CAA0BuI,SAA1B,MAAyC,CAAC,CAA1D;MACMkC,WAAWD,UAAU,KAAV,GAAkB,MAAnC;MACME,gBAAgBF,UAAU,MAAV,GAAmB,KAAzC;MACMG,cAAcH,UAAU,QAAV,GAAqB,OAAzC;MACMI,uBAAuB,CAACJ,OAAD,GAAW,QAAX,GAAsB,OAAnD;;gBAEcC,QAAd,IACEJ,iBAAiBI,QAAjB,IACAJ,iBAAiBM,WAAjB,IAAgC,CADhC,GAEAL,WAAWK,WAAX,IAA0B,CAH5B;MAIIpC,cAAcmC,aAAlB,EAAiC;kBACjBA,aAAd,IACEL,iBAAiBK,aAAjB,IAAkCJ,WAAWM,oBAAX,CADpC;GADF,MAGO;kBACSF,aAAd,IACEL,iBAAiBL,qBAAqBU,aAArB,CAAjB,CADF;;;SAIKH,aAAP;;;AC5CF;;;;;;;;;AASA,AAAe,SAASM,IAAT,CAAcC,GAAd,EAAmBC,KAAnB,EAA0B;;MAEnCC,MAAMC,SAAN,CAAgBJ,IAApB,EAA0B;WACjBC,IAAID,IAAJ,CAASE,KAAT,CAAP;;;;SAIKD,IAAI1B,MAAJ,CAAW2B,KAAX,EAAkB,CAAlB,CAAP;;;ACdF;;;;;;;;;AASA,AAAe,SAASG,SAAT,CAAmBJ,GAAnB,EAAwBK,IAAxB,EAA8BC,KAA9B,EAAqC;;MAE9CJ,MAAMC,SAAN,CAAgBC,SAApB,EAA+B;WACtBJ,IAAII,SAAJ,CAAc;aAAOG,IAAIF,IAAJ,MAAcC,KAArB;KAAd,CAAP;;;;MAIIE,QAAQT,KAAKC,GAAL,EAAU;WAAOS,IAAIJ,IAAJ,MAAcC,KAArB;GAAV,CAAd;SACON,IAAI9K,OAAJ,CAAYsL,KAAZ,CAAP;;;ACfF;;;;;;;;;;AAUA,AAAe,SAASE,YAAT,CAAsBC,SAAtB,EAAiCC,IAAjC,EAAuCC,IAAvC,EAA6C;MACpDC,iBAAiBD,SAASE,SAAT,GACnBJ,SADmB,GAEnBA,UAAUK,KAAV,CAAgB,CAAhB,EAAmBZ,UAAUO,SAAV,EAAqB,MAArB,EAA6BE,IAA7B,CAAnB,CAFJ;;iBAIeI,OAAf,CAAuB,oBAAY;QAC7BtH,SAAS,UAAT,CAAJ,EAA0B;;cAChBuH,IAAR,CAAa,uDAAb;;QAEI9L,KAAKuE,SAAS,UAAT,KAAwBA,SAASvE,EAA5C,CAJiC;QAK7BuE,SAASwH,OAAT,IAAoBvL,WAAWR,EAAX,CAAxB,EAAwC;;;;WAIjCwF,OAAL,CAAaqC,MAAb,GAAsBtC,cAAciG,KAAKhG,OAAL,CAAaqC,MAA3B,CAAtB;WACKrC,OAAL,CAAasC,SAAb,GAAyBvC,cAAciG,KAAKhG,OAAL,CAAasC,SAA3B,CAAzB;;aAEO9H,GAAGwL,IAAH,EAASjH,QAAT,CAAP;;GAZJ;;SAgBOiH,IAAP;;;AC9BF;;;;;;;AAOA,AAAe,SAASQ,MAAT,GAAkB;;MAE3B,KAAKzC,KAAL,CAAW0C,WAAf,EAA4B;;;;MAIxBT,OAAO;cACC,IADD;YAED,EAFC;iBAGI,EAHJ;gBAIG,EAJH;aAKA,KALA;aAMA;GANX;;;OAUKhG,OAAL,CAAasC,SAAb,GAAyBwB,oBACvB,KAAKC,KADkB,EAEvB,KAAK1B,MAFkB,EAGvB,KAAKC,SAHkB,EAIvB,KAAKoE,OAAL,CAAaC,aAJU,CAAzB;;;;;OAUK9D,SAAL,GAAiBD,qBACf,KAAK8D,OAAL,CAAa7D,SADE,EAEfmD,KAAKhG,OAAL,CAAasC,SAFE,EAGf,KAAKD,MAHU,EAIf,KAAKC,SAJU,EAKf,KAAKoE,OAAL,CAAaX,SAAb,CAAuBa,IAAvB,CAA4BpE,iBALb,EAMf,KAAKkE,OAAL,CAAaX,SAAb,CAAuBa,IAAvB,CAA4BrE,OANb,CAAjB;;;OAUKsE,iBAAL,GAAyBb,KAAKnD,SAA9B;;OAEK8D,aAAL,GAAqB,KAAKD,OAAL,CAAaC,aAAlC;;;OAGK3G,OAAL,CAAaqC,MAAb,GAAsBqC,iBACpB,KAAKrC,MADe,EAEpB2D,KAAKhG,OAAL,CAAasC,SAFO,EAGpB0D,KAAKnD,SAHe,CAAtB;;OAMK7C,OAAL,CAAaqC,MAAb,CAAoByE,QAApB,GAA+B,KAAKJ,OAAL,CAAaC,aAAb,GAC3B,OAD2B,GAE3B,UAFJ;;;SAKOb,aAAa,KAAKC,SAAlB,EAA6BC,IAA7B,CAAP;;;;MAII,CAAC,KAAKjC,KAAL,CAAWgD,SAAhB,EAA2B;SACpBhD,KAAL,CAAWgD,SAAX,GAAuB,IAAvB;SACKL,OAAL,CAAaM,QAAb,CAAsBhB,IAAtB;GAFF,MAGO;SACAU,OAAL,CAAaO,QAAb,CAAsBjB,IAAtB;;;;ACxEJ;;;;;;AAMA,AAAe,SAASkB,iBAAT,CAA2BnB,SAA3B,EAAsCoB,YAAtC,EAAoD;SAC1DpB,UAAUqB,IAAV,CACL;QAAGC,IAAH,QAAGA,IAAH;QAASd,OAAT,QAASA,OAAT;WAAuBA,WAAWc,SAASF,YAA3C;GADK,CAAP;;;ACPF;;;;;;;AAOA,AAAe,SAASG,wBAAT,CAAkC/L,QAAlC,EAA4C;MACnDgM,WAAW,CAAC,KAAD,EAAQ,IAAR,EAAc,QAAd,EAAwB,KAAxB,EAA+B,GAA/B,CAAjB;MACMC,YAAYjM,SAASkM,MAAT,CAAgB,CAAhB,EAAmBC,WAAnB,KAAmCnM,SAAS6K,KAAT,CAAe,CAAf,CAArD;;OAEK,IAAInM,IAAI,CAAb,EAAgBA,IAAIsN,SAASrN,MAA7B,EAAqCD,GAArC,EAA0C;QAClC0N,SAASJ,SAAStN,CAAT,CAAf;QACM2N,UAAUD,cAAYA,MAAZ,GAAqBH,SAArB,GAAmCjM,QAAnD;QACI,OAAOzB,SAASkC,IAAT,CAAc6L,KAAd,CAAoBD,OAApB,CAAP,KAAwC,WAA5C,EAAyD;aAChDA,OAAP;;;SAGG,IAAP;;;ACfF;;;;;AAKA,AAAe,SAASE,OAAT,GAAmB;OAC3B/D,KAAL,CAAW0C,WAAX,GAAyB,IAAzB;;;MAGIS,kBAAkB,KAAKnB,SAAvB,EAAkC,YAAlC,CAAJ,EAAqD;SAC9C1D,MAAL,CAAY0F,eAAZ,CAA4B,aAA5B;SACK1F,MAAL,CAAYwF,KAAZ,CAAkBf,QAAlB,GAA6B,EAA7B;SACKzE,MAAL,CAAYwF,KAAZ,CAAkB7I,GAAlB,GAAwB,EAAxB;SACKqD,MAAL,CAAYwF,KAAZ,CAAkB3I,IAAlB,GAAyB,EAAzB;SACKmD,MAAL,CAAYwF,KAAZ,CAAkB1I,KAAlB,GAA0B,EAA1B;SACKkD,MAAL,CAAYwF,KAAZ,CAAkB5I,MAAlB,GAA2B,EAA3B;SACKoD,MAAL,CAAYwF,KAAZ,CAAkBG,UAAlB,GAA+B,EAA/B;SACK3F,MAAL,CAAYwF,KAAZ,CAAkBP,yBAAyB,WAAzB,CAAlB,IAA2D,EAA3D;;;OAGGW,qBAAL;;;;MAII,KAAKvB,OAAL,CAAawB,eAAjB,EAAkC;SAC3B7F,MAAL,CAAYxG,UAAZ,CAAuBsM,WAAvB,CAAmC,KAAK9F,MAAxC;;SAEK,IAAP;;;AC9BF;;;;;AAKA,AAAe,SAAS+F,SAAT,CAAmB9M,OAAnB,EAA4B;MACnCW,gBAAgBX,QAAQW,aAA9B;SACOA,gBAAgBA,cAAcoM,WAA9B,GAA4CxO,MAAnD;;;ACJF,SAASyO,qBAAT,CAA+BjH,YAA/B,EAA6CkH,KAA7C,EAAoDC,QAApD,EAA8DC,aAA9D,EAA6E;MACrEC,SAASrH,aAAazF,QAAb,KAA0B,MAAzC;MACM+M,SAASD,SAASrH,aAAapF,aAAb,CAA2BoM,WAApC,GAAkDhH,YAAjE;SACOuH,gBAAP,CAAwBL,KAAxB,EAA+BC,QAA/B,EAAyC,EAAEK,SAAS,IAAX,EAAzC;;MAEI,CAACH,MAAL,EAAa;0BAET3M,gBAAgB4M,OAAO9M,UAAvB,CADF,EAEE0M,KAFF,EAGEC,QAHF,EAIEC,aAJF;;gBAOYK,IAAd,CAAmBH,MAAnB;;;;;;;;;AASF,AAAe,SAASI,mBAAT,CACbzG,SADa,EAEboE,OAFa,EAGb3C,KAHa,EAIbiF,WAJa,EAKb;;QAEMA,WAAN,GAAoBA,WAApB;YACU1G,SAAV,EAAqBsG,gBAArB,CAAsC,QAAtC,EAAgD7E,MAAMiF,WAAtD,EAAmE,EAAEH,SAAS,IAAX,EAAnE;;;MAGMI,gBAAgBlN,gBAAgBuG,SAAhB,CAAtB;wBAEE2G,aADF,EAEE,QAFF,EAGElF,MAAMiF,WAHR,EAIEjF,MAAM0E,aAJR;QAMMQ,aAAN,GAAsBA,aAAtB;QACMC,aAAN,GAAsB,IAAtB;;SAEOnF,KAAP;;;AC5CF;;;;;;AAMA,AAAe,SAASoF,oBAAT,GAAgC;MACzC,CAAC,KAAKpF,KAAL,CAAWmF,aAAhB,EAA+B;SACxBnF,KAAL,GAAagF,oBACX,KAAKzG,SADM,EAEX,KAAKoE,OAFM,EAGX,KAAK3C,KAHM,EAIX,KAAKqF,cAJM,CAAb;;;;ACRJ;;;;;;AAMA,AAAe,SAASC,oBAAT,CAA8B/G,SAA9B,EAAyCyB,KAAzC,EAAgD;;YAEnDzB,SAAV,EAAqBgH,mBAArB,CAAyC,QAAzC,EAAmDvF,MAAMiF,WAAzD;;;QAGMP,aAAN,CAAoBpC,OAApB,CAA4B,kBAAU;WAC7BiD,mBAAP,CAA2B,QAA3B,EAAqCvF,MAAMiF,WAA3C;GADF;;;QAKMA,WAAN,GAAoB,IAApB;QACMP,aAAN,GAAsB,EAAtB;QACMQ,aAAN,GAAsB,IAAtB;QACMC,aAAN,GAAsB,KAAtB;SACOnF,KAAP;;;ACpBF;;;;;;;AAOA,AAAe,SAASkE,qBAAT,GAAiC;MAC1C,KAAKlE,KAAL,CAAWmF,aAAf,EAA8B;yBACP,KAAKE,cAA1B;SACKrF,KAAL,GAAasF,qBAAqB,KAAK/G,SAA1B,EAAqC,KAAKyB,KAA1C,CAAb;;;;ACZJ;;;;;;;AAOA,AAAe,SAASwF,SAAT,CAAmBC,CAAnB,EAAsB;SAC5BA,MAAM,EAAN,IAAY,CAACC,MAAMhK,WAAW+J,CAAX,CAAN,CAAb,IAAqCE,SAASF,CAAT,CAA5C;;;ACNF;;;;;;;;AAQA,AAAe,SAASG,SAAT,CAAmBrO,OAAnB,EAA4B+D,MAA5B,EAAoC;SAC1C6D,IAAP,CAAY7D,MAAZ,EAAoBgH,OAApB,CAA4B,gBAAQ;QAC9BuD,OAAO,EAAX;;QAGE,CAAC,OAAD,EAAU,QAAV,EAAoB,KAApB,EAA2B,OAA3B,EAAoC,QAApC,EAA8C,MAA9C,EAAsDtP,OAAtD,CAA8DmL,IAA9D,MACE,CAAC,CADH,IAEA8D,UAAUlK,OAAOoG,IAAP,CAAV,CAHF,EAIE;aACO,IAAP;;YAEMoC,KAAR,CAAcpC,IAAd,IAAsBpG,OAAOoG,IAAP,IAAemE,IAArC;GAVF;;;ACXF;;;;;;;;AAQA,AAAe,SAASC,aAAT,CAAuBvO,OAAvB,EAAgCwO,UAAhC,EAA4C;SAClD5G,IAAP,CAAY4G,UAAZ,EAAwBzD,OAAxB,CAAgC,UAASZ,IAAT,EAAe;QACvCC,QAAQoE,WAAWrE,IAAX,CAAd;QACIC,UAAU,KAAd,EAAqB;cACXqE,YAAR,CAAqBtE,IAArB,EAA2BqE,WAAWrE,IAAX,CAA3B;KADF,MAEO;cACGsC,eAAR,CAAwBtC,IAAxB;;GALJ;;;ACJF;;;;;;;;;AASA,AAAe,SAASuE,UAAT,CAAoBhE,IAApB,EAA0B;;;;;YAK7BA,KAAKiE,QAAL,CAAc5H,MAAxB,EAAgC2D,KAAK3G,MAArC;;;;gBAIc2G,KAAKiE,QAAL,CAAc5H,MAA5B,EAAoC2D,KAAK8D,UAAzC;;;MAGI9D,KAAKkE,YAAL,IAAqBjH,OAAOC,IAAP,CAAY8C,KAAKmE,WAAjB,EAA8BjQ,MAAvD,EAA+D;cACnD8L,KAAKkE,YAAf,EAA6BlE,KAAKmE,WAAlC;;;SAGKnE,IAAP;;;;;;;;;;;;;AAaF,AAAO,SAASoE,gBAAT,CACL9H,SADK,EAELD,MAFK,EAGLqE,OAHK,EAIL2D,eAJK,EAKLtG,KALK,EAML;;MAEMY,mBAAmBb,oBAAoBC,KAApB,EAA2B1B,MAA3B,EAAmCC,SAAnC,EAA8CoE,QAAQC,aAAtD,CAAzB;;;;;MAKM9D,YAAYD,qBAChB8D,QAAQ7D,SADQ,EAEhB8B,gBAFgB,EAGhBtC,MAHgB,EAIhBC,SAJgB,EAKhBoE,QAAQX,SAAR,CAAkBa,IAAlB,CAAuBpE,iBALP,EAMhBkE,QAAQX,SAAR,CAAkBa,IAAlB,CAAuBrE,OANP,CAAlB;;SASOwH,YAAP,CAAoB,aAApB,EAAmClH,SAAnC;;;;YAIUR,MAAV,EAAkB,EAAEyE,UAAUJ,QAAQC,aAAR,GAAwB,OAAxB,GAAkC,UAA9C,EAAlB;;SAEOD,OAAP;;;AClEF;;;;;;;AAOA,AAAe,SAAS4D,YAAT,CAAsBtE,IAAtB,EAA4BU,OAA5B,EAAqC;MAC1CxC,CAD0C,GACjCwC,OADiC,CAC1CxC,CAD0C;MACvCE,CADuC,GACjCsC,OADiC,CACvCtC,CADuC;MAE1C/B,MAF0C,GAE/B2D,KAAKhG,OAF0B,CAE1CqC,MAF0C;;;;MAK5CkI,8BAA8BpF,KAClCa,KAAKiE,QAAL,CAAclE,SADoB,EAElC;WAAYhH,SAASsI,IAAT,KAAkB,YAA9B;GAFkC,EAGlCmD,eAHF;MAIID,gCAAgCpE,SAApC,EAA+C;YACrCG,IAAR,CACE,+HADF;;MAIIkE,kBACJD,gCAAgCpE,SAAhC,GACIoE,2BADJ,GAEI7D,QAAQ8D,eAHd;;MAKMzN,eAAeH,gBAAgBoJ,KAAKiE,QAAL,CAAc5H,MAA9B,CAArB;MACMoI,mBAAmBtK,sBAAsBpD,YAAtB,CAAzB;;;MAGMsC,SAAS;cACHgD,OAAOyE;GADnB;;;;;MAOM9G,UAAU;UACRJ,KAAK8K,KAAL,CAAWrI,OAAOnD,IAAlB,CADQ;SAETU,KAAK+K,KAAL,CAAWtI,OAAOrD,GAAlB,CAFS;YAGNY,KAAK+K,KAAL,CAAWtI,OAAOpD,MAAlB,CAHM;WAIPW,KAAK8K,KAAL,CAAWrI,OAAOlD,KAAlB;GAJT;;MAOMI,QAAQ2E,MAAM,QAAN,GAAiB,KAAjB,GAAyB,QAAvC;MACM1E,QAAQ4E,MAAM,OAAN,GAAgB,MAAhB,GAAyB,OAAvC;;;;;MAKMwG,mBAAmBtD,yBAAyB,WAAzB,CAAzB;;;;;;;;;;;MAWIpI,aAAJ;MAAUF,YAAV;MACIO,UAAU,QAAd,EAAwB;UAChB,CAACkL,iBAAiBvK,MAAlB,GAA2BF,QAAQf,MAAzC;GADF,MAEO;UACCe,QAAQhB,GAAd;;MAEEQ,UAAU,OAAd,EAAuB;WACd,CAACiL,iBAAiBxK,KAAlB,GAA0BD,QAAQb,KAAzC;GADF,MAEO;WACEa,QAAQd,IAAf;;MAEEsL,mBAAmBI,gBAAvB,EAAyC;WAChCA,gBAAP,qBAA0C1L,IAA1C,YAAqDF,GAArD;WACOO,KAAP,IAAgB,CAAhB;WACOC,KAAP,IAAgB,CAAhB;WACOwI,UAAP,GAAoB,WAApB;GAJF,MAKO;;QAEC6C,YAAYtL,UAAU,QAAV,GAAqB,CAAC,CAAtB,GAA0B,CAA5C;QACMuL,aAAatL,UAAU,OAAV,GAAoB,CAAC,CAArB,GAAyB,CAA5C;WACOD,KAAP,IAAgBP,MAAM6L,SAAtB;WACOrL,KAAP,IAAgBN,OAAO4L,UAAvB;WACO9C,UAAP,GAAuBzI,KAAvB,UAAiCC,KAAjC;;;;MAIIsK,aAAa;mBACF9D,KAAKnD;GADtB;;;OAKKiH,UAAL,gBAAuBA,UAAvB,EAAsC9D,KAAK8D,UAA3C;OACKzK,MAAL,gBAAmBA,MAAnB,EAA8B2G,KAAK3G,MAAnC;OACK8K,WAAL,gBAAwBnE,KAAKhG,OAAL,CAAa+K,KAArC,EAA+C/E,KAAKmE,WAApD;;SAEOnE,IAAP;;;ACnGF;;;;;;;;;;AAUA,AAAe,SAASgF,kBAAT,CACbjF,SADa,EAEbkF,cAFa,EAGbC,aAHa,EAIb;MACMC,aAAahG,KAAKY,SAAL,EAAgB;QAAGsB,IAAH,QAAGA,IAAH;WAAcA,SAAS4D,cAAvB;GAAhB,CAAnB;;MAEMG,aACJ,CAAC,CAACD,UAAF,IACApF,UAAUqB,IAAV,CAAe,oBAAY;WAEvBrI,SAASsI,IAAT,KAAkB6D,aAAlB,IACAnM,SAASwH,OADT,IAEAxH,SAASvB,KAAT,GAAiB2N,WAAW3N,KAH9B;GADF,CAFF;;MAUI,CAAC4N,UAAL,EAAiB;QACTD,oBAAkBF,cAAlB,MAAN;QACMI,kBAAiBH,aAAjB,MAAN;YACQ5E,IAAR,CACK+E,SADL,iCAC0CF,WAD1C,iEACgHA,WADhH;;SAIKC,UAAP;;;AC/BF;;;;;;;AAOA,AAAe,SAASL,KAAT,CAAe/E,IAAf,EAAqBU,OAArB,EAA8B;;;;MAEvC,CAACsE,mBAAmBhF,KAAKiE,QAAL,CAAclE,SAAjC,EAA4C,OAA5C,EAAqD,cAArD,CAAL,EAA2E;WAClEC,IAAP;;;MAGEkE,eAAexD,QAAQpL,OAA3B;;;MAGI,OAAO4O,YAAP,KAAwB,QAA5B,EAAsC;mBACrBlE,KAAKiE,QAAL,CAAc5H,MAAd,CAAqBiJ,aAArB,CAAmCpB,YAAnC,CAAf;;;QAGI,CAACA,YAAL,EAAmB;aACVlE,IAAP;;GALJ,MAOO;;;QAGD,CAACA,KAAKiE,QAAL,CAAc5H,MAAd,CAAqBlE,QAArB,CAA8B+L,YAA9B,CAAL,EAAkD;cACxC5D,IAAR,CACE,+DADF;aAGON,IAAP;;;;MAIEnD,YAAYmD,KAAKnD,SAAL,CAAegB,KAAf,CAAqB,GAArB,EAA0B,CAA1B,CAAlB;sBAC8BmC,KAAKhG,OA5BQ;MA4BnCqC,MA5BmC,iBA4BnCA,MA5BmC;MA4B3BC,SA5B2B,iBA4B3BA,SA5B2B;;MA6BrCiJ,aAAa,CAAC,MAAD,EAAS,OAAT,EAAkBjR,OAAlB,CAA0BuI,SAA1B,MAAyC,CAAC,CAA7D;;MAEM2I,MAAMD,aAAa,QAAb,GAAwB,OAApC;MACME,kBAAkBF,aAAa,KAAb,GAAqB,MAA7C;MACMjN,OAAOmN,gBAAgBC,WAAhB,EAAb;MACMC,UAAUJ,aAAa,MAAb,GAAsB,KAAtC;MACMK,SAASL,aAAa,QAAb,GAAwB,OAAvC;MACMM,mBAAmB5H,cAAciG,YAAd,EAA4BsB,GAA5B,CAAzB;;;;;;;;MAQIlJ,UAAUsJ,MAAV,IAAoBC,gBAApB,GAAuCxJ,OAAO/D,IAAP,CAA3C,EAAyD;SAClD0B,OAAL,CAAaqC,MAAb,CAAoB/D,IAApB,KACE+D,OAAO/D,IAAP,KAAgBgE,UAAUsJ,MAAV,IAAoBC,gBAApC,CADF;;;MAIEvJ,UAAUhE,IAAV,IAAkBuN,gBAAlB,GAAqCxJ,OAAOuJ,MAAP,CAAzC,EAAyD;SAClD5L,OAAL,CAAaqC,MAAb,CAAoB/D,IAApB,KACEgE,UAAUhE,IAAV,IAAkBuN,gBAAlB,GAAqCxJ,OAAOuJ,MAAP,CADvC;;OAGG5L,OAAL,CAAaqC,MAAb,GAAsBtC,cAAciG,KAAKhG,OAAL,CAAaqC,MAA3B,CAAtB;;;MAGMyJ,SAASxJ,UAAUhE,IAAV,IAAkBgE,UAAUkJ,GAAV,IAAiB,CAAnC,GAAuCK,mBAAmB,CAAzE;;;;MAIMpQ,MAAMJ,yBAAyB2K,KAAKiE,QAAL,CAAc5H,MAAvC,CAAZ;MACM0J,mBAAmBtM,WAAWhE,eAAagQ,eAAb,CAAX,EAA4C,EAA5C,CAAzB;MACMO,mBAAmBvM,WAAWhE,eAAagQ,eAAb,WAAX,EAAiD,EAAjD,CAAzB;MACIQ,YACFH,SAAS9F,KAAKhG,OAAL,CAAaqC,MAAb,CAAoB/D,IAApB,CAAT,GAAqCyN,gBAArC,GAAwDC,gBAD1D;;;cAIYpM,KAAKC,GAAL,CAASD,KAAKsM,GAAL,CAAS7J,OAAOmJ,GAAP,IAAcK,gBAAvB,EAAyCI,SAAzC,CAAT,EAA8D,CAA9D,CAAZ;;OAEK/B,YAAL,GAAoBA,YAApB;OACKlK,OAAL,CAAa+K,KAAb,kEACGzM,IADH,EACUsB,KAAK+K,KAAL,CAAWsB,SAAX,CADV,uCAEGN,OAFH,EAEa,EAFb;;SAKO3F,IAAP;;;ACvFF;;;;;;;AAOA,AAAe,SAASmG,oBAAT,CAA8BvI,SAA9B,EAAyC;MAClDA,cAAc,KAAlB,EAAyB;WAChB,OAAP;GADF,MAEO,IAAIA,cAAc,OAAlB,EAA2B;WACzB,KAAP;;SAEKA,SAAP;;;ACbF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,iBAAe,CACb,YADa,EAEb,MAFa,EAGb,UAHa,EAIb,WAJa,EAKb,KALa,EAMb,SANa,EAOb,aAPa,EAQb,OARa,EASb,WATa,EAUb,YAVa,EAWb,QAXa,EAYb,cAZa,EAab,UAba,EAcb,MAda,EAeb,YAfa,CAAf;;AC7BA;AACA,IAAMwI,kBAAkBC,WAAWjG,KAAX,CAAiB,CAAjB,CAAxB;;;;;;;;;;;;AAYA,AAAe,SAASkG,SAAT,CAAmBzJ,SAAnB,EAA+C;MAAjB0J,OAAiB,uEAAP,KAAO;;MACtDC,QAAQJ,gBAAgB9R,OAAhB,CAAwBuI,SAAxB,CAAd;MACMuC,MAAMgH,gBACThG,KADS,CACHoG,QAAQ,CADL,EAETC,MAFS,CAEFL,gBAAgBhG,KAAhB,CAAsB,CAAtB,EAAyBoG,KAAzB,CAFE,CAAZ;SAGOD,UAAUnH,IAAIsH,OAAJ,EAAV,GAA0BtH,GAAjC;;;ACZF,IAAMuH,YAAY;QACV,MADU;aAEL,WAFK;oBAGE;CAHpB;;;;;;;;;AAaA,AAAe,SAAS/F,IAAT,CAAcZ,IAAd,EAAoBU,OAApB,EAA6B;;MAEtCQ,kBAAkBlB,KAAKiE,QAAL,CAAclE,SAAhC,EAA2C,OAA3C,CAAJ,EAAyD;WAChDC,IAAP;;;MAGEA,KAAK4G,OAAL,IAAgB5G,KAAKnD,SAAL,KAAmBmD,KAAKa,iBAA5C,EAA+D;;WAEtDb,IAAP;;;MAGIvD,aAAaL,cACjB4D,KAAKiE,QAAL,CAAc5H,MADG,EAEjB2D,KAAKiE,QAAL,CAAc3H,SAFG,EAGjBoE,QAAQnE,OAHS,EAIjBmE,QAAQlE,iBAJS,EAKjBwD,KAAKW,aALY,CAAnB;;MAQI9D,YAAYmD,KAAKnD,SAAL,CAAegB,KAAf,CAAqB,GAArB,EAA0B,CAA1B,CAAhB;MACIgJ,oBAAoBvI,qBAAqBzB,SAArB,CAAxB;MACIe,YAAYoC,KAAKnD,SAAL,CAAegB,KAAf,CAAqB,GAArB,EAA0B,CAA1B,KAAgC,EAAhD;;MAEIiJ,YAAY,EAAhB;;UAEQpG,QAAQqG,QAAhB;SACOJ,UAAUK,IAAf;kBACc,CAACnK,SAAD,EAAYgK,iBAAZ,CAAZ;;SAEGF,UAAUM,SAAf;kBACcX,UAAUzJ,SAAV,CAAZ;;SAEG8J,UAAUO,gBAAf;kBACcZ,UAAUzJ,SAAV,EAAqB,IAArB,CAAZ;;;kBAGY6D,QAAQqG,QAApB;;;YAGM1G,OAAV,CAAkB,UAAC8G,IAAD,EAAOX,KAAP,EAAiB;QAC7B3J,cAAcsK,IAAd,IAAsBL,UAAU5S,MAAV,KAAqBsS,QAAQ,CAAvD,EAA0D;aACjDxG,IAAP;;;gBAGUA,KAAKnD,SAAL,CAAegB,KAAf,CAAqB,GAArB,EAA0B,CAA1B,CAAZ;wBACoBS,qBAAqBzB,SAArB,CAApB;;QAEMgC,gBAAgBmB,KAAKhG,OAAL,CAAaqC,MAAnC;QACM+K,aAAapH,KAAKhG,OAAL,CAAasC,SAAhC;;;QAGMoI,QAAQ9K,KAAK8K,KAAnB;QACM2C,cACHxK,cAAc,MAAd,IACC6H,MAAM7F,cAAc1F,KAApB,IAA6BuL,MAAM0C,WAAWlO,IAAjB,CAD/B,IAEC2D,cAAc,OAAd,IACC6H,MAAM7F,cAAc3F,IAApB,IAA4BwL,MAAM0C,WAAWjO,KAAjB,CAH9B,IAIC0D,cAAc,KAAd,IACC6H,MAAM7F,cAAc5F,MAApB,IAA8ByL,MAAM0C,WAAWpO,GAAjB,CALhC,IAMC6D,cAAc,QAAd,IACC6H,MAAM7F,cAAc7F,GAApB,IAA2B0L,MAAM0C,WAAWnO,MAAjB,CAR/B;;QAUMqO,gBAAgB5C,MAAM7F,cAAc3F,IAApB,IAA4BwL,MAAMjI,WAAWvD,IAAjB,CAAlD;QACMqO,iBAAiB7C,MAAM7F,cAAc1F,KAApB,IAA6BuL,MAAMjI,WAAWtD,KAAjB,CAApD;QACMqO,eAAe9C,MAAM7F,cAAc7F,GAApB,IAA2B0L,MAAMjI,WAAWzD,GAAjB,CAAhD;QACMyO,kBACJ/C,MAAM7F,cAAc5F,MAApB,IAA8ByL,MAAMjI,WAAWxD,MAAjB,CADhC;;QAGMyO,sBACH7K,cAAc,MAAd,IAAwByK,aAAzB,IACCzK,cAAc,OAAd,IAAyB0K,cAD1B,IAEC1K,cAAc,KAAd,IAAuB2K,YAFxB,IAGC3K,cAAc,QAAd,IAA0B4K,eAJ7B;;;QAOMlC,aAAa,CAAC,KAAD,EAAQ,QAAR,EAAkBjR,OAAlB,CAA0BuI,SAA1B,MAAyC,CAAC,CAA7D;QACM8K,mBACJ,CAAC,CAACjH,QAAQkH,cAAV,KACErC,cAAc3H,cAAc,OAA5B,IAAuC0J,aAAxC,IACE/B,cAAc3H,cAAc,KAA5B,IAAqC2J,cADvC,IAEE,CAAChC,UAAD,IAAe3H,cAAc,OAA7B,IAAwC4J,YAF1C,IAGE,CAACjC,UAAD,IAAe3H,cAAc,KAA7B,IAAsC6J,eAJzC,CADF;;QAOIJ,eAAeK,mBAAf,IAAsCC,gBAA1C,EAA4D;;WAErDf,OAAL,GAAe,IAAf;;UAEIS,eAAeK,mBAAnB,EAAwC;oBAC1BZ,UAAUN,QAAQ,CAAlB,CAAZ;;;UAGEmB,gBAAJ,EAAsB;oBACRxB,qBAAqBvI,SAArB,CAAZ;;;WAGGf,SAAL,GAAiBA,aAAae,YAAY,MAAMA,SAAlB,GAA8B,EAA3C,CAAjB;;;;WAIK5D,OAAL,CAAaqC,MAAb,gBACK2D,KAAKhG,OAAL,CAAaqC,MADlB,EAEKqC,iBACDsB,KAAKiE,QAAL,CAAc5H,MADb,EAED2D,KAAKhG,OAAL,CAAasC,SAFZ,EAGD0D,KAAKnD,SAHJ,CAFL;;aASOiD,aAAaE,KAAKiE,QAAL,CAAclE,SAA3B,EAAsCC,IAAtC,EAA4C,MAA5C,CAAP;;GArEJ;SAwEOA,IAAP;;;ACpIF;;;;;;;AAOA,AAAe,SAAS6H,YAAT,CAAsB7H,IAAtB,EAA4B;sBACXA,KAAKhG,OADM;MACjCqC,MADiC,iBACjCA,MADiC;MACzBC,SADyB,iBACzBA,SADyB;;MAEnCO,YAAYmD,KAAKnD,SAAL,CAAegB,KAAf,CAAqB,GAArB,EAA0B,CAA1B,CAAlB;MACM6G,QAAQ9K,KAAK8K,KAAnB;MACMa,aAAa,CAAC,KAAD,EAAQ,QAAR,EAAkBjR,OAAlB,CAA0BuI,SAA1B,MAAyC,CAAC,CAA7D;MACMvE,OAAOiN,aAAa,OAAb,GAAuB,QAApC;MACMK,SAASL,aAAa,MAAb,GAAsB,KAArC;MACMtG,cAAcsG,aAAa,OAAb,GAAuB,QAA3C;;MAEIlJ,OAAO/D,IAAP,IAAeoM,MAAMpI,UAAUsJ,MAAV,CAAN,CAAnB,EAA6C;SACtC5L,OAAL,CAAaqC,MAAb,CAAoBuJ,MAApB,IACElB,MAAMpI,UAAUsJ,MAAV,CAAN,IAA2BvJ,OAAO4C,WAAP,CAD7B;;MAGE5C,OAAOuJ,MAAP,IAAiBlB,MAAMpI,UAAUhE,IAAV,CAAN,CAArB,EAA6C;SACtC0B,OAAL,CAAaqC,MAAb,CAAoBuJ,MAApB,IAA8BlB,MAAMpI,UAAUhE,IAAV,CAAN,CAA9B;;;SAGK0H,IAAP;;;ACpBF;;;;;;;;;;;;AAYA,AAAO,SAAS8H,OAAT,CAAiBC,GAAjB,EAAsB9I,WAAtB,EAAmCJ,aAAnC,EAAkDF,gBAAlD,EAAoE;;MAEnEd,QAAQkK,IAAInI,KAAJ,CAAU,2BAAV,CAAd;MACMF,QAAQ,CAAC7B,MAAM,CAAN,CAAf;MACM+F,OAAO/F,MAAM,CAAN,CAAb;;;MAGI,CAAC6B,KAAL,EAAY;WACHqI,GAAP;;;MAGEnE,KAAKtP,OAAL,CAAa,GAAb,MAAsB,CAA1B,EAA6B;QACvBgB,gBAAJ;YACQsO,IAAR;WACO,IAAL;kBACY/E,aAAV;;WAEG,GAAL;WACK,IAAL;;kBAEYF,gBAAV;;;QAGEhG,OAAOoB,cAAczE,OAAd,CAAb;WACOqD,KAAKsG,WAAL,IAAoB,GAApB,GAA0BS,KAAjC;GAbF,MAcO,IAAIkE,SAAS,IAAT,IAAiBA,SAAS,IAA9B,EAAoC;;QAErCoE,aAAJ;QACIpE,SAAS,IAAb,EAAmB;aACVhK,KAAKC,GAAL,CACL/F,SAAS+C,eAAT,CAAyB2D,YADpB,EAEL3G,OAAOiI,WAAP,IAAsB,CAFjB,CAAP;KADF,MAKO;aACElC,KAAKC,GAAL,CACL/F,SAAS+C,eAAT,CAAyB0D,WADpB,EAEL1G,OAAOgI,UAAP,IAAqB,CAFhB,CAAP;;WAKKmM,OAAO,GAAP,GAAatI,KAApB;GAdK,MAeA;;;WAGEA,KAAP;;;;;;;;;;;;;;;AAeJ,AAAO,SAASuI,WAAT,CACLlM,MADK,EAEL8C,aAFK,EAGLF,gBAHK,EAILuJ,aAJK,EAKL;MACMlO,UAAU,CAAC,CAAD,EAAI,CAAJ,CAAhB;;;;;MAKMmO,YAAY,CAAC,OAAD,EAAU,MAAV,EAAkB7T,OAAlB,CAA0B4T,aAA1B,MAA6C,CAAC,CAAhE;;;;MAIME,YAAYrM,OAAO8B,KAAP,CAAa,SAAb,EAAwBV,GAAxB,CAA4B;WAAQkL,KAAKC,IAAL,EAAR;GAA5B,CAAlB;;;;MAIMC,UAAUH,UAAU9T,OAAV,CACd6K,KAAKiJ,SAAL,EAAgB;WAAQC,KAAKG,MAAL,CAAY,MAAZ,MAAwB,CAAC,CAAjC;GAAhB,CADc,CAAhB;;MAIIJ,UAAUG,OAAV,KAAsBH,UAAUG,OAAV,EAAmBjU,OAAnB,CAA2B,GAA3B,MAAoC,CAAC,CAA/D,EAAkE;YACxDgM,IAAR,CACE,8EADF;;;;;MAOImI,aAAa,aAAnB;MACIC,MAAMH,YAAY,CAAC,CAAb,GACN,CACEH,UACGhI,KADH,CACS,CADT,EACYmI,OADZ,EAEG9B,MAFH,CAEU,CAAC2B,UAAUG,OAAV,EAAmB1K,KAAnB,CAAyB4K,UAAzB,EAAqC,CAArC,CAAD,CAFV,CADF,EAIE,CAACL,UAAUG,OAAV,EAAmB1K,KAAnB,CAAyB4K,UAAzB,EAAqC,CAArC,CAAD,EAA0ChC,MAA1C,CACE2B,UAAUhI,KAAV,CAAgBmI,UAAU,CAA1B,CADF,CAJF,CADM,GASN,CAACH,SAAD,CATJ;;;QAYMM,IAAIvL,GAAJ,CAAQ,UAACwL,EAAD,EAAKnC,KAAL,EAAe;;QAErBvH,cAAc,CAACuH,UAAU,CAAV,GAAc,CAAC2B,SAAf,GAA2BA,SAA5B,IAChB,QADgB,GAEhB,OAFJ;QAGIS,oBAAoB,KAAxB;WAEED;;;KAGGE,MAHH,CAGU,UAACvL,CAAD,EAAIC,CAAJ,EAAU;UACZD,EAAEA,EAAEpJ,MAAF,GAAW,CAAb,MAAoB,EAApB,IAA0B,CAAC,GAAD,EAAM,GAAN,EAAWI,OAAX,CAAmBiJ,CAAnB,MAA0B,CAAC,CAAzD,EAA4D;UACxDD,EAAEpJ,MAAF,GAAW,CAAb,IAAkBqJ,CAAlB;4BACoB,IAApB;eACOD,CAAP;OAHF,MAIO,IAAIsL,iBAAJ,EAAuB;UAC1BtL,EAAEpJ,MAAF,GAAW,CAAb,KAAmBqJ,CAAnB;4BACoB,KAApB;eACOD,CAAP;OAHK,MAIA;eACEA,EAAEmJ,MAAF,CAASlJ,CAAT,CAAP;;KAbN,EAeK,EAfL;;KAiBGJ,GAjBH,CAiBO;aAAO2K,QAAQC,GAAR,EAAa9I,WAAb,EAA0BJ,aAA1B,EAAyCF,gBAAzC,CAAP;KAjBP,CADF;GANI,CAAN;;;MA6BI0B,OAAJ,CAAY,UAACsI,EAAD,EAAKnC,KAAL,EAAe;OACtBnG,OAAH,CAAW,UAACgI,IAAD,EAAOS,MAAP,EAAkB;UACvBvF,UAAU8E,IAAV,CAAJ,EAAqB;gBACX7B,KAAR,KAAkB6B,QAAQM,GAAGG,SAAS,CAAZ,MAAmB,GAAnB,GAAyB,CAAC,CAA1B,GAA8B,CAAtC,CAAlB;;KAFJ;GADF;SAOO9O,OAAP;;;;;;;;;;;;AAYF,AAAe,SAAS+B,MAAT,CAAgBiE,IAAhB,QAAkC;MAAVjE,MAAU,QAAVA,MAAU;MACvCc,SADuC,GACOmD,IADP,CACvCnD,SADuC;sBACOmD,IADP,CAC5BhG,OAD4B;MACjBqC,MADiB,iBACjBA,MADiB;MACTC,SADS,iBACTA,SADS;;MAEzC4L,gBAAgBrL,UAAUgB,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAtB;;MAEI7D,gBAAJ;MACIuJ,UAAU,CAACxH,MAAX,CAAJ,EAAwB;cACZ,CAAC,CAACA,MAAF,EAAU,CAAV,CAAV;GADF,MAEO;cACKkM,YAAYlM,MAAZ,EAAoBM,MAApB,EAA4BC,SAA5B,EAAuC4L,aAAvC,CAAV;;;MAGEA,kBAAkB,MAAtB,EAA8B;WACrBlP,GAAP,IAAcgB,QAAQ,CAAR,CAAd;WACOd,IAAP,IAAec,QAAQ,CAAR,CAAf;GAFF,MAGO,IAAIkO,kBAAkB,OAAtB,EAA+B;WAC7BlP,GAAP,IAAcgB,QAAQ,CAAR,CAAd;WACOd,IAAP,IAAec,QAAQ,CAAR,CAAf;GAFK,MAGA,IAAIkO,kBAAkB,KAAtB,EAA6B;WAC3BhP,IAAP,IAAec,QAAQ,CAAR,CAAf;WACOhB,GAAP,IAAcgB,QAAQ,CAAR,CAAd;GAFK,MAGA,IAAIkO,kBAAkB,QAAtB,EAAgC;WAC9BhP,IAAP,IAAec,QAAQ,CAAR,CAAf;WACOhB,GAAP,IAAcgB,QAAQ,CAAR,CAAd;;;OAGGqC,MAAL,GAAcA,MAAd;SACO2D,IAAP;;;AC5LF;;;;;;;AAOA,AAAe,SAAS+I,eAAT,CAAyB/I,IAAzB,EAA+BU,OAA/B,EAAwC;MACjDlE,oBACFkE,QAAQlE,iBAAR,IAA6B5F,gBAAgBoJ,KAAKiE,QAAL,CAAc5H,MAA9B,CAD/B;;;;;MAMI2D,KAAKiE,QAAL,CAAc3H,SAAd,KAA4BE,iBAAhC,EAAmD;wBAC7B5F,gBAAgB4F,iBAAhB,CAApB;;;;;;MAMIwM,gBAAgB1H,yBAAyB,WAAzB,CAAtB;MACM2H,eAAejJ,KAAKiE,QAAL,CAAc5H,MAAd,CAAqBwF,KAA1C,CAfqD;MAgB7C7I,GAhB6C,GAgBHiQ,YAhBG,CAgB7CjQ,GAhB6C;MAgBxCE,IAhBwC,GAgBH+P,YAhBG,CAgBxC/P,IAhBwC;MAgBjBgQ,SAhBiB,GAgBHD,YAhBG,CAgBjCD,aAhBiC;;eAiBxChQ,GAAb,GAAmB,EAAnB;eACaE,IAAb,GAAoB,EAApB;eACa8P,aAAb,IAA8B,EAA9B;;MAEMvM,aAAaL,cACjB4D,KAAKiE,QAAL,CAAc5H,MADG,EAEjB2D,KAAKiE,QAAL,CAAc3H,SAFG,EAGjBoE,QAAQnE,OAHS,EAIjBC,iBAJiB,EAKjBwD,KAAKW,aALY,CAAnB;;;;eAUa3H,GAAb,GAAmBA,GAAnB;eACaE,IAAb,GAAoBA,IAApB;eACa8P,aAAb,IAA8BE,SAA9B;;UAEQzM,UAAR,GAAqBA,UAArB;;MAEMjF,QAAQkJ,QAAQyI,QAAtB;MACI9M,SAAS2D,KAAKhG,OAAL,CAAaqC,MAA1B;;MAEMgD,QAAQ;WAAA,mBACJxC,SADI,EACO;UACb6C,QAAQrD,OAAOQ,SAAP,CAAZ;UAEER,OAAOQ,SAAP,IAAoBJ,WAAWI,SAAX,CAApB,IACA,CAAC6D,QAAQ0I,mBAFX,EAGE;gBACQxP,KAAKC,GAAL,CAASwC,OAAOQ,SAAP,CAAT,EAA4BJ,WAAWI,SAAX,CAA5B,CAAR;;gCAEQA,SAAV,EAAsB6C,KAAtB;KATU;aAAA,qBAWF7C,SAXE,EAWS;UACbkC,WAAWlC,cAAc,OAAd,GAAwB,MAAxB,GAAiC,KAAlD;UACI6C,QAAQrD,OAAO0C,QAAP,CAAZ;UAEE1C,OAAOQ,SAAP,IAAoBJ,WAAWI,SAAX,CAApB,IACA,CAAC6D,QAAQ0I,mBAFX,EAGE;gBACQxP,KAAKsM,GAAL,CACN7J,OAAO0C,QAAP,CADM,EAENtC,WAAWI,SAAX,KACGA,cAAc,OAAd,GAAwBR,OAAOpC,KAA/B,GAAuCoC,OAAOnC,MADjD,CAFM,CAAR;;gCAMQ6E,QAAV,EAAqBW,KAArB;;GAxBJ;;QA4BMW,OAAN,CAAc,qBAAa;QACnB/H,OACJ,CAAC,MAAD,EAAS,KAAT,EAAgBhE,OAAhB,CAAwBuI,SAAxB,MAAuC,CAAC,CAAxC,GAA4C,SAA5C,GAAwD,WAD1D;0BAEcR,MAAd,EAAyBgD,MAAM/G,IAAN,EAAYuE,SAAZ,CAAzB;GAHF;;OAMK7C,OAAL,CAAaqC,MAAb,GAAsBA,MAAtB;;SAEO2D,IAAP;;;ACvFF;;;;;;;AAOA,AAAe,SAASqJ,KAAT,CAAerJ,IAAf,EAAqB;MAC5BnD,YAAYmD,KAAKnD,SAAvB;MACMqL,gBAAgBrL,UAAUgB,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAtB;MACMyL,iBAAiBzM,UAAUgB,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAvB;;;MAGIyL,cAAJ,EAAoB;wBACYtJ,KAAKhG,OADjB;QACVsC,SADU,iBACVA,SADU;QACCD,MADD,iBACCA,MADD;;QAEZkJ,aAAa,CAAC,QAAD,EAAW,KAAX,EAAkBjR,OAAlB,CAA0B4T,aAA1B,MAA6C,CAAC,CAAjE;QACM5P,OAAOiN,aAAa,MAAb,GAAsB,KAAnC;QACMtG,cAAcsG,aAAa,OAAb,GAAuB,QAA3C;;QAEMgE,eAAe;gCACTjR,IAAV,EAAiBgE,UAAUhE,IAAV,CAAjB,CADmB;8BAGhBA,IADH,EACUgE,UAAUhE,IAAV,IAAkBgE,UAAU2C,WAAV,CAAlB,GAA2C5C,OAAO4C,WAAP,CADrD;KAFF;;SAOKjF,OAAL,CAAaqC,MAAb,gBAA2BA,MAA3B,EAAsCkN,aAAaD,cAAb,CAAtC;;;SAGKtJ,IAAP;;;AC1BF;;;;;;;AAOA,AAAe,SAASwJ,IAAT,CAAcxJ,IAAd,EAAoB;MAC7B,CAACgF,mBAAmBhF,KAAKiE,QAAL,CAAclE,SAAjC,EAA4C,MAA5C,EAAoD,iBAApD,CAAL,EAA6E;WACpEC,IAAP;;;MAGIlD,UAAUkD,KAAKhG,OAAL,CAAasC,SAA7B;MACMmN,QAAQtK,KACZa,KAAKiE,QAAL,CAAclE,SADF,EAEZ;WAAYhH,SAASsI,IAAT,KAAkB,iBAA9B;GAFY,EAGZ5E,UAHF;;MAMEK,QAAQ7D,MAAR,GAAiBwQ,MAAMzQ,GAAvB,IACA8D,QAAQ5D,IAAR,GAAeuQ,MAAMtQ,KADrB,IAEA2D,QAAQ9D,GAAR,GAAcyQ,MAAMxQ,MAFpB,IAGA6D,QAAQ3D,KAAR,GAAgBsQ,MAAMvQ,IAJxB,EAKE;;QAEI8G,KAAKwJ,IAAL,KAAc,IAAlB,EAAwB;aACfxJ,IAAP;;;SAGGwJ,IAAL,GAAY,IAAZ;SACK1F,UAAL,CAAgB,qBAAhB,IAAyC,EAAzC;GAZF,MAaO;;QAED9D,KAAKwJ,IAAL,KAAc,KAAlB,EAAyB;aAChBxJ,IAAP;;;SAGGwJ,IAAL,GAAY,KAAZ;SACK1F,UAAL,CAAgB,qBAAhB,IAAyC,KAAzC;;;SAGK9D,IAAP;;;ACzCF;;;;;;;AAOA,AAAe,SAAS0J,KAAT,CAAe1J,IAAf,EAAqB;MAC5BnD,YAAYmD,KAAKnD,SAAvB;MACMqL,gBAAgBrL,UAAUgB,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAtB;sBAC8BmC,KAAKhG,OAHD;MAG1BqC,MAH0B,iBAG1BA,MAH0B;MAGlBC,SAHkB,iBAGlBA,SAHkB;;MAI5BwC,UAAU,CAAC,MAAD,EAAS,OAAT,EAAkBxK,OAAlB,CAA0B4T,aAA1B,MAA6C,CAAC,CAA9D;;MAEMyB,iBAAiB,CAAC,KAAD,EAAQ,MAAR,EAAgBrV,OAAhB,CAAwB4T,aAAxB,MAA2C,CAAC,CAAnE;;SAEOpJ,UAAU,MAAV,GAAmB,KAA1B,IACExC,UAAU4L,aAAV,KACCyB,iBAAiBtN,OAAOyC,UAAU,OAAV,GAAoB,QAA3B,CAAjB,GAAwD,CADzD,CADF;;OAIKjC,SAAL,GAAiByB,qBAAqBzB,SAArB,CAAjB;OACK7C,OAAL,CAAaqC,MAAb,GAAsBtC,cAAcsC,MAAd,CAAtB;;SAEO2D,IAAP;;;ACdF;;;;;;;;;;;;;;;;;;;;;AAqBA,gBAAe;;;;;;;;;SASN;;WAEE,GAFF;;aAII,IAJJ;;QAMDqJ;GAfO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAwDL;;WAEC,GAFD;;aAIG,IAJH;;QAMFtN,MANE;;;;YAUE;GAlEG;;;;;;;;;;;;;;;;;;;mBAsFI;;WAER,GAFQ;;aAIN,IAJM;;QAMXgN,eANW;;;;;;cAYL,CAAC,MAAD,EAAS,OAAT,EAAkB,KAAlB,EAAyB,QAAzB,CAZK;;;;;;;aAmBN,CAnBM;;;;;;uBAyBI;GA/GR;;;;;;;;;;;gBA2HC;;WAEL,GAFK;;aAIH,IAJG;;QAMRlB;GAjIO;;;;;;;;;;;;SA8IN;;WAEE,GAFF;;aAII,IAJJ;;QAMD9C,KANC;;aAQI;GAtJE;;;;;;;;;;;;;QAoKP;;WAEG,GAFH;;aAIK,IAJL;;QAMAnE,IANA;;;;;;;cAaM,MAbN;;;;;aAkBK,CAlBL;;;;;;;uBAyBe;GA7LR;;;;;;;;;SAuMN;;WAEE,GAFF;;aAII,KAJJ;;QAMD8I;GA7MO;;;;;;;;;;;;QA0NP;;WAEG,GAFH;;aAIK,IAJL;;QAMAF;GAhOO;;;;;;;;;;;;;;;;;gBAkPC;;WAEL,GAFK;;aAIH,IAJG;;QAMRlF,YANQ;;;;;;qBAYK,IAZL;;;;;;OAkBT,QAlBS;;;;;;OAwBT;GA1QQ;;;;;;;;;;;;;;;;;cA4RD;;WAEH,GAFG;;aAID,IAJC;;QAMNN,UANM;;YAQFI,gBARE;;;;;;;qBAeOjE;;CA3SrB;;;;;;;;;;;;;;;;;;;;;AC9BA;;;;;;;;;;;;;;;;AAgBA,eAAe;;;;;aAKF,QALE;;;;;;iBAWE,KAXF;;;;;;iBAiBE,IAjBF;;;;;;;mBAwBI,KAxBJ;;;;;;;;YAgCH,oBAAM,EAhCH;;;;;;;;;;YA0CH,oBAAM,EA1CH;;;;;;;;CAAf;;;;;;;;;;;;AClBA;AACA,AAGA;AACA,IAOqByJ;;;;;;;;;kBASPtN,SAAZ,EAAuBD,MAAvB,EAA6C;;;QAAdqE,OAAc,uEAAJ,EAAI;;;SAyF7C0C,cAzF6C,GAyF5B;aAAMyG,sBAAsB,MAAKrJ,MAA3B,CAAN;KAzF4B;;;SAEtCA,MAAL,GAAcsJ,SAAS,KAAKtJ,MAAL,CAAYuJ,IAAZ,CAAiB,IAAjB,CAAT,CAAd;;;SAGKrJ,OAAL,gBAAoBkJ,OAAOI,QAA3B,EAAwCtJ,OAAxC;;;SAGK3C,KAAL,GAAa;mBACE,KADF;iBAEA,KAFA;qBAGI;KAHjB;;;SAOKzB,SAAL,GAAiBA,aAAaA,UAAU2N,MAAvB,GAAgC3N,UAAU,CAAV,CAAhC,GAA+CA,SAAhE;SACKD,MAAL,GAAcA,UAAUA,OAAO4N,MAAjB,GAA0B5N,OAAO,CAAP,CAA1B,GAAsCA,MAApD;;;SAGKqE,OAAL,CAAaX,SAAb,GAAyB,EAAzB;WACO7C,IAAP,cACK0M,OAAOI,QAAP,CAAgBjK,SADrB,EAEKW,QAAQX,SAFb,GAGGM,OAHH,CAGW,gBAAQ;YACZK,OAAL,CAAaX,SAAb,CAAuBsB,IAAvB,iBAEMuI,OAAOI,QAAP,CAAgBjK,SAAhB,CAA0BsB,IAA1B,KAAmC,EAFzC,EAIMX,QAAQX,SAAR,GAAoBW,QAAQX,SAAR,CAAkBsB,IAAlB,CAApB,GAA8C,EAJpD;KAJF;;;SAaKtB,SAAL,GAAiB9C,OAAOC,IAAP,CAAY,KAAKwD,OAAL,CAAaX,SAAzB,EACd5C,GADc,CACV;;;SAEA,MAAKuD,OAAL,CAAaX,SAAb,CAAuBsB,IAAvB,CAFA;KADU;;KAMdhE,IANc,CAMT,UAACC,CAAD,EAAIC,CAAJ;aAAUD,EAAE9F,KAAF,GAAU+F,EAAE/F,KAAtB;KANS,CAAjB;;;;;;SAYKuI,SAAL,CAAeM,OAAf,CAAuB,2BAAmB;UACpCgE,gBAAgB9D,OAAhB,IAA2BvL,WAAWqP,gBAAgB6F,MAA3B,CAA/B,EAAmE;wBACjDA,MAAhB,CACE,MAAK5N,SADP,EAEE,MAAKD,MAFP,EAGE,MAAKqE,OAHP,EAIE2D,eAJF,EAKE,MAAKtG,KALP;;KAFJ;;;SAaKyC,MAAL;;QAEM0C,gBAAgB,KAAKxC,OAAL,CAAawC,aAAnC;QACIA,aAAJ,EAAmB;;WAEZC,oBAAL;;;SAGGpF,KAAL,CAAWmF,aAAX,GAA2BA,aAA3B;;;;;;;;;gCAKO;aACA1C,OAAOpL,IAAP,CAAY,IAAZ,CAAP;;;;iCAEQ;aACD0M,QAAQ1M,IAAR,CAAa,IAAb,CAAP;;;;8CAEqB;aACd+N,qBAAqB/N,IAArB,CAA0B,IAA1B,CAAP;;;;+CAEsB;aACf6M,sBAAsB7M,IAAtB,CAA2B,IAA3B,CAAP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA1FiBwU,OAoHZO,QAAQ,CAAC,OAAOtW,MAAP,KAAkB,WAAlB,GAAgCA,MAAhC,GAAyCuW,MAA1C,EAAkDC;AApH9CT,OAsHZvD,aAAaA;AAtHDuD,OAwHZI,WAAWA;;;;"} \ No newline at end of file diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.min.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.min.js index 102591771..f46968d72 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.min.js +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/esm/popper.min.js @@ -1,5 +1,5 @@ /* Copyright (C) Federico Zivolo 2018 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). - */for(var e='undefined'!=typeof window&&'undefined'!=typeof document,t=['Edge','Trident','Firefox'],o=0,n=0;n=o.clientWidth&&n>=o.clientHeight}),l=0p[c]&&(e.offsets.popper[m]+=s[m]+g-p[c]),e.offsets.popper=D(e.offsets.popper);var u=s[m]+s[l]/2-g/2,b=a(e.instance.popper),y=parseFloat(b['margin'+f],10),w=parseFloat(b['border'+f+'Width'],10),E=u-e.offsets.popper[m]-y-w;return E=Math.max(Math.min(p[l]-g,E),0),e.arrowElement=n,e.offsets.arrow=(o={},S(o,m,Math.round(E)),S(o,h,''),o),e}function se(e){if('end'===e)return'start';return'start'===e?'end':e}var de=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],ae=de.slice(3);function le(e){var t=1f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=se(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=T({},e.offsets.popper,R(e.instance.popper,e.offsets.reference,e.placement)),e=j(e.instance.modifiers,e,'flip'))}),e}function he(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Math.floor,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}function ce(e,t,o,n){var i=Math.max,r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),p=+r[1],s=r[2];if(!p)return e;if(0===s.indexOf('%')){var d;switch(s){case'%p':d=o;break;case'%':case'%r':default:d=n;}var a=D(d);return a[t]/100*p}if('vh'===s||'vw'===s){var l;return l='vh'===s?i(document.documentElement.clientHeight,window.innerHeight||0):i(document.documentElement.clientWidth,window.innerWidth||0),l/100*p}return p}function ge(e,t,o,n){var i=[0,0],r=-1!==['right','left'].indexOf(n),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(U(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,n){var i=(1===n?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return ce(e,i,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,n){$(o)&&(i[t]+=o*('-'===e[n-1]?-1:1))})}),i}function ue(e,t){var o,n=t.offset,i=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=i.split('-')[0];return o=$(+n)?[+n,0]:ge(n,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}function be(e,t){var o=t.boundariesElement||c(e.instance.popper);e.instance.reference===o&&(o=c(o));var n=B(e.instance.popper,e.instance.reference,t.padding,o,e.positionFixed);t.boundaries=n;var i=t.priority,r=e.offsets.popper,p={primary:function(e){var o=r[e];return r[e]n[e]&&!t.escapeWithReference&&(i=Math.min(r[o],n[e]-('right'===e?r.width:r.height))),S({},o,i)}};return i.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';r=T({},r,p[t](e))}),e.offsets.popper=r,e}function ye(e){var t=e.placement,o=t.split('-')[0],n=t.split('-')[1];if(n){var i=e.offsets,r=i.reference,p=i.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:S({},d,r[d]),end:S({},d,r[d]+r[a]-p[a])};e.offsets.popper=T({},p,l[n])}return e}function we(e){if(!re(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=U(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right=o.clientWidth&&n>=o.clientHeight}),l=0p[c]&&(e.offsets.popper[m]+=s[m]+g-p[c]),e.offsets.popper=D(e.offsets.popper);var u=s[m]+s[l]/2-g/2,b=a(e.instance.popper),y=parseFloat(b['margin'+f],10),w=parseFloat(b['border'+f+'Width'],10),E=u-e.offsets.popper[m]-y-w;return E=Math.max(Math.min(p[l]-g,E),0),e.arrowElement=n,e.offsets.arrow=(o={},T(o,m,Math.round(E)),T(o,h,''),o),e}function de(e){if('end'===e)return'start';return'start'===e?'end':e}var ae=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],le=ae.slice(3);function fe(e){var t=1f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=de(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=C({},e.offsets.popper,U(e.instance.popper,e.offsets.reference,e.placement)),e=j(e.instance.modifiers,e,'flip'))}),e}function ce(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Math.floor,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}function ge(e,t,o,n){var i=Math.max,r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),p=+r[1],s=r[2];if(!p)return e;if(0===s.indexOf('%')){var d;switch(s){case'%p':d=o;break;case'%':case'%r':default:d=n;}var a=D(d);return a[t]/100*p}if('vh'===s||'vw'===s){var l;return l='vh'===s?i(document.documentElement.clientHeight,window.innerHeight||0):i(document.documentElement.clientWidth,window.innerWidth||0),l/100*p}return p}function ue(e,t,o,n){var i=[0,0],r=-1!==['right','left'].indexOf(n),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(Y(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,n){var i=(1===n?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return ge(e,i,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,n){ee(o)&&(i[t]+=o*('-'===e[n-1]?-1:1))})}),i}function be(e,t){var o,n=t.offset,i=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=i.split('-')[0];return o=ee(+n)?[+n,0]:ue(n,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}function ye(e,t){var o=t.boundariesElement||g(e.instance.popper);e.instance.reference===o&&(o=g(o));var n=z('transform'),i=e.instance.popper.style,r=i.top,p=i.left,s=i[n];i.top='',i.left='',i[n]='';var d=H(e.instance.popper,e.instance.reference,t.padding,o,e.positionFixed);i.top=r,i.left=p,i[n]=s,t.boundaries=d;var a=t.priority,l=e.offsets.popper,f={primary:function(e){var o=l[e];return l[e]d[e]&&!t.escapeWithReference&&(n=Math.min(l[o],d[e]-('right'===e?l.width:l.height))),T({},o,n)}};return a.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';l=C({},l,f[t](e))}),e.offsets.popper=l,e}function we(e){var t=e.placement,o=t.split('-')[0],n=t.split('-')[1];if(n){var i=e.offsets,r=i.reference,p=i.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:T({},d,r[d]),end:T({},d,r[d]+r[a]-p[a])};e.offsets.popper=C({},p,l[n])}return e}function Ee(e){if(!pe(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=Y(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Tells if you are running Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @argument {number} version to check\n * @returns {Boolean} isIE\n */\nconst cache = {};\n\nexport default function (version = 'all') {\n version = version.toString();\n if(cache.hasOwnProperty(version)){\n return cache[version];\n }\n switch (version) {\n case '11':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1;\n break;\n case '10':\n cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1;\n break;\n case 'all':\n cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1;\n break;\n }\n\n //Set IE\n cache.all = cache.all || Object.keys(cache).some(key => cache[key]);\n return cache[version];\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // floor sides to avoid blurry text\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.floor(popper.top),\n bottom: Math.floor(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side = ['left', 'top'].indexOf(placement) !== -1\n ? 'primary'\n : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["isBrowser","window","document","longerTimeoutBrowsers","timeoutDuration","i","length","navigator","userAgent","indexOf","called","Promise","resolve","then","scheduled","supportsMicroTasks","functionToCheck","getType","toString","call","element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","cache","version","hasOwnProperty","appVersion","all","Object","keys","some","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","isIE10","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","key","variation","split","commonOffsetParent","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","Array","prototype","find","arr","findIndex","cur","match","obj","modifiersToRun","ends","modifiers","slice","forEach","warn","fn","enabled","isFunction","data","reference","state","isDestroyed","getReferenceOffsets","options","positionFixed","computeAutoPlacement","flip","originalPlacement","getPopperOffsets","position","runModifiers","isCreated","onUpdate","onCreate","name","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","isModifierEnabled","removeAttribute","willChange","getSupportedPropertyName","disableEventListeners","removeOnDestroy","removeChild","defaultView","isBody","target","addEventListener","passive","push","updateBound","scrollElement","scrollParents","eventsEnabled","setupEventListeners","scheduleUpdate","removeEventListener","removeEventListeners","n","isNaN","isFinite","unit","isNumeric","value","attributes","setAttribute","instance","arrowElement","arrowStyles","floor","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","prefixedProperty","invertTop","invertLeft","arrow","requesting","isRequired","requested","isModifierRequired","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","round","validPlacements","placements","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","clockwise","COUNTERCLOCKWISE","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","getOppositeVariation","str","size","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","mergeWithPrevious","op","reduce","toValue","index2","basePlacement","parseOffset","priority","check","escapeWithReference","shiftvariation","shiftOffsets","bound","hide","subtractLength","Popper","requestAnimationFrame","update","debounce","bind","Defaults","jquery","modifierOptions","onLoad","enableEventListeners","destroy","Utils","global","PopperUtils"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"popper.min.js","sources":["../../src/utils/debounce.js","../../src/utils/isBrowser.js","../../src/utils/isFunction.js","../../src/utils/getStyleComputedProperty.js","../../src/utils/getParentNode.js","../../src/utils/getScrollParent.js","../../src/utils/isIE.js","../../src/utils/getOffsetParent.js","../../src/utils/isOffsetContainer.js","../../src/utils/getRoot.js","../../src/utils/findCommonOffsetParent.js","../../src/utils/getScroll.js","../../src/utils/includeScroll.js","../../src/utils/getBordersSize.js","../../src/utils/getWindowSizes.js","../../src/utils/getClientRect.js","../../src/utils/getBoundingClientRect.js","../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../src/utils/isFixed.js","../../src/utils/getFixedPositionOffsetParent.js","../../src/utils/getBoundaries.js","../../src/utils/computeAutoPlacement.js","../../src/utils/getReferenceOffsets.js","../../src/utils/getOuterSizes.js","../../src/utils/getOppositePlacement.js","../../src/utils/getPopperOffsets.js","../../src/utils/find.js","../../src/utils/findIndex.js","../../src/utils/runModifiers.js","../../src/methods/update.js","../../src/utils/isModifierEnabled.js","../../src/utils/getSupportedPropertyName.js","../../src/methods/destroy.js","../../src/utils/getWindow.js","../../src/utils/setupEventListeners.js","../../src/methods/enableEventListeners.js","../../src/utils/removeEventListeners.js","../../src/methods/disableEventListeners.js","../../src/utils/isNumeric.js","../../src/utils/setStyles.js","../../src/utils/setAttributes.js","../../src/modifiers/applyStyle.js","../../src/modifiers/computeStyle.js","../../src/utils/isModifierRequired.js","../../src/modifiers/arrow.js","../../src/utils/getOppositeVariation.js","../../src/methods/placements.js","../../src/utils/clockwise.js","../../src/modifiers/flip.js","../../src/modifiers/keepTogether.js","../../src/modifiers/offset.js","../../src/modifiers/preventOverflow.js","../../src/modifiers/shift.js","../../src/modifiers/hide.js","../../src/modifiers/inner.js","../../src/modifiers/index.js","../../src/methods/defaults.js","../../src/index.js"],"sourcesContent":["import isBrowser from './isBrowser';\n\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","export default typeof window !== 'undefined' && typeof document !== 'undefined';\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`], 10) +\n parseFloat(styles[`border${sideB}Width`], 10)\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? html[`offset${axis}`] +\n computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] +\n computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]\n : 0\n );\n}\n\nexport default function getWindowSizes() {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n const width =\n sizes.width || element.clientWidth || result.right - result.left;\n const height =\n sizes.height || element.clientHeight || result.bottom - result.top;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && parent.nodeName === 'HTML') {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop, 10);\n const marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n const offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right),\n };\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n top = -offsetParentRect.height + offsets.bottom;\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n left = -offsetParentRect.width + offsets.right;\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unitless, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the height.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper this makes sure the popper has always a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near eachothers\n * without leaving any gap between the two. Expecially useful when the arrow is\n * enabled and you want to assure it to point to its reference element.\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjuction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations).\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position,\n * the popper will never be placed outside of the defined boundaries\n * (except if keepTogether is enabled)\n */\n boundariesElement: 'viewport',\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define you own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3d transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties.\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overriden using the `options` argument of Popper.js.
\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n"],"names":["window","document","timeoutDuration","i","longerTimeoutBrowsers","length","isBrowser","navigator","userAgent","indexOf","called","Promise","resolve","then","scheduled","supportsMicroTasks","functionToCheck","getType","toString","call","element","nodeType","css","getComputedStyle","property","nodeName","parentNode","host","body","ownerDocument","getStyleComputedProperty","overflow","overflowX","overflowY","test","getScrollParent","getParentNode","isIE11","MSInputMethodContext","documentMode","isIE10","version","documentElement","noOffsetParent","isIE","offsetParent","nextElementSibling","getOffsetParent","firstElementChild","node","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","isOffsetContainer","element1root","findCommonOffsetParent","side","upperSide","html","scrollingElement","subtract","scrollTop","getScroll","scrollLeft","modifier","top","bottom","left","right","sideA","axis","sideB","parseFloat","styles","Math","max","computedStyle","getSize","offsets","width","height","rect","getBoundingClientRect","result","sizes","getWindowSizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","fixedPosition","runIsIE","isHTML","parent","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","includeScroll","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","innerWidth","innerHeight","offset","isFixed","parentElement","el","boundaries","getFixedPositionOffsetParent","boundariesElement","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","popper","padding","placement","getBoundaries","rects","refRect","sortedAreas","Object","keys","map","getArea","sort","b","area","a","filteredAreas","filter","computedPlacement","key","variation","split","commonOffsetParent","x","marginBottom","y","marginRight","hash","replace","popperRect","getOuterSizes","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","referenceOffsets","getOppositePlacement","Array","prototype","find","arr","findIndex","cur","match","obj","modifiersToRun","ends","modifiers","slice","forEach","warn","fn","enabled","isFunction","data","reference","state","isDestroyed","getReferenceOffsets","options","positionFixed","computeAutoPlacement","flip","originalPlacement","getPopperOffsets","position","runModifiers","isCreated","onUpdate","onCreate","some","name","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","isModifierEnabled","removeAttribute","willChange","getSupportedPropertyName","disableEventListeners","removeOnDestroy","removeChild","defaultView","isBody","target","addEventListener","passive","push","updateBound","scrollElement","scrollParents","eventsEnabled","setupEventListeners","scheduleUpdate","removeEventListener","removeEventListeners","n","isNaN","isFinite","unit","isNumeric","value","attributes","setAttribute","instance","arrowElement","arrowStyles","round","floor","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","prefixedProperty","invertTop","invertLeft","arrow","requesting","isRequired","requested","isModifierRequired","querySelector","isVertical","len","sideCapitalized","toLowerCase","altSide","opSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","min","validPlacements","placements","counter","index","concat","reverse","BEHAVIORS","flipped","placementOpposite","flipOrder","behavior","FLIP","CLOCKWISE","clockwise","COUNTERCLOCKWISE","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","getOppositeVariation","str","size","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","mergeWithPrevious","op","reduce","toValue","index2","basePlacement","parseOffset","transformProp","popperStyles","transform","priority","check","escapeWithReference","shiftvariation","shiftOffsets","bound","hide","subtractLength","Popper","requestAnimationFrame","update","debounce","bind","Defaults","jquery","modifierOptions","onLoad","enableEventListeners","destroy","Utils","global","PopperUtils"],"mappings":"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"} \ No newline at end of file diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/index.d.ts b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/index.d.ts index e83ea0c8d..cde579ba2 100644 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/index.d.ts +++ b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/index.d.ts @@ -1,119 +1,140 @@ -// Type definitions for popper.js 1.10 -// Project: https://github.com/FezVrasta/popper.js/ -// Definitions by: edcarroll , ggray , rhysd , joscha , seckardt , marcfallows - -// This file only declares the public portions of the API. -// It should not define internal pieces such as utils or modifier details. - -export type Position = 'top' | 'right' | 'bottom' | 'left'; - -export type Placement = 'auto-start' - | 'auto' - | 'auto-end' - | 'top-start' - | 'top' - | 'top-end' - | 'right-start' - | 'right' - | 'right-end' - | 'bottom-end' - | 'bottom' - | 'bottom-start' - | 'left-end' - | 'left' - | 'left-start'; - -export type Boundary = 'scrollParent' | 'viewport' | 'window'; - -export type Behavior = 'flip' | 'clockwise' | 'counterclockwise'; - -export type ModifierFn = (data: Data, options: Object) => Data; - -export interface BaseModifier { - order?: number; - enabled?: boolean; - fn?: ModifierFn; +/** + * @fileoverview This file only declares the public portions of the API. + * It should not define internal pieces such as utils or modifier details. + * + * Original definitions by: edcarroll , ggray , rhysd , joscha , seckardt , marcfallows + */ + +/** + * This kind of namespace declaration is not necessary, but is kept here for backwards-compatibility with + * popper.js 1.x. It can be removed in 2.x so that the default export is simply the Popper class + * and all the types / interfaces are top-level named exports. + */ +declare namespace Popper { + export type Position = 'top' | 'right' | 'bottom' | 'left'; + + export type Placement = 'auto-start' + | 'auto' + | 'auto-end' + | 'top-start' + | 'top' + | 'top-end' + | 'right-start' + | 'right' + | 'right-end' + | 'bottom-end' + | 'bottom' + | 'bottom-start' + | 'left-end' + | 'left' + | 'left-start'; + + export type Boundary = 'scrollParent' | 'viewport' | 'window'; + + export type Behavior = 'flip' | 'clockwise' | 'counterclockwise'; + + export type ModifierFn = (data: Data, options: Object) => Data; + + export interface BaseModifier { + order?: number; + enabled?: boolean; + fn?: ModifierFn; + } + + export interface Modifiers { + shift?: BaseModifier; + offset?: BaseModifier & { + offset?: number | string, + }; + preventOverflow?: BaseModifier & { + priority?: Position[], + padding?: number, + boundariesElement?: Boundary | Element, + escapeWithReference?: boolean + }; + keepTogether?: BaseModifier; + arrow?: BaseModifier & { + element?: string | Element, + }; + flip?: BaseModifier & { + behavior?: Behavior | Position[], + padding?: number, + boundariesElement?: Boundary | Element, + }; + inner?: BaseModifier; + hide?: BaseModifier; + applyStyle?: BaseModifier & { + onLoad?: Function, + gpuAcceleration?: boolean, + }; + computeStyle?: BaseModifier & { + gpuAcceleration?: boolean; + x?: 'bottom' | 'top', + y?: 'left' | 'right' + }; + + [name: string]: (BaseModifier & Record) | undefined; + } + + export interface Offset { + top: number; + left: number; + width: number; + height: number; + } + + export interface Data { + instance: Popper; + placement: Placement; + originalPlacement: Placement; + flipped: boolean; + hide: boolean; + arrowElement: Element; + styles: CSSStyleDeclaration; + boundaries: Object; + offsets: { + popper: Offset, + reference: Offset, + arrow: { + top: number, + left: number, + }, + }; + } + + export interface PopperOptions { + placement?: Placement; + positionFixed?: boolean; + eventsEnabled?: boolean; + modifiers?: Modifiers; + removeOnDestroy?: boolean; + + onCreate?(data: Data): void; + + onUpdate?(data: Data): void; + } + + export interface ReferenceObject { + clientHeight: number; + clientWidth: number; + + getBoundingClientRect(): ClientRect; + } } -export interface Modifiers { - shift?: BaseModifier; - offset?: BaseModifier & { - offset?: number | string, - }; - preventOverflow?: BaseModifier & { - priority?: Position[], - padding?: number, - boundariesElement?: Boundary | Element, - escapeWithReference?: boolean - }; - keepTogether?: BaseModifier; - arrow?: BaseModifier & { - element?: string | Element, - }; - flip?: BaseModifier & { - behavior?: Behavior | Position[], - padding?: number, - boundariesElement?: Boundary | Element, - }; - inner?: BaseModifier; - hide?: BaseModifier; - applyStyle?: BaseModifier & { - onLoad?: Function, - gpuAcceleration?: boolean, - }; - computeStyle?: BaseModifier & { - gpuAcceleration?: boolean; - x?: 'bottom' | 'top', - y?: 'left' | 'right' - }; - - [name: string]: (BaseModifier & Record) | undefined; -} - -export interface Offset { - top: number; - left: number; - width: number; - height: number; -} - -export interface Data { - instance: Popper; - placement: Placement; - originalPlacement: Placement; - flipped: boolean; - hide: boolean; - arrowElement: Element; - styles: CSSStyleDeclaration; - boundaries: Object; - offsets: { - popper: Offset, - reference: Offset, - arrow: { - top: number, - left: number, - }, - }; -} - -export interface PopperOptions { - placement?: Placement; - positionFixed?: boolean; - eventsEnabled?: boolean; - modifiers?: Modifiers; - removeOnDestroy?: boolean; - - onCreate?(data: Data): void; - - onUpdate?(data: Data): void; -} - -export interface ReferenceObject { - clientHeight: number; - clientWidth: number; - - getBoundingClientRect(): ClientRect; -} +// Re-export types in the Popper namespace so that they can be accessed as top-level named exports. +// These re-exports should be removed in 2.x when the "declare namespace Popper" syntax is removed. +export type Position = Popper.Position; +export type Placement = Popper.Placement; +export type Boundary = Popper.Boundary; +export type Behavior = Popper.Behavior; +export type ModifierFn = Popper.ModifierFn; +export type BaseModifier = Popper.BaseModifier; +export type Modifiers = Popper.Modifiers; +export type Offset = Popper.Offset; +export type Data = Popper.Data; +export type PopperOptions = Popper.PopperOptions; +export type ReferenceObject = Popper.ReferenceObject; declare class Popper { static modifiers: (BaseModifier & { name: string })[]; diff --git a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.js b/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.js deleted file mode 100644 index 4d9b3a258..000000000 --- a/root/programs/CS/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Scripts/jquery-3.3.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="
",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("