diff options
author | Sergey Chebotar <s.chebotar@gmail.com> | 2022-12-19 09:13:14 +0300 |
---|---|---|
committer | Sergey Chebotar <s.chebotar@gmail.com> | 2022-12-19 09:13:14 +0300 |
commit | 012ec9d01016faa0a6ee0cbbae169311b959897d (patch) | |
tree | bf79e8d036542f9672ecc0f50cca260f816d2bd8 | |
parent | 75e7f9aae48724fd7eea042642e8e17304c03de4 (diff) |
Basic remote database implementation
-rw-r--r-- | src/AddIn/AddIn.cs | 2 | ||||
-rw-r--r-- | src/AddIn/Functions.cs | 66 | ||||
-rw-r--r-- | src/RehauSku.Assist.csproj | 3 | ||||
-rw-r--r-- | src/packages.config | 1 |
4 files changed, 72 insertions, 0 deletions
diff --git a/src/AddIn/AddIn.cs b/src/AddIn/AddIn.cs index 1606624..a60fc9e 100644 --- a/src/AddIn/AddIn.cs +++ b/src/AddIn/AddIn.cs @@ -10,10 +10,12 @@ namespace RehauSku class AddIn : IExcelAddIn { public static Application Excel; + public static HttpClient httpClient; public void AutoOpen() { Excel = (Application)ExcelDnaUtil.Application; + httpClient = new HttpClient(); RegisterFunctions(); IntelliSenseServer.Install(); RegistryUtil.Initialize(); diff --git a/src/AddIn/Functions.cs b/src/AddIn/Functions.cs index c202a3b..54d50a5 100644 --- a/src/AddIn/Functions.cs +++ b/src/AddIn/Functions.cs @@ -1,4 +1,11 @@ using ExcelDna.Integration; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; namespace RehauSku { @@ -14,5 +21,64 @@ namespace RehauSku else return ExcelError.ExcelErrorNA; } + + [ExcelFunction(Description = "Запрос в удаленную базу данных")] + public static object RHSOLUTIONS([ExcelArgument(Name = "Запрос")] string line) + { + object result; + + result = ExcelAsyncUtil.Run("Database request", line, delegate + { + return RhDatabaseClient.GetProduct(line).GetAwaiter().GetResult(); + }); + + if (result == null) + { + return ExcelError.ExcelErrorNA; + } + + if (result.Equals(ExcelError.ExcelErrorNA)) + { + return "Загрузка..."; + } + + return result; + } + } + + public static class RhDatabaseClient + { + private static HttpClient httpClient = AddIn.httpClient; + + public static async Task<object> GetProduct(string line) + { + string request = @"https://rh.cebotari.ru/api/search?query=" + line; + + ServicePointManager.SecurityProtocol = + SecurityProtocolType.Tls12 | + SecurityProtocolType.Tls11 | + SecurityProtocolType.Tls; + + string response = await httpClient.GetStringAsync(request); + + var products = JsonConvert.DeserializeObject<IEnumerable<DbProduct>>(response); + + var product = products.FirstOrDefault(); + + if (product == null) + { + return null; + } + else + { + return $"{product.productSku} {product.name}"; + } + } + + private class DbProduct + { + public string productSku { get; set; } + public string name { get; set; } + } } }
\ No newline at end of file diff --git a/src/RehauSku.Assist.csproj b/src/RehauSku.Assist.csproj index b74f82f..2f14d69 100644 --- a/src/RehauSku.Assist.csproj +++ b/src/RehauSku.Assist.csproj @@ -52,6 +52,9 @@ <HintPath>..\packages\ExcelDna.Interop.15.0.0\lib\net452\Microsoft.Vbe.Interop.dll</HintPath> <EmbedInteropTypes>True</EmbedInteropTypes> </Reference> + <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> + <HintPath>..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> + </Reference> <Reference Include="Office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL"> <HintPath>..\packages\ExcelDna.Interop.15.0.0\lib\net452\Office.dll</HintPath> <EmbedInteropTypes>True</EmbedInteropTypes> diff --git a/src/packages.config b/src/packages.config index 3820e62..8a005ce 100644 --- a/src/packages.config +++ b/src/packages.config @@ -6,4 +6,5 @@ <package id="ExcelDna.Interop" version="15.0.0" targetFramework="net48" /> <package id="ExcelDna.Registration" version="1.6.0" targetFramework="net48" /> <package id="Microsoft.CSharp" version="4.7.0" targetFramework="net48" /> + <package id="Newtonsoft.Json" version="13.0.2" targetFramework="net48" /> </packages>
\ No newline at end of file |