Apex por lotes en Salesforce

Apex por lotes en Salesforce
En Salesforce, Batch Apex es un proceso asincrónico en el que cada proceso se ejecuta en un hilo diferente; Por eso es un proceso asincrónico. Usando esto, podemos actualizar en masa y eliminar los registros a la vez. En comparación con el proceso sincrónico, los límites del gobernador son más para este proceso asíncrono (ya que cada proceso se ejecuta en su propio hilo). Como parte de este tutorial, discutiremos cómo insertar en masa, actualización masiva y eliminar masa los registros de un objeto Salesforce con ejemplos. Continuamos con discusiones basadas en escenarios en cada caso. Vamos a sumergirnos en nuestro tutorial.

Guión:

Sravan dirige una empresa y está utilizando Salesforce Org para rastrear los salarios de sus empleados. Solo hay 200 empleados. Almacenó todos sus datos en un objeto de "cuenta" en la base de datos de Salesforce y creó un campo personalizado que se "acredita" en un tipo de casilla de verificación y lo actualiza a verdadero cada vez que se les acredita el salario. Después de 2 años, su recuento de empleados aumentó a 2 lakh. No puede actualizar este campo en una transacción. Entonces le pidió al desarrollador de Salesforce que lo ayudara a salir de eso. Luego, el desarrollador sugirió que el Apex por lotes actualice 2 registros lakh a la vez (lote por lote).

Apex por lotes:

Como ya discutimos, Batch Apex es un proceso asincrónico en el que cada proceso se ejecuta en un hilo diferente. Procesa el lote de datos por lote y tiene 3 pasos mientras realiza esta operación. Por defecto, el tamaño del lote es 200, pero podemos extender hasta 2000. El tamaño mínimo es 1.

Fase I:

Esta es la fase de "inicio" donde los registros se recopilan de la fuerza de ventas para ser procesados. Podemos utilizar la consulta SOQL para devolver los registros en esta fase. Básicamente, la clase de "lote" implementa la "base de datos.Lotes ".

Podemos definir el método Start () utilizando el QueryLocator (se vuelve a la consulta) de la clase "Base de datos". Es muy importante pasar el parámetro BatchableContext de la clase "Base de datos". Dentro de este método, podemos especificar el SOQL en la base de datos.método getQueryLocator () y devuélvelo.

Consulte la siguiente estructura del método:

Fase II:

Esta es la fase de "ejecutar" donde el lote de registros se recopila de la fase de inicio que devuelve la consulta SOQL. Procesa estos registros y obtiene los registros nuevamente de la consulta hasta que se completen todos los registros.

Podemos definir el método Execute () devolviendo como vacío (vacío). Es muy importante pasar el BatchableContext como el primer parámetro de la clase "Base de datos" que es similar al método Start (). El segundo parámetro es el Sobject (Salesforce Standard/Custom Object) dentro de una "lista".

Consulte la siguiente estructura del método:

Fase III:

Esta es la fase de "finalizar" donde las operaciones postales como enviar correo electrónico, mostrar mensajes, etc., se toman en esta fase.

Podemos definir el método final () devolviendo como vacío (vacío). Es muy importante pasar el BatchableContext como el primer parámetro de la clase "Base de datos" que es similar al método Start ().

Consulte la siguiente estructura del método:

Estructura general:

Configuración del medio ambiente

1. Vaya a la "Consola de desarrollador" y vaya al archivo "Seleccionar nuevo". Luego, elija "Clase APEX" (la clase APEX se guarda con .Extensión APXC).

2. Puede dar el nombre de la clase después de hacer clic en "Clase APEX". Luego, haga clic en "Aceptar".

3. Después de escribir la clase, puede ejecutarla creando una instancia de ella. Podemos escribirlo en la "ventana anónima".

Aplicación 1: Actualización

Escribamos una "clase de lotes" en la campaña de objetos estándar de Salesforce para actualizar el "nombre de la campaña" a "Linuxhint Camp1" si el estado está "planeado".

Global Class BatchExample1 implementa la base de datos.Lotes
base de datos global.Inicio de consultoría (base de datos.BatchableContext BC)

