15.05.2018

Project Server: ожидание выполнения задачи в очереди

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

Комментариев нет:

Отправить комментарий