From 012ec9d01016faa0a6ee0cbbae169311b959897d Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Mon, 19 Dec 2022 09:13:14 +0300 Subject: [PATCH] Basic remote database implementation --- src/AddIn/AddIn.cs | 2 ++ src/AddIn/Functions.cs | 66 ++++++++++++++++++++++++++++++++++++++ src/RehauSku.Assist.csproj | 3 ++ src/packages.config | 1 + 4 files changed, 72 insertions(+) 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 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>(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 @@ ..\packages\ExcelDna.Interop.15.0.0\lib\net452\Microsoft.Vbe.Interop.dll True + + ..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll + ..\packages\ExcelDna.Interop.15.0.0\lib\net452\Office.dll True 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 @@ + \ No newline at end of file