List <Case> GetCases() { using (var repository = new Repository <DbContext>()) //создаю репозиторий для работы с БД { // вычитываю дату изменения последнего тикета из БД var lastProcessedCase = repository.GetList <Issue>().OrderByDescending(p => p.updated_at).FirstOrDefault(); var lastProcessedTime = lastProcessedCase != null ? lastProcessedCase.updated_at : new DateTime(1900, 1, 1); //если тикетов в БД нет, то начало века var result = new List <Case>(); int casePage = 0; while (true) { var casesFromCurrentPage = OmnideskClient.GetCases(++casePage, 100); //получаю по 100 заявки, начиная с 1 страницы Thread.Sleep(int.Parse(intervalParam.Value)); //пауза, чтобы не заспамить API if (casesFromCurrentPage == null) { break; //если null, значит прочитали всё } result.AddRange(casesFromCurrentPage); //добавляю к результату полученные заявки if (casesFromCurrentPage.Count < 100) { break; //если получили меньше 100 заявок - значит прочитали все } if (casesFromCurrentPage.Last().updated_at < lastProcessedTime) { break; //проверяем, нет ли в БД заявок свежее, чем мы получили } } return(result); } }
private void button_Click(object sender, RoutedEventArgs e) { var issues = OmnideskClient.GetCases(Int32.Parse(pageTextBox.Text), Int32.Parse(countTextBox.Text)); int i = 0; foreach (var issue in issues) { textBox.Text += ++i + " " + issue.case_number + " " + issue.case_id + " " + issue.subject + " " + issue.created_at + " " + issue.updated_at + System.Environment.NewLine; } }