QueueSystem.ReadJobStatus 方法

Project Server 队列服务中获取指定作业的状态。

命名空间:  WebSvcQueueSystem
程序集:  ProjectServerServices(位于 ProjectServerServices.dll 中)

语法

声明
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/QueueSystem/ReadJobStatus", 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 Function ReadJobStatus ( _
    qsrDS As QueueStatusRequestDataSet, _
    includeWaitTime As Boolean, _
    sortColumn As SortColumn, _
    sortOrder As SortOrder _
) As QueueStatusDataSet
用法
Dim instance As QueueSystem
Dim qsrDS As QueueStatusRequestDataSet
Dim includeWaitTime As Boolean
Dim sortColumn As SortColumn
Dim sortOrder As SortOrder
Dim returnValue As QueueStatusDataSet

returnValue = instance.ReadJobStatus(qsrDS, _
    includeWaitTime, sortColumn, sortOrder)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/QueueSystem/ReadJobStatus", 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 QueueStatusDataSet ReadJobStatus(
    QueueStatusRequestDataSet qsrDS,
    bool includeWaitTime,
    SortColumn sortColumn,
    SortOrder sortOrder
)

参数

  • includeWaitTime
    类型:System.Boolean

    如果true,包括预期的等待时间字段。

返回值

类型:WebSvcQueueSystem.QueueStatusDataSet
对于每个作业的QueueStatusDataSet.StatusRow数据的请求作业的状态。

备注

ReadJobStatus可以返回特定作业或一组具有的相同的跟踪 GUID 的作业的状态数据。

使用队列的 PSI 方法开头的单词队列中的方法名称。若要设置的跟踪 GUID 使用项目或时间表队列的 PSI 方法,将添加到的每个用于队列方法调用的 PSI Web 服务的 SOAP 标头的跟踪 GUID。

Project Server 权限

权限

说明

ManageQueue

允许用户管理 Project Server 队列。全局权限。

示例

下面的过程演示如何修改 Project Web 服务的WebRequest方法。

