次の方法で共有


Application.GetCacheStatusForProject プロパティ (Project)

Project Professionalのアクティブ キャッシュが Project Server キュー システムに送信する指定したジョブの状態を取得します。 読み取り専用 PjCacheJobState

構文

expression. GetCacheStatusForProject

Application オブジェクトを表す変数。

パラメーター

名前 必須 / オプション データ型 説明
ProjectName 必須 String プロジェクトの名前。は、アクティブなプロジェクトまたは開いている別のプロジェクトにすることができます。
ProjectJobType 必須 PjJobType 保存、発行、またはチェックイン操作の PjJobType クラスの定数の 1 つを指定できます。

注釈

Project Professionalを使用して、更新プログラムの保存、発行、プロジェクトのチェックインなど、Project Server 内のいずれかのキュー メソッドを使用する操作を実行すると、Project Professional キャッシュは Project Server キュー システムにジョブ要求を送信します。 キュー ジョブの状態は、GetCacheStatusForProject プロパティによって公開されます。

次の例の TestCacheStatus マクロは、アクティブなプロジェクトを保存し、 WaitForJob を 呼び出してキューが正常に完了するのを待ってから、プロジェクトを発行します。 WaitForJob マクロは、GetCacheStatusForProject を呼び出してジョブの状態を定期的にチェックし、ジョブの状態をイミディエイト ウィンドウに出力します。 同じ状態が 10 回以上連続して検出された場合、 WaitForJob マクロは問題があると見なして終了します。 この例では、64 ビット の Project インストールまたは 32 ビット の Project インストールで実行できる Sleep メソッドを使用します。

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 のサポートおよびフィードバックを参照してください。