共用方式為


Application.GetCacheStatusForProject 屬性 (Project)

取得指定工作狀態,該快取在 Project 專業版中傳送至 Project 伺服器佇列系統。 唯讀的 PjCacheJobState

語法

expressionGetCacheStatusForProject

expression 代表 Application 物件的變數。

參數

名稱 必要/選用 資料類型 描述
ProjectName 必要 字串 該計畫名稱;可以是目前進行中的專案,也可以是其他尚未開放的專案。
ProjectJobType 必要 PjJobType 可以是儲存、發佈或簽入操作的 PjJobType 常數之一。

註解

當你使用 Project 專業版執行使用 Project Server 中佇列方法的操作時,例如儲存更新、發布或檢查專案,Project 專業版快取會向 Project Server 佇列系統發送工作請求。 GetCacheStatusForProject 屬性會揭露佇列工作的狀態。

範例

以下範例中的 TestCacheStatus 巨集會儲存活動中的專案,呼叫 WaitForJob 等待佇列成功完成,然後發佈專案。 WaitForJob 巨集會定期透過呼叫 GetCacheStatusForProject 檢查工作狀態,並將工作狀態列印到即時視窗。 如果連續超過十次發現相同狀態, WaitForJob 巨集會假設有問題並退出。 範例中使用了一種 睡眠方法, 可在 64 位元 Project 安裝或 32 位元 Project 安裝中執行。

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 支援與意見反應