向 Project PSI 呼叫的 SOAP 标头中添加跟踪 GUID:

  1. 设置 Project Web 服务 (https://ServerName/ProjectServerName/_vti_bin/psi/project.asmx) 的 Web 引用。例如,名称 Web 引用ProjectWS。

  2. 添加从ProjectWS.Project类派生的类。例如,名称类ProjectDerived。

  3. 添加私有静态类成员的 GUID 值。例如,名称成员trackingUid。

    using System;
    using System.Net;
    
    namespace SomeNamespace.ProjectWS
    {
        class ProjectDerived : Project
        {
            private static Guid trackingUid = Guid.Empty;
            . . .
        }
    }
    
  4. 将公用方法添加到设置trackingUid,如下面的代码的值的ProjectDerived类。

    public static void SetTrackingGuid(Guid track)
    {
        trackingUid = track;
    }
    
  5. 重写GetWebRequest方法,并向的 SOAP 标头添加跟踪 GUID。

    protected override WebRequest GetWebRequest(Uri uri)
    {
        WebRequest webRequest = base.GetWebRequest(uri);
        webRequest.Headers.Add("PSTrackingGuid", trackingUid.ToString());
    
        return webRequest;
    }
    

    备注

    Headers.Add方法中的名称参数必须被拼写"PSTrackingGuid"完全按照所示。

  6. 在其他类中的应用程序,创建并初始化ProjectDerived对象呼叫到 Project Web 服务,例如:

    private static SomeNameSpace.ProjectWS.ProjectDerived projectDerived = 
        new SomeNameSpace.ProjectWS.ProjectDerived();
    . . .
        projectDerived.Url = "https://ServerName/ProjectServerName/_vti_bin/Project.asmx";
        projectDerived.Credentials = CredentialCache.DefaultCredentials;
    
    

在以下示例中的GetStatusOfQueueJobs方法是在名为QueueSystemUtilities类。GetStatusOfQueueJobs是ReadJobStatusSimple在示例相同的方法名称的重载。该方法返回具有相同的跟踪 ID 的所有作业的状态由trackingGuid参数指定的组中的作业。QueueSystemWS是QueueSystem Web 引用一个任意名称。

public QueueSystemWS.QueueStatusDataSet GetStatusOfQueueJobs(
    QueueSystemWS.QueueSystem q,
    Guid jobGuid,
    Guid trackingGuid, 
    int jobState,
    int msgType,
    QueueSystemWS.SortColumn sortColumn,
    QueueSystemWS.SortOrder sortOrder,
    bool includeWaitTime)
{
    QueueSystemWS.QueueStatusRequestDataSet dsQStatusRequest = 
        new QueueSystemWS.QueueStatusRequestDataSet();
    QueueSystemWS.QueueStatusRequestDataSet.StatusRequestRow qStatusRow =
        dsQStatusRequest.StatusRequest.NewStatusRequestRow();

    qStatusRow.JobGUID = jobGuid;
    qStatusRow.JobGroupGUID = trackingGuid;
    if (jobState != 0) 
        qStatusRow.JobCompletionState = jobState;
    if (msgType != 0)
        qStatusRow.MessageType = msgType;
    dsQStatusRequest.StatusRequest.AddStatusRequestRow(qStatusRow);

    QueueSystemWS.QueueStatusDataSet dsQStatus = q.ReadJobStatus(dsQStatusRequest, 
        includeWaitTime, 
        sortColumn, 
        sortOrder);
    return dsQStatus;
}

下面的代码片段调用正常的 PSI 方法Project对象将跟踪 GUID 添加到的 SOAP 标头,其中一过程中所述。

using System.Threading;
using PSLibrary = Microsoft.Office.Project.Server.Library;
. . .
private static ProjectWS.ProjectDerived projectDerived = 
            new ProjectWS.ProjectDerived();
private static QueueSystemWS.QueueSystem queueSystem =
    new QueueSystemWS.QueueSystem(); 
private static QueueSystemUtils queueSystemUtils = new QueueSystemUtils();
. . .
ProjectWS.ProjectDataSet dsProject =
    new ProjectWS.ProjectDataSet();
ProjectWS.ProjectDataSet.ProjectRow projectRow =
    dsProject.Project.NewProjectRow();

Guid projectGuid = Guid.NewGuid();
projectRow.PROJ_UID = projectGuid;
projectRow.PROJ_NAME = "Name of Project";
projectRow.PROJ_TYPE =
    Convert.ToInt32(PSLibrary.Project.ProjectType.Project);

dsProject.Project.AddProjectRow(projectRow);

// Create the queue job and tracking GUIDs, and then set the tracking 
// GUID for SOAP calls to the derived Project object.
Guid jobGuid = Guid.NewGuid();
Guid trackingGuid = Guid.NewGuid();
SomeNameSpace.ProjectWS.ProjectDerived.SetTrackingGuid(trackingGuid);

bool validateOnly = false;
// Create and save project to the Draft database. 
projectDerived.QueueCreateProject(jobGuid, dsProject, validateOnly);
// Wait a few seconds, or create a WaitForQueue method.
Thread.Sleep(3000);

ProjectWS.ProjectRelationsDataSet dsProjectRelations =
    new ProjectWS.ProjectRelationsDataSet();
jobGuid = Guid.NewGuid();

string wssUrl = "" // Default SharePoint project workspace, 
bool fullPublish = true;

// Publish the project to the Published database.
dsProjectRelations = projectDerived.QueuePublish(jobGuid, projectGuid, fullPublish, wssUrl);

Thread.Sleep(500);

jobGuid = Guid.Empty;
int jobState = (int)QueueSystemWS.JobState.Unknown;
int msgType = (int) QueueSystemWS.QueueMsgType.Unknown;
bool includeWaitTime = true;
QueueSystemWS.SortColumn sortColumn = QueueSystemWS.SortColumn.Undefined;
QueueSystemWS.SortOrder sortOrder = QueueSystemWS.SortOrder.Undefined;

WebSvcQueueSystem.QueueStatusDataSet dsQStatus = 
    queueSystemUtils.GetStatusOfQueueJobs(queueSystem, jobGuid, trackingGuid,
        jobState, msgType, sortColumn, sortOrder, includeWaitTime);
. . .

QueueCreateProject和QueuePublish呼叫使用相同的跟踪的 SOAP 标头中设置由ProjectDerived对象的 GUID。QueuePublish方法生成如已发布的项目数据发送到报告数据库的其他队列作业。QueueStatusDataSet列出具有相同的跟踪 ID 和任一已完成的处理或队列上的所有作业的状态。下表显示的某些字段QueueStatusDataSet.Status表中运行前面代码之后。

队列

ID

消息

类型

作业

完成

State

队列

位置

百分比

完整

队列

进入时间

队列

处理

Time

队列

已完成

Time

Wait

Time

1

22

4

-1

100

2011 年 6/26

14:06

2011 年 6/26

14:06

2011 年 6/26

14:06

0

1

30

3

3

100

2011 年 6/26

14:06

2011 年 6/26

14:06

0

1

24

1

4

0

2011 年 6/26

14:06

1

QueueMessageType 22 是ProjectCreate。作业不再队列 ;JobState 4 是Success。

QueueMessageType 30 是PublishNotifications。该作业已在队列中 ; 第三个JobState 3 是QueueJobProcessing。

QueueMessageType 24 是ProjectPublish。作业的第四个队列 ;JobState 1 是ReadyForProcessing。预期的等待时间为一秒。

另请参阅

引用

QueueSystem 类

QueueSystem 成员

WebSvcQueueSystem 命名空间

ReadJobStatusSimple

其他资源

How to: Use the QueueSystem Service