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 { public class Functions { [ExcelFunction(Description = "Получение корректного артикула из строки")] public static object GETRAUSKU([ExcelArgument(Name = "\"Строка\"", Description = "строка, содержащая актикул")] string line) { if (RauSku.TryParse(line, out RauSku rausku)) { return rausku.ToString(); } 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; } } } }