Application.GetCacheStatusForProject 属性 (Project)

获取Project Professional中的活动缓存发送到 Project Server 队列系统的指定作业的状态。 只读 PjCacheJobState

语法

expressionGetCacheStatusForProject

expression:表示 Application 对象的变量。

参数

名称 必需/可选 数据类型 说明
ProjectName 必需 字符串 项目的名称;可以是活动项目或打开的其他项目。
ProjectJobType 必需 PjJobType 可以是保存、发布或签入操作的 PjJobType 常量之一。

备注

使用 Project Professional 执行使用 Project Server 中的队列方法之一的操作(例如保存更新、发布或签入项目)时,Project Professional缓存会将作业请求发送到 Project Server 队列系统。 GetCacheStatusForProject 属性公开该队列作业的状态。

示例

以下示例中的 TestCacheStatus 宏保存活动项目,调用 WaitForJob 等待队列成功完成,然后发布项目。 WaitForJob 宏通过调用 GetCacheStatusForProject 定期检查作业状态,并将作业状态输出到“即时”窗口。 如果连续十次以上发现相同状态, 则 WaitForJob 宏假定存在问题并退出。 该示例使用可在 64 位 Project 安装或 32 位 Project 安装中运行的 Sleep 方法。

Option Explicit

#If Win64 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongLong)
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

' Save and publish the active project; wait for the queue after each operation.
Sub TestCacheStatus()
    Const millisec2Wait = 500   ' Number of milliseconds to sleep between status messages.
    
    Application.FileSave
    If WaitForJob(PjJobType.pjCacheProjectSave, millisec2Wait) Then
        Debug.Print "Save completed ..."
    
        Application.Publish
        If WaitForJob(PjJobType.pjCacheProjectPublish, millisec2Wait) Then
            Debug.Print "Publish completed: " & ActiveProject.Name
        End If
    Else
        Debug.Print "Save job not completed"
    End If
End Sub

' Check the cache job state for a save, publish, or check-in operation.
Function WaitForJob(job As PjJobType, msWait As Long) As Boolean
    ' Number of times the same job status is repeated until WaitForJob exits with error.
    Const repeatedLimit = 10
    
    Dim jobState As Integer
    Dim previousJobState As Integer
    Dim bail As Integer
    Dim jobType As String
    
#If Win64 Then
    Dim millisec As LongLong
    millisec = CLngLng(msWait)
#Else
    Dim millisec As Long
    millisec = msWait
#End If

    WaitForJob = True
    
    Select Case job
        Case PjJobType.pjCacheProjectSave
            jobType = "Save"
        Case PjJobType.pjCacheProjectPublish
            jobType = "Publish"
        Case PjJobType.pjCacheProjectCheckin
            jobType = "Checkin"
        Case Else
            jobType = "unknown"
    End Select

    bail = 0
    
    If (jobType = "unknown") Then
        WaitForJob = False
    Else
        Do
            jobState = Application.GetCacheStatusForProject(ActiveProject.Name, job)
            Debug.Print jobType & " job state: " & jobState
            
            ' Bail out if something is wrong.
            If jobState = previousJobState Then bail = bail + 1
            If bail > repeatedLimit Then
                WaitForJob = False
                Exit Do
            End If
            
            previousJobState = jobState
            
            Sleep (msWait)
        Loop While Not (jobState = PjCacheJobState.pjCacheJobStateSuccess)
    End If
End Function

下面是状态消息之间等待 500 毫秒的输出。 如果网络延迟较大,请设置更长的间隔等待时间。 若要查找输出值的含义,请参阅 PjCacheJobState 枚举。 例如,值 4pjCacheJobStateSuccess 常量。 如果在未对项目进行更改时运行 TestCacheStatus ,则保存作业状态将多次重复为 -1,这是 pjCacheJobStateInvalid 常量的值。

Save job state: 4
Save completed ...
Publish job state: -1
Publish job state: 3
Publish job state: 3
Publish job state: 4
Publish completed: WinProj test 1

属性值

PJCACHEJOBSTATE

另请参阅

PjCacheJobState 枚举PjJobType 枚举

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。