Apex: métodos de base de datos

Los métodos de clase de base de datos son otra forma de trabajar con declaraciones DML que son más flexibles que declaraciones DML como insertar, actualizar, etc.

Diferencias entre métodos de base de datos y declaraciones DML

Declaraciones DML Métodos de base de datos
No se permite la actualización parcial. Por ejemplo, si tiene 20 registros en la lista, se actualizarán todos los registros o ninguno. Se permite la actualización parcial. Puede especificar el método Parameter in Database como verdadero o falso, verdadero para permitir la actualización parcial y falso para no permitir lo mismo.
No puede obtener la lista de registros correctos y fallidos. Puede obtener la lista de registros correctos y fallidos como hemos visto en el ejemplo.
Example - insertar listName Example - Database.insert (listName, False), donde falso indica que no se permite la actualización parcial.

Insertar operación

Insertar nuevos registros a través de métodos de base de datos también es bastante simple y flexible. Consideremos el escenario anterior en el que hemos insertado nuevos registros utilizando las declaraciones DML. Insertaremos lo mismo usando métodos de base de datos.

Ejemplo

// 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());
      }
   }
}

Operación de actualización

Consideremos ahora nuestro ejemplo de caso de negocio utilizando los métodos de base de datos. Supongamos que necesitamos actualizar el campo de estado del objeto Factura pero, al mismo tiempo, también necesitamos información como el estado de los registros, ID de registros fallidos, recuento de éxitos, etc. para conocer el estado de nuestra operación.

Ejemplo

Actualizaremos el campo 'Estado' de la factura si está en estado 'Pendiente' y la fecha de creación es hoy.

El código que se proporciona a continuación ayudará a actualizar los registros de facturas mediante el método Database.update. Además, cree un registro de factura antes de ejecutar este código.

// 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());
      }
   }
}

En este tutorial solo veremos las operaciones Insertar y Actualizar. Las otras operaciones son bastante similares a estas operaciones y a lo que hicimos en el capítulo anterior.