Project Professional のアクティブ キャッシュが Project Server キュー システムに送信する指定されたジョブの状態を取得します。 読み取り専用の PjCacheJobState。
構文
expression. GetCacheStatusForProject
式Application オブジェクトを表す変数。
パラメーター
| 名前 | 必須 / オプション | データ型 | 説明 |
|---|---|---|---|
| ProjectName | 必須 | String | プロジェクトの名前。アクティブなプロジェクト、または開いている別のプロジェクトを指定できます。 |
| ProjectJobType | 必須 | PjJobType | 保存、発行、またはチェックイン操作の PjJobType 定数のいずれかになります。 |
注釈
Project Professional を使用して、更新プログラムの保存、発行、プロジェクトのチェックインなど、Project Server のキュー メソッドのいずれかを使用する操作を実行すると、Project Professional キャッシュはジョブ要求を Project Server キュー システムに送信します。 キュー ジョブの状態は、GetCacheStatusForProject プロパティによって公開されます。
例
次の例の TestCacheStatus マクロは、アクティブなプロジェクトを保存し、 WaitForJob を呼び出してキューが正常に終了するのを待ってから、プロジェクトを発行します。 WaitForJob マクロは、GetCacheStatusForProject を呼び出してジョブの状態を定期的にチェックし、ジョブの状態を即時ウィンドウに出力します。 同じステータスが 10 回以上連続して検出された場合、 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 を実行すると、ジョブの保存状態は pjCacheJobStateInvalid 定数の値である -1 として何度も繰り返されます。
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 のサポートおよびフィードバックを参照してください。