// Escribe la consulta SOQL en el objeto de campaña
// para obtener los registros con estado - 'planeado'
Base de datos de retorno.getQueryLocator ('Seleccionar nombre, estado de la campaña donde el estado = \' planificado \ 'orden por nombre');

Global Void Execute (base de datos.BatchableContext BC, lista Camplist)

// iterar los registros de la campaña
para (campaña Camp_obj: Camplist)
if (Camp_obj.Status == 'Planned')
// Actualizar el nombre de la campaña
Camp_obj.Nombre = 'Linuxhint Camp1';


intentar
// Use Actualización - DML para actualizar el nombre de la campaña
actualizar Camplist;
Catch (Exception e)
Sistema.depuración (e);


acabado global nulo (base de datos.BatchableContext BC)

// nada se necesita aquí

Ejecute la clase creando una instancia.

BatchExample1 FirstExample_1 = new BatchExample1 ();
Base de datos.EjecutarBatch (FirstExample_1);

Explicación:

  1. Escribimos una consulta SOQL para obtener el registro dentro del método Start () con el estado "planificado".
  2. Usando para bucle en el método Execute (), iteramos el objeto "Campaña" y especificamos la condición "IF" para verificar si el estado está "planificado" o no. Si está planeado, actualizamos el "Nombre de la campaña" a "Linuxhint Camp1". Utilizamos el DML "Actualización" para actualizar los registros en el bloque de prueba.

Controlar:

Podemos verificar si el lote se procesa sin error en los "trabajos de Apex". Búscalo en "Findir rápido".

2. Para verificar su clase de "lote", podemos ver que los "lotes procesados" es 1 y las "fallas" son 0.

3. Vaya a la "pestaña de campaña" y verifique si el "nombre de la campaña" está actualizado o no.

Solo hay un registro con un estado "planificado". El "nombre de la campaña" se actualiza a "Linuxhint Camp1".

Aplicación 2: eliminación

Escribamos una "clase de lotes" en el objeto estándar de Salesforce que es "campaña" para eliminar un registro.

Global Class BatchExample2 Implementa la base de datos.lotes
base de datos global.Inicio de consultoría (base de datos.BatchableContext bc)
// consulta SOQL para devolver un registro del objeto de campaña
Base de datos de retorno.getQueryLocator ('Seleccione ID desde el límite de campaña 1');

Global Void Execute (base de datos.BatchableContext BC, lista alcance)
// Eliminar DML
Eliminar alcance;

acabado global nulo (base de datos.BatchableContext bc)
// No es necesario hacer nada aquí.

Ejecute la clase creando una instancia.

BatchExample2 Ejemplo_2 = new BatchExample2 ();
Base de datos.ejecuteBatch (ejemplo_2);

Explicación:

  1. Escribimos una consulta SOQL dentro del método Start () para obtener solo un registro del objeto "Campaña".
  2. Usamos el DML "Eliminar" en el método Execute () para eliminar ese registro. También puede aplicar un bloque de prueba alrededor del DML Delete.

Controlar:

Podemos verificar los registros eliminados bajo el "contenedor de reciclaje". Vaya al "Lanzador de aplicaciones" y verifíquelo.

Puedes ver uno que el registro se elimina del objeto "campaña".

Aplicación 3: Inserción

Escribamos una "clase de lotes" en el objeto estándar de Salesforce que es "cuenta" para insertar un registro.

Global Class BatchExample3 Implementa la base de datos.Lotes
base de datos global.Inicio de consultoría (base de datos.BatchableContext bc)
// consulta SOQL para devolver solo un registro del objeto de cuenta
Base de datos de retorno.getQueryLocator ('Seleccionar ID, nombre del límite de cuenta 1');

Global Void Execute (base de datos.BatchableContext BC, lista alcance)
// Crear lista de tipo - cuenta
Lista Alist = nueva lista();
// Crear objeto para la cuenta
Cuenta ANEW = nueva cuenta ();
// Establecer el campo con valor
de nuevo.Nombre = 'Linuxhint Record';
// Agregar el objeto (instancia) a la lista
una lista.agregar (unew);
// insertar dml
insertar alist;

acabado global nulo (base de datos.BatchableContext bc)
// no es necesario hacer aquí

Ejecute la clase creando una instancia.

BatchExample3 Ejemplo_3 = new BatchExample3 ();
Base de datos.ExecuteBatch (ejemplo_3);

Explicación:

  1. Escribimos una consulta SOQL dentro del método Start () para obtener solo un registro del objeto "Cuenta".
  2. Creamos una lista de "tipo de cuenta" y creamos una "instancia de cuenta" en el método Execute (). Después de eso, asignamos el "Nombre de la cuenta" al "Registro de Linuxhint" y agregamos la instancia a la colección de la lista APEX. Finalmente, usamos el DML "insertar" para insertar este registro en la cuenta.

Controlar:

Ir a "cuenta" y buscar el registro. Puedes encontrarlo aquí.

Haga clic en "Nombre de cuenta" para abrir el registro con detalles.

Conclusión

Ahora aprendimos a hacer las operaciones de DML masiva como insertar, actualizar y eliminar con lotes Apex en Salesforce. Batch Apex es un proceso asincrónico en el que cada proceso se ejecuta en un hilo diferente. Procesa el lote de datos por lote y tiene 3 pasos mientras realiza esta operación. Por defecto, el tamaño de lote es 200, pero podemos extenderlo hasta 2000 en el que el tamaño mínimo es 1. Utilizamos los objetos estándar de "campaña" y "cuenta" para hacer las operaciones DML.