/// <remarks/> public void GetCompanyNewsAsync(GetCompanyNewsRequest GetCompanyNewsRequest) { this.GetCompanyNewsAsync(GetCompanyNewsRequest, null); }
/// <remarks/> public void GetCompanyNewsAsync(GetCompanyNewsRequest GetCompanyNewsRequest, object userState) { if ((this.GetCompanyNewsOperationCompleted == null)) { this.GetCompanyNewsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCompanyNewsOperationCompleted); } this.InvokeAsync("GetCompanyNews", new object[] { GetCompanyNewsRequest}, this.GetCompanyNewsOperationCompleted, userState); }
public static List<CompanyNewsItem> GetCompanyNews(GetCompanyNewsRequest request) { var results = new List<CompanyNewsItem>(); var exigoWebService = Exigo.WebService(); // Ensure that we have the minimum requirements var hasRequestedDepartments = (request.NewsDepartments != null && request.NewsDepartments.Length > 0); var hasRequestedNewsItems = (request.NewsItemIDs != null && request.NewsItemIDs.Length > 0); if (!hasRequestedDepartments && !hasRequestedNewsItems) { return results; } // Get the news items based on the requested settings var tasks = new List<Task>(); if (hasRequestedDepartments) { var apiItems = new List<CompanyNewsResponse>(); foreach (var department in request.NewsDepartments) { tasks.Add(Task.Factory.StartNew(() => { apiItems.AddRange(exigoWebService.GetCompanyNews(new Common.Api.ExigoWebService.GetCompanyNewsRequest { DepartmentType = department, StartDate = request.StartDate, EndDate = request.EndDate }).CompanyNews); })); } Task.WaitAll(tasks.ToArray()); tasks.Clear(); // Convert the news items to our model results = apiItems.Select(apiItem => (CompanyNewsItem)apiItem).ToList(); } else if (hasRequestedNewsItems) { var apiItems = new List<GetCompanyNewsItemResponse>(); foreach (var newsItemID in request.NewsItemIDs) { tasks.Add(Task.Factory.StartNew(() => { apiItems.Add(exigoWebService.GetCompanyNewsItem(new GetCompanyNewsItemRequest() { NewsID = newsItemID })); })); } Task.WaitAll(tasks.ToArray()); tasks.Clear(); // Convert the news items to our model results = apiItems.Select(apiItem => (CompanyNewsItem)apiItem).ToList(); } // Now that we have the results, order them and filter out the ones we don't need results = results.OrderByDescending(c => c.CreatedDate).ToList(); if(hasRequestedDepartments && request.RowCount > 0) { results = results.Skip(request.Skip).Take(request.Take).ToList(); } // Fetch the bodies of each news item if applicable if (hasRequestedDepartments && request.IncludeBody) { foreach (var result in results) { tasks.Add(Task.Factory.StartNew(() => { var apiItemDetail = exigoWebService.GetCompanyNewsItem(new GetCompanyNewsItemRequest() { NewsID = result.NewsItemID }); result.Body = apiItemDetail.Description; })); } Task.WaitAll(tasks.ToArray()); tasks.Clear(); } return results; }