Поделиться через


Метод QueueSystem.CancelJobSimple

Отменяет указанное задание в службу очередей Project Server.

Пространство имен:  WebSvcQueueSystem
Сборка:  ProjectServerServices (в ProjectServerServices.dll)

Синтаксис

'Декларация
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/QueueSystem/CancelJobSimple", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/QueueSystem/",  _
    ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/QueueSystem/",  _
    Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Sub CancelJobSimple ( _
    jobUID As Guid _
)
'Применение
Dim instance As QueueSystem
Dim jobUID As Guid

instance.CancelJobSimple(jobUID)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/QueueSystem/CancelJobSimple", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/QueueSystem/", 
    ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/QueueSystem/", 
    Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public void CancelJobSimple(
    Guid jobUID
)

Параметры

  • jobUID
    Тип: System.Guid

    Очередь заданий GUID.

Замечания

CancelJobSimple вызывает CancelJob с параметрами cancelCorrelationJobs = true и cancelSendIncompleteJobs = false.

Примечание

Есть возможное состояние состязания между Проверка состояния задания и вызов CancelJobSimple. Когда приложение проверяет состояние задания, может быть ReadyForProcessing. Прежде чем вызывать CancelJobSimpleсостояние можно переключиться на Processing или любое другое состояние.

Разрешения Project Server

Разрешение

Описание

ManageQueue

Позволяет пользователю управлять очередей Project Server. Глобальное разрешение.

Примеры

For another example of a QueueSystem utility class, see How to: Use the QueueSystem Service.

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml;
using System.Threading;

namespace SomeNamespace
{
    class QueueSystemUtils
    {
        // Wait 2 seconds between each check for job completion.
        private const int INCREMENTALSLEEPTIME = 2; 

        public QueueSystemUtils()
        {
        }

        /// <summary>
        /// Wait a specified time for the Project Server Queuing service to process a job.
        /// </summary>
        /// <param name="q">QueueSystem object</param>
        /// <param name="timeOut">Maximum time to wait (seconds)</param>
        /// <param name="jobId">GUID of queue job</param>
        /// <param name="errorString">out: error from GetJobCompletionState plus status</param>
        /// <returns>true for success; false for any queue failure</returns>
        public bool WaitForQueue(WebSvcQueueSystem.QueueSystem q, 
            int timeOut, 
            Guid jobId, 
            out String statusOut)
        {
            
            int wait;                 // Number of seconds to wait
            decimal seconds;          // for reporting wait time in decimal format.
            string xmlError;          // XML error output from the queue
            string queueStatus;       // Outer XML of xmlError string.
            string status = "";       // Summary status report for output.
            bool firstPass = true;    // First iteration through the while statement.
            int timeSlept = 0;        // Total time slept (seconds).
            bool jobIsDone = false;   // The queue job completed successfully, if true.
            bool stopWait = false;    // Abort the wait, if true.
            WebSvcQueueSystem.JobState jobState; // Status of the queue job. 

            while (true)
            {
                // On the first iteration, wait the incremental sleep time  
                // or the maximum requested timeout. 
                if (firstPass)
                {
                    // Get the estimated time to wait for the queue to process the job.
                    // The output from GetJobWaitTime is in seconds.
                    wait = q.GetJobWaitTime(jobId);

                    status = string.Format("Estimated job wait time: {0} seconds", wait);

                    if (timeOut < INCREMENTALSLEEPTIME) wait = timeOut;
                    else wait = INCREMENTALSLEEPTIME;

                    firstPass = false;
                }
                else
                {
                    // If job is not done, wait the incremental sleep time.  
                    wait = INCREMENTALSLEEPTIME;
                }

                Thread.Sleep(wait * 1000); // Milliseconds

                timeSlept += wait;

                // Check job state.
                jobState = q.GetJobCompletionState(jobId, out xmlError);

                // Add the XML error output to the status.
                StringReader sr = new StringReader(xmlError);
                using (XmlReader reader = XmlReader.Create(sr))
                {
                    reader.MoveToContent();
                    queueStatus = reader.ReadOuterXml();
                }
                // Don't add an empty <errinfo> element.
                if (queueStatus != "<errinfo />") status += "\n\n" + queueStatus;

                if (jobState == WebSvcQueueSystem.JobState.Success)
                {
                    jobIsDone = true;
                }
                else if (jobState == WebSvcQueueSystem.JobState.Unknown
                    || jobState == WebSvcQueueSystem.JobState.Failed
                    || jobState == WebSvcQueueSystem.JobState.FailedNotBlocking
                    || jobState == WebSvcQueueSystem.JobState.CorrelationBlocked
                    || jobState == WebSvcQueueSystem.JobState.Canceled)
                {
                    stopWait = true;
                }

                if (!jobIsDone && timeSlept >= timeOut)
                {
                    // Cancel the job, otherwise the queue keeps processing it until it is complete.
                    q.CancelJobSimple(jobId);
                    stopWait = true;
                    status += string.Format("\n\nExceeded timeout of {0} seconds", timeOut);
                }

                if (jobIsDone || stopWait)
                {
                    // Check jobState again, might be cancelled.
                    seconds = Convert.ToDecimal(timeSlept);
                    status += string.Format(
                        "\n\nJobState: {0:G}\n\nTotal time slept: {1:N} seconds", 
                        jobState, seconds);
                    break;
                }
            }
            statusOut = status;
            return jobIsDone;
        }
    }
}

См. также

Справочные материалы

QueueSystem класс

Элементы QueueSystem

Пространство имен WebSvcQueueSystem