Apex em lote no Salesforce

Apex em lote no Salesforce
No Salesforce, o Batch Apex é um processo assíncrono no qual cada processo é executado em um encadeamento diferente; É por isso que é um processo assíncrono. Usando isso, podemos atualizar e excluir os registros em massa. Quando comparado ao processo síncrono, os limites do governador são mais para esse processo assíncrono (uma vez que cada processo é executado em seu próprio thread). Como parte deste tutorial, discutiremos como inserção em massa, atualização em massa e exclusão em massa dos registros de um objeto Salesforce com exemplos. Continuamos com discussões baseadas em cenários em cada caso. Vamos mergulhar em nosso tutorial.

Cenário:

Sravan está administrando uma empresa e ele está usando o Salesforce Org para rastrear os salários de seus funcionários. Existem apenas 200 funcionários. Ele armazenou todos os dados em um objeto "Conta" no banco de dados do Salesforce e criou um campo personalizado que é "creditado" em um tipo de caixa de seleção e atualizá -lo para true sempre que o salário for creditado para eles. Após 2 anos, sua contagem de funcionários aumentou para 2 lakh. Não é capaz de atualizar este campo em uma transação. Então ele pediu ao desenvolvedor do Salesforce para ajudá -lo a sair disso. Em seguida, o desenvolvedor sugeriu o ápice do lote para atualizar 2 lakh registros por vez (lote por lote).

Apex em lote:

Como já discutimos, o Batch Apex é um processo assíncrono no qual cada processo é executado em um tópico diferente. Ele processa o lote de dados por lote e tem 3 etapas ao fazer esta operação. Por padrão, o tamanho do lote é 200, mas podemos estender até 2000. O tamanho mínimo é 1.

Fase I:

Esta é a fase de "início" em que os registros são coletados do Salesforce a serem processados. Podemos utilizar a consulta SOQL para retornar os registros nesta fase. Basicamente, a classe "lote" implementa o "banco de dados.Lotável ”.

Podemos definir o método START () usando o querylocator (ele retorna à consulta) da classe "banco de dados". É muito importante passar no parâmetro BatchableContext da classe "banco de dados". Dentro deste método, podemos especificar o SOQL no banco de dados.Método getQueryLocator () e retorne -o.

Veja a seguinte estrutura de método:

Fase II:

Esta é a fase de "execução" em que o lote de registros é coletado da fase inicial que são retornados pela SOQL Consulta. Ele processa esses registros e recebe os registros novamente da consulta até que todos os registros sejam concluídos.

Podemos definir o método execute () retornando como vazio (vazio). É muito importante passar na BatchableContext como o primeiro parâmetro da classe "banco de dados", que é semelhante ao método START (). O segundo parâmetro é o Sobject (Salesforce Standard/Custom Object) dentro de uma "lista".

Veja a seguinte estrutura de método:

Fase III:

Esta é a fase de "acabamento", onde as operações pós como enviar e -mail, exibir mensagens, etc., são levados nesta fase.

Podemos definir o método FINAL () retornando como vazio (vazio). É muito importante passar na BatchableContext como o primeiro parâmetro da classe "banco de dados", que é semelhante ao método START ().

Veja a seguinte estrutura de método:

Estrutura geral:

Configuração do ambiente

1. Vá para o "Console do desenvolvedor" e vá para o arquivo "Selecionar novo". Em seguida, escolha "APEX CLASS" (a classe Apex é salva com .extensão apxc).

2. Você pode dar o nome da classe depois de clicar em "APEX CLASS". Em seguida, clique em "OK".

3. Depois de escrever a aula, você pode executá -la criando uma instância dela. Podemos escrever na "janela anônima".

Aplicativo 1: Atualização

Vamos escrever uma "classe em lote" na campanha Salesforce Standard Object para atualizar o "nome da campanha" para "Linuxhint Camp1" se o status for "planejado".

Classe global BatchExample1 implementa o banco de dados.Lotável
Banco de dados global.Start do Querylocator (banco de dados.BatchableContext bc)

