Skip to main content

Utilisation des sObjects et de DML

Objectifs de formation

Une fois cette unité terminée, vous pourrez :

  • Définir un sObject
  • Expliquer la différence entre les sObjects et les autres types de données Apex
  • Utiliser DML pour insérer des enregistrements dans la base de données
Remarque

Remarque

Vous souhaitez apprendre en français ? Dans ce badge, les validations de défi pratique Trailhead se font en anglais. Les traductions sont fournies entre parenthèses à titre de référence. Dans votre Trailhead Playground, veillez (1) à définir les États-Unis comme région, (2) à sélectionner l’anglais comme langue, et (3) à copier et coller uniquement les valeurs en anglais. Suivez les instructions ici.

Consultez le badge Trailhead dans votre langue pour découvrir comment profiter de l’expérience Trailhead traduite.

Vidéo de démonstration Trail Together

Vous souhaitez être guidé pas à pas par un expert pendant que vous travaillez sur cette étape ? Regardez cette vidéo qui fait partie de la série Trail Together sur Trailhead Live.

(Ce clip commence à 21 min 39 s, au cas où vous voudriez revenir en arrière et regarder à nouveau le début de l’étape.)

Qu’est-ce qu’un sObject ?

Un sObject est un type de données Apex correspondant à un objet Salesforce (sObject) dans une organisation. Les sObjects sont des types de données complexes contenant plusieurs valeurs dans une variable. Ils renferment un enregistrement de données unique provenant d’un objet Salesforce, tel qu’un compte, un contact ou une opportunité. Souvenez-vous : nous avions mentionné dans le module Bases d’Apex pour les administrateurs que les variables s’apparentaient à des conteneurs. La plupart des variables contiennent une information. Les sObjects, eux, sont des conteneurs qui contiennent d’autres conteneurs. Les conteneurs inclus dans un conteneur sObject peuvent comporter différents types de données, tels que string (chaîne), date (date), integer (entier) ou boolean (booléen).

Carré représentant un sObject avec quatre cartons étiquetés Id, Name, Type et Custom_Field__c

Nouveaux comptes

Nom
Numéro de compte
Téléphone
La fabrique à thé
356281
555-0158
Les thés de Tina
623956
555-0129

Regardez les informations présentes dans ce tableau. Si vous avez utilisé Data Loader, vous connaissez déjà ce format de compte. Ici, les champs de compte sont Name (Nom), Account Number (Numéro de compte) et Phone (Téléphone). Les données correspondent à ce que vous verriez si vous récupériez les informations à partir d’un rapport ou d’une vue de liste.

Les champs d’un objet dans une organisation sont appelés propriétés sObject dans le code Apex. À l’instar de chaque champ d’un objet dans une organisation, chaque propriété sObject présente un type de données. Par exemple, comme le champ Name (Nom) d’un objet de compte contient le type de données string, la propriété Name du sObject myAcct contient également le type de données string : myAcct.Name = 'La fabrique à thé'.

Que vous créiez un compte manuellement (dans l’interface utilisateur de Salesforce) ou par programmation (à l’aide de code Apex), vous définissez les mêmes valeurs, avec les mêmes types de données. Par exemple, dans l’interface utilisateur de Salesforce, vous pouvez créer un compte ayant les valeurs de champ contenues dans la première ligne du tableau Nouveaux comptes ci-dessus. Pour créer le même compte par programmation, utilisez un sObject de compte dans le code Apex, comme ceci :

Account myAcct = new Account();
myAcct.Name = 'The Tea Factory';
myAcct.Phone= '555-0129';
myAcct.AccountNumber = '356281';

Utilisez le sObjectName, la notation pointée et les mêmes champs par défaut (Name, Phone et AccountNumber) que ceux que vous utilisez déjà dans votre organisation.

Account myAcct = new Account(); myAcct.Name = 'La fabrique à thé'; myAcct.AccountNumber = '356281'; Le nom du sObject est myAcct et ses propriétés sont Id, Name, Phone et AccountNumber

Dans cet exemple, les propriétés de myAcct (Name, Phone et AccountNumber) présentent des types de données que vous connaissez bien : string et integer.

Définition de la valeur du champ

Pour attribuer une valeur à un sObject, utilisez la notation pointée. Dans l’exemple de code précédent, reportez-vous aux lignes 2 à 4. Si nous considérons le sObject comme un conteneur de conteneurs, ces lignes ouvrent le conteneur le plus grand, myAcct, trouvent les conteneurs Name, Phone et AccountNumber, et leur ajoutent des valeurs.

Obtention d’une valeur de champ

De même, utilisez la notation pointée pour obtenir (récupérer) une valeur d’un sObject.

Exemple : String accountName = myAcct.Name; (Chaîne accountName = myAcct.Name;)

