public NavisionClient(ILogger log, NavisionCrawlJobData navisionCrawlJobData, IRestClient client) // TODO: pass on any extra dependencies { if (navisionCrawlJobData == null) { throw new ArgumentNullException(nameof(navisionCrawlJobData)); } if (client == null) { throw new ArgumentNullException(nameof(client)); } this.log = log ?? throw new ArgumentNullException(nameof(log)); this.client = client ?? throw new ArgumentNullException(nameof(client)); // TODO use info from navisionCrawlJobData to instantiate the connection client.BaseUrl = new Uri(BaseUri); client.AddDefaultParameter("api_key", navisionCrawlJobData.ApiKey, ParameterType.QueryString); }
public override async Task <CrawlJobData> GetCrawlJobData( ProviderUpdateContext context, IDictionary <string, object> configuration, Guid organizationId, Guid userId, Guid providerDefinitionId) { if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } var navisionCrawlJobData = new NavisionCrawlJobData(); if (configuration.ContainsKey(NavisionConstants.KeyName.ApiKey)) { navisionCrawlJobData.ApiKey = configuration[NavisionConstants.KeyName.ApiKey].ToString(); } if (configuration.ContainsKey(NavisionConstants.KeyName.Url)) { navisionCrawlJobData.Url = configuration[NavisionConstants.KeyName.Url].ToString(); } if (configuration.ContainsKey(NavisionConstants.KeyName.DeltaCrawlEnabled)) { navisionCrawlJobData.DeltaCrawlEnabled = bool.Parse(configuration[NavisionConstants.KeyName.DeltaCrawlEnabled].ToString()); } if (configuration.ContainsKey(NavisionConstants.KeyName.UserName)) { navisionCrawlJobData.UserName = configuration[NavisionConstants.KeyName.UserName].ToString(); } if (configuration.ContainsKey(NavisionConstants.KeyName.Password)) { navisionCrawlJobData.Password = configuration[NavisionConstants.KeyName.Password].ToString(); } navisionCrawlJobData.ClientId = ConfigurationManager.AppSettings.GetValue <string>("Providers.NavisionClientId", null); navisionCrawlJobData.ClientSecret = ConfigurationManager.AppSettings.GetValue <string>("Providers.NavisionClientSecret", null); return(await Task.FromResult(navisionCrawlJobData)); }
public IEnumerable <T> Get <T>(string value, NavisionCrawlJobData navisionCrawlJobData) { DateTimeOffset lastCrawlFinishTime; if (navisionCrawlJobData.LastCrawlFinishTime == DateTimeOffset.Parse("1/1/0001 12:00:00 AM +00:00")) { lastCrawlFinishTime = DateTimeOffset.Parse("01/01/1753 00:00:00"); } else { lastCrawlFinishTime = navisionCrawlJobData.LastCrawlFinishTime; } var filter = $"(createdon ge {lastCrawlFinishTime:yyyy-MM-ddThh:mm:ssZ} or modifiedon ge {lastCrawlFinishTime:yyyy-MM-ddThh:mm:ssZ})"; var url = navisionCrawlJobData.Url; if (navisionCrawlJobData.DeltaCrawlEnabled) { url = navisionCrawlJobData.Url + string.Format("/api/data/v9.1/{0}?$filter={1}", value, filter); } ResultList <T> resultList = null; while (true) { using (HttpClient httpClient = new HttpClient()) { try { httpClient.Timeout = new TimeSpan(0, 2, 0); httpClient.DefaultRequestHeaders.Add("Prefer", "odata.maxpagesize=100"); httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0"); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", navisionCrawlJobData.ApiKey); HttpResponseMessage responseMessage = httpClient.GetAsync(url).Result; var content = responseMessage.Content.ReadAsStringAsync().Result; if (responseMessage.StatusCode == HttpStatusCode.Unauthorized) { //TODO Reauthenticate continue; } else if (responseMessage.StatusCode != HttpStatusCode.OK) { log.Error(() => "Connection failed " + responseMessage.StatusCode); } resultList = JsonConvert.DeserializeObject <ResultList <T> >(content, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); } catch (Exception e) { log.Error(() => e.Message); } if (resultList?.Value != null) { foreach (var item in resultList.Value) { yield return(item); } } else { break; } if (resultList.NextLink == null) { break; } } } }