Apex - Metodi di database

I metodi di classe del database sono un altro modo di lavorare con le istruzioni DML che sono più flessibili delle istruzioni DML come inserimento, aggiornamento, ecc.

Differenze tra metodi di database e istruzioni DML

Dichiarazioni DML Metodi di database
L'aggiornamento parziale non è consentito. Ad esempio, se hai 20 record nell'elenco, verranno aggiornati tutti i record o nessuno. È consentito l'aggiornamento parziale. È possibile specificare il metodo Parameter in Database come true o false, true per consentire l'aggiornamento parziale e false per non consentire lo stesso.
Non è possibile ottenere l'elenco dei record riusciti e non riusciti. È possibile ottenere l'elenco dei record riusciti e non riusciti come abbiamo visto nell'esempio.
Example - inserire listName Example - Database.insert (listName, False), dove false indica che l'aggiornamento parziale non è consentito.

Inserisci operazione

Anche l'inserimento di nuovi record tramite metodi di database è abbastanza semplice e flessibile. Consideriamo lo scenario precedente in cui abbiamo inserito nuovi record utilizzando le istruzioni DML. Inseriremo lo stesso utilizzando i metodi del database.

Esempio

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

Operazione di aggiornamento

Consideriamo ora il nostro esempio di caso aziendale utilizzando i metodi del database. Supponiamo di dover aggiornare il campo di stato dell'oggetto Invoice ma, allo stesso tempo, abbiamo anche bisogno di informazioni come lo stato dei record, gli ID dei record non riusciti, il conteggio delle operazioni riuscite, ecc. per conoscere lo stato della nostra operazione.

Esempio

Aggiorneremo il campo "Stato" della fattura se è nello stato "In sospeso" e la data di creazione è oggi.

Il codice fornito di seguito aiuterà ad aggiornare i record delle fatture utilizzando il metodo Database.update. Inoltre, crea un record Fattura prima di eseguire questo codice.

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

In questo tutorial esamineremo solo le operazioni di inserimento e aggiornamento. Le altre operazioni sono abbastanza simili a queste operazioni ea ciò che abbiamo fatto nel capitolo precedente.