Compartir a través de


Propiedad Application.GetCacheStatusForProject (Project)

Obtiene el estado de un trabajo especificado que la memoria caché activa de Project Profesional envía al sistema de cola de Project Server. PjCacheJobState de solo lectura.

Sintaxis

expresión. GetCacheStatusForProject

expresión Variable que representa un objeto Application.

Parámetros

Nombre Obligatorio/opcional Tipo de datos Descripción
ProjectName Obligatorio String Nombre del proyecto; puede ser el proyecto activo o un proyecto diferente que está abierto.
ProjectJobType Obligatorio PjJobType Puede ser una de las constantes PjJobType para la operación de guardar, publicar o proteger.

Comentarios

Cuando se usa Project Profesional para realizar una operación que usa uno de los métodos de cola en Project Server, como guardar una actualización, publicar o proteger un proyecto, la memoria caché de Project Profesional envía una solicitud de trabajo al sistema de cola de Project Server. La propiedad GetCacheStatusForProject expone el estado del trabajo de la cola.

Ejemplo:

La macro TestCacheStatus del ejemplo siguiente guarda el proyecto activo, llama a WaitForJob para esperar a que la cola finalice correctamente y, a continuación, publica el proyecto. La macro WaitForJob comprueba periódicamente el estado del trabajo llamando a GetCacheStatusForProject e imprime el estado del trabajo en la ventana Inmediato. Si encuentra el mismo estado más de diez veces seguidas, la macro WaitForJob supone que hay un problema y se cierra. En el ejemplo se usa un método Sleep que se puede ejecutar en una instalación de Project de 64 bits o en una instalación de Project de 32 bits.

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

A continuación se muestra la salida de un tiempo de espera de 500 milisegundos entre los mensajes de estado. Si la latencia de red es mayor, establezca el tiempo de espera para un intervalo más largo. Para encontrar el significado de los valores de salida, vea la enumeración PjCacheJobState . Por ejemplo, el valor 4 es la constante pjCacheJobStateSuccess . Si ejecuta TestCacheStatus cuando no se realizan cambios en el proyecto, el estado del trabajo de guardado se repite muchas veces como -1, que es el valor de la constante 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

Valor de propiedad

PJCACHEJOBSTATE

Consulte también

PjCacheJobState (enumeración)PjJobType (enumeración)

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.