Empiece a realizar un seguimiento de su progreso
Inicio de Trailhead
Inicio de Trailhead
Estimación de tiempo

Monitorear Apex asíncrono

Objetivos de aprendizaje

Después de completar esta unidad, tendrá conocimientos sobre lo siguiente:
  • Cómo monitorear los distintos tipos de trabajos.
  • Cómo usar la cola flexible.

Monitoreo de trabajos asíncronos

La gran ventaja de los trabajos asíncronos es que se desarrollan silenciosamente en segundo plano. Por otra parte, la complejidad de los trabajos asíncronos es que se desarrollan silenciosamente en segundo plano. Por suerte, hay varias formas de monitorear lo que ocurre con los trabajos entre bastidores.

Puede monitorear el estado de todos los trabajos de la interfaz de usuario de Salesforce. En Configuración, ingrese Trabajos en el cuadro Búsqueda rápida y, a continuación, seleccione Trabajos de Apex.

La página Trabajos de Apex muestra todos los trabajos de Apex asincrónicos con información acerca de la ejecución de cada uno de los trabajos. La siguiente captura de pantalla muestra un trabajo de método futuro y dos trabajos de lote completados de la misma clase Apex por lotes.

Trabajos de Apex

Si tiene muchos trabajos por lotes, use la página Trabajos por lotes para ver solo los trabajos por lotes. Para abrir la página Trabajos por lotes, haga clic en el vínculo que se encuentra al principio de la página Trabajos por lotes. Use el control deslizante de la página Trabajos por lotes para seleccionar un intervalo de fechas específico y restringir la lista de trabajos por lotes mostrados. También puede ver trabajos pasados que aún no se hayan eliminado. La página Trabajos por lotes agrupa los trabajos por clase de lote.

Trabajo por lotes de Apex

Haga clic en la opción Más información junto al Id. de clase si desea obtener más información sobre los trabajos ejecutados para dicha clase. Esta imagen muestra la ventana emergente que aparece tras hacer clic en Más información. Esta clase de lote tiene dos trabajos que se ejecutaron correctamente.

Información acerca de trabajos principales

Además, puede monitorear el estado de los trabajos de Apex en la cola flexible de Apex y reordenarlos para controlar qué trabajos se procesan primero. En Configuración, ingrese Trabajos en el cuadro Búsqueda rápida y, a continuación, seleccione Cola flexible de Apex.

Monitoreo de trabajos futuros

Los trabajos futuros se muestran en la página Trabajos de Apex como cualquier otro trabajo. Sin embargo, los trabajos futuros no forman parte de la cola flexible actual.

Puede consultar AsyncApexJob para buscar su trabajo, pero hay una limitación. Puesto que el lanzamiento de trabajos futuros no devuelve ningún Id., tendrá que filtrar por otros campos como, por ejemplo, MethodName o JobType, para buscar su trabajo. Encontrará algunas consultas SOQL de ejemplo en esta publicación de Stack Exchange que pueden ser de utilidad.

Monitoreo de trabajos en cola con SOQL

Para consultar la información del trabajo enviado, realice una consulta SOQL en AsyncApexJob. Para ello, filtre por el Id. de trabajo que devuelve el método System.enqueueJob.

AsyncApexJob jobInfo = [SELECT Status, NumberOfErrors
    FROM AsyncApexJob WHERE Id = :jobID];

Monitoreo de trabajos en cola con la cola flexible

La cola flexible de Apex le permite enviar hasta 100 trabajos por lotes para su ejecución. Cualquier trabajo enviado para su ejecución se cambia al estado de espera y se incluye en la cola flexible de Apex. Hasta 100 trabajos por lotes pueden estar en el estado de espera.

Los trabajos se procesan de modo que el primero en entrar es el primero en salir en el orden en el que se envían. Puede examinar el orden de la cola actual y cambiar el orden de la cola para poder mover un trabajo importante al principio o mover trabajos menos importantes al final.

Cuando los recursos del sistema están disponibles, el sistema selecciona el siguiente trabajo de la parte superior de la cola flexible de Apex y lo mueve a la cola de trabajos por lotes. El sistema puede procesar hasta cinco trabajos en cola o activos simultáneamente para cada organización. El estado de los trabajos movidos cambia de En espera a En cola. Los trabajos en cola se ejecutan cuando el sistema está listo para procesar trabajos nuevos. Al igual que ocurre con otros trabajos, puede monitorear los trabajos en cola en la página Trabajos de Apex.

Monitoreo de trabajos programados

Una vez que se ha programado un trabajo de Apex, puede obtener más información sobre dicho trabajo mediante la ejecución de una consulta SOQL en CronTrigger. En el siguiente ejemplo se consulta el número de veces que se ha ejecutado el trabajo y la fecha y la hora de la programación para volver a ejecutar el trabajo. Se usa una variable jobID que devuelve el método System.schedule.

CronTrigger ct = [SELECT TimesTriggered, NextFireTime FROM CronTrigger WHERE Id = :jobID];

Si va a realizar esta consulta en el método de ejecución de la clase programable, puede obtener el Id. del trabajo actual mediante la llamada a getTriggerId en la variable de argumento SchedulableContext.

global class DoAwesomeStuff implements Schedulable {

    global void execute(SchedulableContext sc) {
        // some awesome code
        CronTrigger ct = [SELECT TimesTriggered, NextFireTime FROM CronTrigger WHERE Id = :sc.getTriggerId()];
    }
    
}

Además, puede obtener el nombre del trabajo y el tipo de trabajo del registro CronJobDetail asociado al registro CronTrigger. Para ello, use la relación CronJobDetail al realizar una consulta en CronTrigger. En este ejemplo se recupera el registro CronTrigger más reciente con el nombre y el tipo de trabajo de CronJobDetail.

CronTrigger job = [SELECT Id, CronJobDetail.Id, CronJobDetail.Name, CronJobDetail.JobType FROM CronTrigger ORDER BY CreatedDate DESC LIMIT 1];

Otra posibilidad es consultar CronJobDetail directamente para obtener el nombre y el tipo de trabajo. En el siguiente ejemplo se obtienen el nombre y el tipo de trabajo para el registro CronTrigger consultado en el ejemplo anterior. El Id. del registro CronJobDetail correspondiente se obtiene mediante la expresión CronJobDetail.Id del registro CronTrigger.

CronJobDetail ctd = [SELECT Id, Name, JobType FROM CronJobDetail WHERE Id = :job.CronJobDetail.Id];

Por último, para obtener el conteo total de todos los trabajos de Apex programados, excluidos los demás tipos de trabajos programados, realice la siguiente consulta. Observe que se especifica el valor '7' para el tipo de trabajo, el cual se corresponde con el tipo de trabajo de Apex programado. Consulte CronJobDetail en la sección Recursos a continuación para ver una lista de todos los tipos.

SELECT COUNT() FROM CronTrigger WHERE CronJobDetail.JobType = '7’

Recursos