Cet exemple de code ouvre le conteneur myAcct, effectue une recherche dans celui-ci, trouve le conteneur Name et obtient sa valeur. Dans cet exemple, la valeur renvoyée est La fabrique à thé.

Déclarer un sObject revient à ajouter une ligne dans une feuille de calcul. Lorsque vous êtes prêt à créer un autre compte, attribuez un nouveau nom à l’objet de compte. Par exemple :

Account myAcct2 = new Account();
myAcct2.Name = 'Tina's Teas';
myAcct2.AccountNumber = '623956';
myAcct2.Phone = '555-0129';

Ajout de données dans une organisation Salesforce

Prêt à écrire du code Apex pour ajouter des données dans votre organisation Salesforce ? Vous savez créer des classes et des méthodes, ainsi que déclarer un sObject. Mais comment vous y prendriez-vous pour ajouter un sObject à votre base de données Salesforce ? Pour envoyer de nouveaux enregistrements à votre organisation Salesforce, vous devez utiliser un outil appelé langage de manipulation de données ou DML (pour Data Manipulation Language).

En tant qu’administrateur, vous connaissez déjà DML. Il s’agit des instructions Insert (créer un enregistrement), Update (modifier un enregistrement) et Delete (supprimer un enregistrement) que vous utilisez avec des outils de manipulation de données tels que Data Loader. Au lieu d’utiliser des fichiers .csv et Data Loader pour ajouter des lignes, insérer ou encore mettre à jour des enregistrements, vous pouvez écrire du code Apex qui fera le travail à votre place. Utilisez du code Apex et les instructions DML Insert, Update et Delete. Pas mal, non ? Dans cette unité, nous nous concentrons sur l’instruction Insert.

Définition de la classe

  1. Dans la Developer Console, cliquez sur File (Fichier) | New (Nouveau) | Apex Class (Classe Apex).
  2. Saisissez le nom de classe NewAccounts.
  3. Cliquez sur OK.
  4. Remplacez le code par défaut par ce code :
    public class NewAccounts {
        public static void sObjectsInsert(){
            Account store = new Account();
            store.Name = 'The Tea Factory';
            store.AccountNumber = '356281';
            store.Phone = '555-0158';
            insert store;
        }
    }
  5. Cliquez sur File (Fichier)| Save (Enregistrer).

Vous avez maintenant une classe NewAccounts qui crée un nouvel enregistrement et définit ses propriétés. La classe utilise également l’instruction insert pour ajouter le nouvel enregistrement de compte dans la base de données. Il est maintenant temps d’exécuter votre code !

Exécution du code

  1. Cliquez sur Debug (Débogage) | Open Execute Anonymous Window (Ouvrir une fenêtre d’exécution anonyme).
  2. Dans la fenêtre Enter Apex Code (Entrer du code Apex), collez le code suivant :
    NewAccounts.sObjectsInsert();
  3. Cliquez sur la case à cocher Open Log (Ouvrir le journal), puis sur Execute (Exécuter).
  4. Dans le lanceur d’application, cherchez et sélectionnez Accounts (Comptes). The Tea Factory (La fabrique à thé) apparaît dans la liste des comptes. Si vous ne voyez pas The Tea Factory (La fabrique à thé), actualisez la page.
    Sur la page Accounts (Comptes), The Tea Factory (La fabrique à thé) apparaît dans la catégorie Recently Viewed Accounts (Comptes récemment consultés).
  5. Cliquez sur The Tea Factory (La fabrique à thé).
  6. Cliquez sur Details (Détails). Vous remarquerez que les champs Account Name (Nom de compte), Phone (Téléphone) et Account Number (Numéro de compte) affichent les valeurs que vous avez définies en tant que propriétés sObject dans la classe NewAccounts.

Utilisation d’une boucle pour créer plusieurs enregistrements

Il n’est pas très pratique d’ajouter les comptes un par un. Le plus souvent, l’importation ou la mise à jour d’enregistrements vous impose en effet de créer plusieurs comptes à la fois.

Vous pourriez ajouter plusieurs enregistrements tout comme nous en avons ajouté un dans l’exemple précédent, mais vous devriez alors répéter le code pour chacun d’entre eux, comme ceci :

Account store1 = new Account();
Account store2 = new Account();
store1.Name = 'The Tea Factory 1';
store1.AccountNumber = '356281';
store1.Phone = '555-0158';
store2.Name = 'The Tea Factory 2';
store2.AccountNumber = '356282';
store2.Phone = '555-4012';
insert store1;
insert store2;

Dans le module Bases d’Apex pour les administrateurs, vous avez découvert les boucles et les listes. Voici une occasion de mettre ces concepts en application. En utilisant une boucle while et une liste, vous pouvez créer simultanément de nombreux enregistrements et tous les ajouter à votre base de données. C’est comme si vous utilisiez Data Loader pour charger un fichier .csv comprenant trois enregistrements et les insérer dans la base de données.

