Application.GetCacheStatusForProject プロパティ (Project)

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 列挙型を参照してください。 たとえば、値 4pjCacheJobStateSuccess 定数です。 プロジェクトに変更が加えられていないときに 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 のサポートおよびフィードバックを参照してください。