Exemple #1
0
        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);
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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;
                    }
                }
            }
        }