// Escreva a consulta SOQL no objeto de campanha
// Para obter os registros com o status - 'planejado'
Retornar banco de dados.getQueryLocator ('Selecione o nome, status da campanha em que status = \' planejado \ 'ordem pelo nome');

Execução Void Global (banco de dados.BatchableContext BC, lista camplista)

// itera os registros da campanha
para (campanha Camp_Obj: Camplist)
if (Camp_Obj.Status == 'planejado')
// Atualize o nome da campanha
Camp_Obj.Nome = 'linuxhint acamp1';


tentar
// Use a atualização - DML para atualizar o nome da campanha
atualizar camplist;
catch (Exceção e)
Sistema.Debug (e);


Acabamento de vazio global (banco de dados.BatchableContext bc)

// Nada necessário aqui

Execute a classe criando uma instância.

BatchExample1 FirstExample_1 = new BatchExample1 ();
Base de dados.ExecuteBatch (FirstExample_1);

Explicação:

  1. Escrevemos uma consulta SOQL para buscar o registro dentro do método start () com o status "planejado".
  2. Usando para loop no método Execute (), iteramos o objeto "campanha" e especificamos a condição "se" para verificar se o status é "planejado" ou não. Se estiver planejado, atualizamos o "nome da campanha" para "Linuxhint Camp1". Usamos o DML de "atualização" para atualizar os registros no bloco de tentativa.

Verificar:

Podemos verificar se o lote é processado sem erro nos “empregos de ápice”. Procure isso em "Quick Localize".

2. Para verificar sua classe "lote", podemos ver que os "lotes processados" são 1 e "falhas" são 0.

3. Vá para a "guia da campanha" e verifique se o "nome da campanha" é atualizado ou não.

Existe apenas um registro com um status "planejado". O "nome da campanha" é atualizado para "Linuxhint Camp1".

Aplicação 2: exclusão

Vamos escrever uma "classe em lote" no objeto padrão do Salesforce, que é "campanha" para excluir um registro.

Classe global BatchExample2 implementa o banco de dados.lotável
Banco de dados global.Start do Querylocator (banco de dados.BatchableContext bc)
// SOQL Query para retornar um registro do objeto de campanha
Retornar banco de dados.getQueryLocator ('Selecione ID do limite da campanha 1');

Execução Void Global (banco de dados.BatchableContext BC, lista escopo)
// Exclua DML
excluir escopo;

Acabamento de vazio global (banco de dados.BatchableContext bc)
// não precisa fazer nada aqui.

Execute a classe criando uma instância.

BatchExample2 exemplo_2 = new BatchExample2 ();
Base de dados.ExecuteBatch (exemplo_2);

Explicação:

  1. Escrevemos uma consulta SOQL dentro do método start () para buscar apenas um registro do objeto "campanha".
  2. Usamos o DML "excluir" no método Execute () para excluir esse registro. Você também pode aplicar um bloco de tentativa ao redor do DML Excluir.

Verificar:

Podemos verificar os registros excluídos na “lixeira”. Vá para o "lançador de aplicativos" e verifique se há.

Você pode ver um que o registro é excluído do objeto "campanha".

Aplicação 3: Inserção

Vamos escrever uma "classe em lote" no objeto padrão do Salesforce, que é "conta" para inserir um registro.

Classe global BatchExample3 implementa o banco de dados.Lotável
Banco de dados global.Start do Querylocator (banco de dados.BatchableContext bc)
// SOQL Query para retornar apenas um registro do objeto de conta
Retornar banco de dados.getQueryLocator ('Selecione ID, nome do limite da conta 1');

Execução Void Global (banco de dados.BatchableContext BC, lista escopo)
// Crie uma lista do tipo - conta
Lista alist = nova lista();
// Crie objeto para conta
Conta novamente = new conta ();
// defina o campo com valor
um novo.Nome = 'Linuxhint Record';
// Adicione o objeto (instância) à lista
uma lista.add (de novo);
// Insira DML
inserir alist;

Acabamento de vazio global (banco de dados.BatchableContext bc)
// não precisa fazer aqui

Execute a classe criando uma instância.

BatchExample3 exemplo_3 = new BatchExample3 ();
Base de dados.ExecuteBatch (exemplo_3);

Explicação:

  1. Escrevemos uma consulta SOQL dentro do método start () para buscar apenas um registro do objeto "conta".
  2. Criamos uma lista de "Tipo de conta" e criamos uma "instância da conta" no método Execute (). Depois disso, atribuímos o "nome da conta" a "Linuxhint Record" e adicionamos a instância à coleção de listas de ápice. Finalmente, usamos o DML "Inserir" para inserir este registro na conta.

Verificar:

Vá para "Conta" e procure o registro. Você pode encontrar lá.

Clique em "Nome da conta" para abrir o registro com detalhes.

Conclusão

Agora aprendemos a fazer as operações de DML em massa, como Inserir, Atualizar e Excluir com o Apex em lote no Salesforce. O ápice do lote é um processo assíncrono no qual cada processo é executado em um tópico diferente. Ele processa o lote de dados por lote e tem 3 etapas ao fazer esta operação. Por padrão, o tamanho do lote é 200, mas podemos estendê -lo até 2000 em que o tamanho mínimo é 1. Utilizamos os objetos padrão da "campanha" e "conta" para fazer as operações DML.