Apex - Méthodes de base de données

Les méthodes de classe de base de données sont une autre façon de travailler avec les instructions DML qui sont plus flexibles que les instructions DML telles que l'insertion, la mise à jour, etc.

Différences entre les méthodes de base de données et les instructions DML

Déclarations DML Méthodes de base de données
La mise à jour partielle n'est pas autorisée. Par exemple, si vous avez 20 enregistrements dans la liste, tous les enregistrements seront mis à jour ou aucun. Une mise à jour partielle est autorisée. Vous pouvez spécifier la méthode Parameter in Database comme true ou false, true pour autoriser la mise à jour partielle et false pour ne pas autoriser la même chose.
Vous ne pouvez pas obtenir la liste des enregistrements de réussite et d'échec. Vous pouvez obtenir la liste des enregistrements de réussite et d'échec comme nous l'avons vu dans l'exemple.
Example - insérer listName Example - Database.insert (listName, False), où false indique qu'une mise à jour partielle n'est pas autorisée.

Insérer une opération

L'insertion de nouveaux enregistrements via des méthodes de base de données est également assez simple et flexible. Considérons le scénario précédent dans lequel, nous avons inséré de nouveaux enregistrements en utilisant les instructions DML. Nous allons insérer le même en utilisant les méthodes de base de données.

Exemple

// Insert Operation Using Database methods
// Insert Customer Records First using simple DML Statement. This Customer Record will be
// used when we will create Invoice Records
APEX_Customer__c objCust = new APEX_Customer__C();
objCust.Name = 'Test';
insert objCust; // Inserting the Customer Records

// Insert Operation Using Database methods
APEX_Invoice__c objNewInvoice = new APEX_Invoice__c();
List<apex_invoice__c> InvoiceListToInsert = new List<apex_invoice__c>();
objNewInvoice.APEX_Status__c = 'Pending';
objNewInvoice.APEX_Customer__c = objCust.id;
objNewInvoice.APEX_Amount_Paid__c = 1000;
InvoiceListToInsert.add(objNewInvoice);
Database.SaveResult[] srList = Database.insert(InvoiceListToInsert, false);

// Database method to insert the records in List
// Iterate through each returned result by the method

for (Database.SaveResult sr : srList) {
   if (sr.isSuccess()) {
      // This condition will be executed for successful records and will fetch the ids 
      // of successful records
      System.debug('Successfully inserted Invoice. Invoice ID: ' + sr.getId());
      // Get the invoice id of inserted Account
   } else {
      // This condition will be executed for failed records
      for(Database.Error objErr : sr.getErrors()) {
         System.debug('The following error has occurred.');
         
         // Printing error message in Debug log
         System.debug(objErr.getStatusCode() + ': ' + objErr.getMessage());
         System.debug('Invoice oject field which are affected by the error:' 
            + objErr.getFields());
      }
   }
}

Opération de mise à jour

Examinons maintenant notre exemple de business case en utilisant les méthodes de base de données. Supposons que nous ayons besoin de mettre à jour le champ de statut de l'objet Facture, mais en même temps, nous avons également besoin d'informations telles que le statut des enregistrements, les identifiants d'enregistrements ayant échoué, le nombre de succès, etc. pour connaître l'état de notre opération.

Exemple

Nous mettrons à jour le champ «Statut» de la facture si le statut est «En attente» et que la date de création est aujourd'hui.

Le code ci-dessous vous aidera à mettre à jour les enregistrements de facture à l'aide de la méthode Database.update. Créez également un enregistrement de facture avant d'exécuter ce code.

// Code to update the records using the Database methods
List<apex_invoice__c> invoiceList = [SELECT id, Name, APEX_Status__c,
   createdDate FROM APEX_Invoice__c WHERE createdDate = today];

// fetch the invoice created today
List<apex_invoice__c> updatedInvoiceList = new List<apex_invoice__c>();
for (APEX_Invoice__c objInvoice: invoiceList) {
   if (objInvoice.APEX_Status__c == 'Pending') {
      objInvoice.APEX_Status__c = 'Paid';
      updatedInvoiceList.add(objInvoice);    //Adding records to the list
   }
}

Database.SaveResult[] srList = Database.update(updatedInvoiceList, false);
// Database method to update the records in List

// Iterate through each returned result by the method
for (Database.SaveResult sr : srList) {
   if (sr.isSuccess()) {
      // This condition will be executed for successful records and will fetch
      // the ids of successful records
      System.debug('Successfully updated Invoice. Invoice ID is : ' + sr.getId());
   } else {
      // This condition will be executed for failed records
      for(Database.Error objErr : sr.getErrors()) {
         System.debug('The following error has occurred.');
         
         // Printing error message in Debug log
         System.debug(objErr.getStatusCode() + ': ' + objErr.getMessage());
         System.debug('Invoice oject field which are affected by the error:' 
            + objErr.getFields());
      }
   }
}

Nous examinerons uniquement les opérations d'insertion et de mise à jour dans ce didacticiel. Les autres opérations sont assez similaires à ces opérations et à ce que nous avons fait dans le dernier chapitre.