В прошлом году делал внутренний проект по автоматизации работы с корпоративным Project Server. Весьма интересное занятие с учетом того, что некоторые вещи не так однозначны, и не всегда поведение системы соответствует описанному в документации. В процессе работы методом проб и ошибок было получено большое количество наработок, которые могут быть полезны. Вот, например, способ реализации ожидания выполнения задачи в очереди
private void WaitForQueue(Guid jobId) { bool jobDone = false; int wait = ServicesManager.QueueSystemClient.GetJobWaitTime(jobId); Thread.Sleep(wait * 1000); do { string errorString; JobState jobState = ServicesManager.QueueSystemClient.GetJobCompletionState(jobId, out errorString); if (jobState == JobState.Success) { jobDone = true; } else { if (jobState.IsInEnumsList(JobState.Unknown, JobState.Failed, JobState.FailedNotBlocking, JobState.CorrelationBlocked, JobState.Canceled)) { throw new Exception("Queue request " + jobState + " for Job ID " + jobId + ".\r\n" + errorString); } else { Thread.Sleep(2000); } } } while (!jobDone); }Здесь jobId - идентификатор работы, ServicesManager - контейнер подключений к службам служб Project Server (PSI).
Комментариев нет:
Отправить комментарий