В прошлом году делал внутренний проект по автоматизации работы с корпоративным 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).
Комментариев нет:
Отправить комментарий