Apex par lots dans Salesforce

Apex par lots dans Salesforce
Dans Salesforce, Batch Apex est un processus asynchrone dans lequel chaque processus est exécuté sur un thread différent; C'est pourquoi c'est un processus asynchrone. En utilisant cela, nous pouvons mettre à jour en masse et supprimer les enregistrements à la fois. Par rapport au processus synchrone, les limites du gouverneur sont plus pour ce processus asynchrone (puisque chaque processus s'exécute sur son propre fil). Dans le cadre de ce tutoriel, nous discuterons de la façon d'insert de masse, de mise à jour de masse et de supprimer les enregistrements d'un objet Salesforce avec des exemples. Nous poursuivons des discussions basées sur un scénario dans chaque cas. Plongeons dans notre tutoriel.

Scénario:

Sravan dirige une entreprise et il utilise Salesforce Org pour suivre les salaires de ses employés. Il n'y a que 200 employés. Il a stocké toutes leurs données dans un objet «compte» dans la base de données Salesforce et il a créé un champ personnalisé qui est «crédité» dans un type de case à cocher et le mettrait à la mise à jour chaque fois que le salaire leur est crédité. Après 2 ans, son décompte des employés est passé à 2 lakh. Il n'est pas en mesure de mettre à jour ce champ lors d'une transaction. Il a donc demandé au développeur Salesforce de l'aider. Ensuite, le développeur a suggéré au lot Apex de mettre à jour 2 enregistrements lakh à la fois (lot par lot).

Apex par lots:

Comme nous en avons déjà discuté, Batch Apex est un processus asynchrone dans lequel chaque processus est exécuté sur un fil différent. Il traite le lot de données par lot et a 3 étapes tout en faisant cette opération. Par défaut, la taille du lot est de 200, mais nous pouvons s'étendre jusqu'à 2000. La taille minimale est 1.

La phase I:

Il s'agit de la phase «Démarrer» où les enregistrements sont collectés auprès de la Salesforce à traiter. Nous pouvons utiliser la requête SOQL pour retourner les enregistrements dans cette phase. Fondamentalement, la classe «Lot» implémente la «base de données.Batchable ».

Nous pouvons définir la méthode start () à l'aide du requête (il revient à Query) de la classe «base de données». Il est très important de passer le paramètre BatchableContext à partir de la classe «base de données». Dans cette méthode, nous pouvons spécifier le SOQL dans la base de données.Méthode getQueryLocator () et le renvoyer.

Voir la structure de la méthode suivante:

Phase II:

Il s'agit de la phase «exécuter» où le lot d'enregistrements est collecté à partir de la phase de départ qui est renvoyé par la requête SOQL. Il traite ces enregistrements et récupère à nouveau les enregistrements de la requête jusqu'à ce que tous les enregistrements soient terminés.

Nous pouvons définir la méthode EXECUTE () en retournant comme void (vide). Il est très important de passer le BatchableContext comme le premier paramètre de la classe «base de données» qui est similaire à la méthode start (). Le deuxième paramètre est le SOBject (Salesforce Standard / Custom Object) dans une «liste».

Voir la structure de la méthode suivante:

Phase III:

Ceci est la phase de «finition» où les opérations de publication comme l'envoi d'e-mails, affichage des messages, etc., sont pris dans cette phase.

Nous pouvons définir la méthode finition () en revenant comme vide (vide). Il est très important de passer le BatchableContext comme le premier paramètre de la classe «base de données» qui est similaire à la méthode start ().

Voir la structure de la méthode suivante:

Structure globale:

Configuration de l'environnement

1. Accédez à la «console du développeur» et accédez au fichier «Select New». Ensuite, choisissez la «classe Apex» (la classe Apex est enregistrée avec .Extension APXC).

2. Vous pouvez donner le nom de classe après avoir cliqué sur «Classe Apex». Ensuite, cliquez sur "OK".

3. Après avoir écrit la classe, vous pouvez l'exécuter en en créant une instance. Nous pouvons l'écrire dans la «fenêtre anonyme».

Application 1: mise à jour

Écrivons une «classe par lots» sur la campagne Salesforce Standard Object pour mettre à jour le «nom de la campagne» à «Linuxhint Camp1» si le statut est «planifié».

Global Class BatchExample1 implémente la base de données.Volupable
base de données globale.Questionnator Start (base de données.BatchableContext BC)

// Écrivez la requête SOQL sur l'objet de campagne
// pour obtenir les enregistrements avec le statut - «planifié»
Base de données de retour.getQueryLocator ('Sélectionnez Nom, Status From Campaign Where Status = \' planifié \ 'Ordre by Name');

Global void Exécuter (base de données.BatchableContext BC, liste Camplist)

// itération des enregistrements de la campagne
pour (Campagne Camp_OBJ: Camplist)
if (camp_obj.Status == 'planifié')
// Mette à jour le nom de la campagne
camp_obj.Name = 'linuxhint camp1';


essayer
// Utilisez la mise à jour - DML pour mettre à jour le nom de la campagne
Mettre à jour Camplist;
catch (exception e)
Système.débogage (e);


Finition du void global (base de données.BatchableContext BC)

// rien de nécessaire ici

Exécutez la classe en créant une instance.

BatchExample1 FirstExample_1 = new BatchExample1 ();
Base de données.executeBatch (firstExample_1);

Explication:

  1. Nous écrivons une requête SOQL pour récupérer l'enregistrement à l'intérieur de la méthode start () avec le statut «planifié».
  2. En utilisant pour LOOP dans la méthode Execute (), nous atténuons l'objet «Campagne» et spécifions la condition «IF» pour vérifier si le statut est «planifié» ou non. S'il est prévu, nous mettons à jour le «nom de la campagne» à «Linuxhint Camp1». Nous utilisons le DML «Mise à jour» pour mettre à jour les enregistrements sous le bloc d'essai.

Vérifier:

Nous pouvons vérifier si le lot est traité sans erreur sous les «travaux Apex». Recherchez-le dans «Find Find».

2. Pour vérifier votre cours de «lot», nous pouvons voir que les «lots traités» sont 1 et les «échecs» sont 0.

3. Accédez à l'onglet «Campagne» et vérifiez si le «nom de la campagne» est mis à jour ou non.

Il n'y a qu'un seul dossier avec un statut «planifié». Le «nom de la campagne» est mis à jour de «Linuxhint Camp1».

Application 2: suppression

Écrivons une «classe de lots» sur l'objet standard Salesforce qui est «campagne» pour supprimer un enregistrement.

Global Class BatchExample2 implémente la base de données.volupable
base de données globale.Questionnator Start (base de données.BatchableContext BC)
// SOQL Query pour retourner un enregistrement de l'objet de campagne
Base de données de retour.getQueryLocator ('Sélectionnez ID From Campaign Limit 1');

Global void Exécuter (base de données.BatchableContext BC, liste portée)
// Supprimer DML
supprimer la portée;

Finition du void global (base de données.BatchableContext BC)
// pas besoin de faire quoi que ce soit ici.

Exécutez la classe en créant une instance.

BatchExample2 Exemple_2 = new BatchExample2 ();
Base de données.executeBatch (example_2);

Explication:

  1. Nous écrivons une requête SOQL à l'intérieur de la méthode start () pour récupérer un seul enregistrement de l'objet «Campagne».
  2. Nous utilisons le DML «Supprimer» dans la méthode EXECUTE () pour supprimer cet enregistrement. Vous pouvez également appliquer un bloc d'essai autour de la suppression DML.

Vérifier:

Nous pouvons vérifier les enregistrements supprimés sous le «Recycyer Bin». Accédez au «lanceur d'applications» et vérifiez-le.

Vous pouvez voir celui qui enregistre est supprimé de l'objet «Campagne».

Application 3: insertion

Écrivons une «classe de lots» sur l'objet standard Salesforce qui est «compte» pour insérer un enregistrement.

Global Class BatchExample3 implémente la base de données.Volupable
base de données globale.Questionnator Start (base de données.BatchableContext BC)
// requête SOQL pour retourner un seul enregistrement de l'objet de compte
Base de données de retour.getQueryLocator ('SELECT ID, nom From Account Limit 1');

Global void Exécuter (base de données.BatchableContext BC, liste portée)
// Créer une liste de type - Compte
Liste Alist = nouvelle liste();
// Créer un objet pour le compte
Compte Anew = nouveau compte ();
// Définissez le champ avec valeur
un nouveau.Name = 'LinuxHint Record';
// Ajouter l'objet (instance) à la liste
une liste.ajouter (à nouveau);
// insérer DML
insérer Alist;

Finition du void global (base de données.BatchableContext BC)
// pas besoin de faire ici

Exécutez la classe en créant une instance.

BatchExample3 Exemple_3 = new BatchExample3 ();
Base de données.executeBatch (example_3);

Explication:

  1. Nous écrivons une requête SOQL à l'intérieur de la méthode start () pour récupérer un seul enregistrement de l'objet «compte».
  2. Nous créons une liste de «type de compte» et créons une «instance de compte» dans la méthode Execute (). Après cela, nous attribuons le «nom de compte» à «Linuxhint Record» et ajoutons l'instance à la collection de liste Apex. Enfin, nous utilisons le DML «INSERT» pour insérer cet enregistrement dans le compte.

Vérifier:

Accédez à «Compte» et recherchez le dossier. Vous pouvez le trouver là-bas.

Cliquez sur «Nom du compte» pour ouvrir l'enregistrement avec les détails.

Conclusion

Nous avons maintenant appris à effectuer les opérations de DML de masse comme insérer, mettre à jour et supprimer avec un tatch apex dans Salesforce. Batch Apex est un processus asynchrone dans lequel chaque processus est exécuté sur un fil différent. Il traite le lot de données par lot et a 3 étapes tout en faisant cette opération. Par défaut, la taille du lot est de 200 mais nous pouvons l'étendre jusqu'à 2000 dans lesquelles la taille minimale est 1. Nous avons utilisé les objets standard «campagne» et «compte» pour effectuer les opérations DML.