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 列挙型を参照してください。 たとえば、値 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 のサポートおよびフィードバックを参照してください。