Introducción a los ejemplos Batch Apex +

Comparte este artículo…

Introducción

Para escenarios de negocios que requieren que la plataforma procese más de 50000 registros, Batch Apex viene al rescate. Batch Apex facilita el procesamiento asíncrono de los registros en varios lotes o trozos y es fácil de implementar para un desarrollador.

Implementando Batch Apex

Batch Apex implementa la base de datos.interfaz por lotes. La interfaz tiene métodos Start (), Execute () y Finish () que deben implementarse en la clase Batch Apex.

  1. Método de inicio: El método de inicio es un punto de recopilación para que los registros se procesen en el método de ejecución del apex por lotes
  2. Método de ejecución: El procesamiento real de los registros tiene lugar en el método de ejecución.
  3. Método de acabado: Los métodos de finalización pueden tener acciones de procesamiento posterior al trabajo, como enviar correos electrónicos, o también se pueden usar para encadenar otra clase por lotes.

Programar el Apex por lotes

Método 1: Usar la funcionalidad de Apex de programación de OOTB

Pasos:

  1. Haga clic en Configuración y busque clases Apex en el cuadro búsqueda rápida.
  2. Haga clic en el botón del ápice de programación en el panel superior.

3. Rellene la información en la página de registro de Apex de programación y guárdela. La clase apex debe ser la clase Scheduler que implementa el método executebatch(batch).

Fragmento de código para la clase Scheduler:

global class AccBatchScheduleClass implements Schedulable { global void execute(SchedulableContext ctx) { AccBatchApex batch = new AccBatchApex(); database.executebatch(batch); }}

Método 2: Invocando la Clase por lotes a través de Apex Programable:

Se debe crear la clase Apex que debe implementar el apex programable. El apex Programable debe implementar el Sistema.Método Schedule () para encolar el vértice por lotes en la cola de ejecución. sistema.El método Schedule () espera tres argumentos: Nombre del trabajo de visualización, expresión Cron para la programación por lotes y nombre de la clase por lotes.

Apex programable de muestra:

Encadenamiento de Apex por lotes

Con el inicio de la versión API 29.0 y después, una clase de lote se puede encadenar a otra clase de lote. El encadenamiento del apex de lote inicia la ejecución de la clase de lote encadenado una vez que finaliza la ejecución de la clase de lote base. Como máximo, solo se pueden encadenar 5 trabajos por lotes entre sí. El fragmento de código de ejemplo para encadenar el Apex por lotes se ilustra a continuación:

Ejemplo de Apex por lotes

Caso de uso:Rellene el Estado de facturación como California para todas las Cuentas con País como EE.

Diseño de la solución: La organización tiene más de 50 mil registros que deben ser escaneados para obtener la información del Estado de facturación faltante, por lo que escribir el Apex por lotes es la solución óptima. También Disparadores, Flujos de trabajo, Creadores de procesos, etc. necesitará una operación DML para disparar, por lo que estas soluciones no se ajustan a los requisitos comerciales.

Cosas para recordar

  • Se pueden poner en cola o activar simultáneamente hasta 5 trabajos por lotes.
  • El número máximo de ejecuciones del método de Apex por lotes por período de 24 horas es de 250 000, o el número de licencias de usuario en su organización multiplicado por 200, lo que sea mayor.
  • Se puede devolver un máximo de 50 millones de registros en el objeto QueryLocator. Si se devuelven más de 50 millones de registros, el trabajo por lotes finaliza de inmediato y se marca como error.
  • Si el método de inicio de la clase batch devuelve un localizador de consultas, el parámetro de ámbito opcional de executeBatch puede tener un valor máximo de 2000.
  • Si el método de inicio de la clase batch devuelve un iterable, el valor del parámetro de ámbito no tiene límite superior.
  • Los métodos de inicio, ejecución y finalización pueden implementar hasta 100 llamadas cada uno. Implementar AllowsCallouts para habilitar llamadas desde el apex por lotes.
  • Los métodos declarados como futuros no se pueden llamar desde una clase Apex por lotes.
  • Todos los métodos de la clase deben definirse como globales o públicos.

Optimización de la implementación

  • Los trabajos de Apex por lotes se ejecutan más rápido cuando el método de inicio devuelve un objeto QueryLocator que no incluye registros relacionados a través de una subconsulta. Evitar subconsultas de relación en un localizador de consultas permite que los trabajos por lotes se ejecuten utilizando una implementación fragmentada más rápida.
  • Para garantizar una ejecución rápida de los trabajos por lotes, minimice los tiempos de llamada al servicio web y ajuste las consultas utilizadas en el código de Apex por lotes.
  • Por cada 10.000 registros Asyncapexjob, Apex crea un registro AsyncApexJob de tipo BatchApexWorker para uso interno. Al consultar todos los registros de AsyncApexJob, se recomienda filtrar los registros de tipo BatchApexWorker utilizando el JobType
  • Para un nuevo cálculo de uso compartido, se recomienda que el método execute elimine y, a continuación, vuelva a crear todo el uso compartido administrado de Apex para los registros del lote. Este proceso garantiza que el intercambio sea preciso y completo.
  • Utilice los métodos de prueba startTest y stopTest alrededor del método executeBatch para asegurarse de que finalice antes de continuar la prueba.

You might also like

Deja una respuesta

Tu dirección de correo electrónico no será publicada.