取得指定工作狀態,該快取在 Project 專業版中傳送至 Project 伺服器佇列系統。 唯讀的 PjCacheJobState。
語法
expression。 GetCacheStatusForProject
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 列舉。 例如,值 4 是 pjCacheJobStateSuccess 常數。 如果你在專案沒有變動時執行 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 支援與意見反應。