Écriture de la méthode

  1. Revenez à la classe NewAccounts dans la Developer Console.
  2. Remplacez le code existant par le code suivant :
      public class NewAccounts {
        public static void sObjectsInsert(Integer value){
            Integer counter = 1;
            //create a list to add our accounts
            List<Account> teaFactoryAccounts = new List<Account>();
            while(counter <= value){
                //display the current counter value
                System.debug('Counter Value before Incrementing ' + counter);
                //create a new account
                Account store = new Account();
                store.Name = 'The Tea Factory ' + counter;
                store.AccountNumber = '35629' + counter;
                teaFactoryAccounts.add(store);
                System.debug(teaFactoryAccounts);
                //increment the counter
                counter = counter + 1;
                System.debug('Counter Value after incrementing ' + counter);
            }
            System.debug('Size of Account List: ' + teaFactoryAccounts.size() );
            System.debug('Elements in Account List: ' + teaFactoryAccounts);
            //insert all of the accounts in the list
            insert teaFactoryAccounts;
        }
    }
  3. Cliquez sur File (Fichier) | Save (Enregistrer).

Exécutez la méthode.

  1. Cliquez sur Debug (Débogage) | Open Execute Anonymous Window (Ouvrir une fenêtre d’exécution anonyme).
  2. Dans la fenêtre Enter Apex Code (Entrer du code Apex), collez le code suivant :
    NewAccounts.sObjectsInsert(3);
  3. Sélectionnez Ouvrir le journal, puis cliquez sur Exécuter. La fenêtre du journal s’ouvre.
  4. Sélectionnez Debug Only (Déboguer uniquement).

La dernière entrée du journal indique que le code a créé trois comptes, avec un nom et un numéro de compte pour chacun d’entre eux :

La fabrique à thé 1, 356291

La fabrique à thé 2, 356292

La fabrique à thé 3, 356293

La liste teaFactoryAccounts créée à la ligne 5 se présente comme suit :

Un espace subdivisé en trois emplacements comportant chacun un compte. Emplacement 1 : Name = La fabrique à thé 1, AccountNumber = 356291. Emplacement 2 : Name = La fabrique à thé 2, AccountNumber = 356292. Emplacement 3 : Name = La fabrique à thé 3, AccountNumber = 356293.

Chaque fois que la valeur de la variable de compteur est incrémentée, un sObject est créé dans l’index (position) ouvert suivant de la liste.

Retournez à la liste des comptes de votre organisation Trailhead Playground et cliquez sur Accounts (Comptes). Les trois restaurants que vous avez insérés sont inclus dans la liste des comptes.

Examen du code de la boucle

Examinez le code de la boucle while. Il crée une instance d’un nouveau sObject de compte nommé store. Ensuite, la boucle définit le nom « La fabrique à thé ». Pour différencier les enregistrements de compte, la valeur actuelle du compteur est ajoutée à la fin de la chaîne store.Name lors de chaque itération de la boucle.

Une fois les propriétés définies, teaFactoryAccounts.add ajoute un sObject store à la liste teaFactoryAccounts lors de chaque itération de la boucle while, jusqu’à ce que la condition de boucle soit remplie lorsque la valeur est supérieure ou égale à celle du compteur.

Remarque

N’oubliez pas d’incrémenter le compteur de la boucle while. Si notre exemple de code n’incrémentait pas continuellement d’une unité le compteur, la condition ne serait jamais remplie. La boucle while continuerait d’ajouter des enregistrements jusqu’à atteindre le délai fixé par Salesforce.

Lorsque la condition est remplie, la boucle while se termine et la dernière ligne insère en une seule fois l’ensemble du contenu de la liste teaFactoryAccounts dans la base de données.

Pourquoi cette insertion se fait-elle en une seule fois ? Les ressources étant limitées, vous ne pouvez utiliser l’instruction insert que 150 fois dans votre code. Si chaque instruction n’insère qu’un seul enregistrement, vous pouvez donc insérer 150 enregistrements au total. Cependant, si chaque instruction insert insère 10 enregistrements, ce total monte à 1 500. L’insertion simultanée de plusieurs objets facilite le traitement en masse (c’est-à-dire la combinaison de tâches répétitives par l’écriture d’un code efficace). Au démarrage, vous n’insérerez peut-être que 10 enregistrements à la fois. Toutefois, au fur et à mesure que votre application se développera, vous commencerez peut-être à insérer simultanément 200 enregistrements. En utilisant le traitement en masse dès le départ, vous préparez donc l’évolution de votre application.

Ressources

Formez-vous gratuitement !
Créez un compte pour continuer.
Qu’est-ce que vous y gagnez ?
  • Obtenez des recommandations personnalisées pour vos objectifs de carrière
  • Mettez en pratique vos compétences grâce à des défis pratiques et à des questionnaires
  • Suivez et partagez vos progrès avec des employeurs
  • Découvrez des opportunités de mentorat et de carrière