Учебники

Apex — Методы базы данных

Методы класса базы данных — это еще один способ работы с операторами DML, которые являются более гибкими, чем операторы DML, такие как вставка, обновление и т. Д.

Различия между методами базы данных и операторами DML

DML заявления Методы базы данных
Частичное обновление не допускается. Например, если в списке 20 записей, либо все записи будут обновлены, либо ни одной. Частичное обновление разрешено. Вы можете указать параметр «Параметр в базе данных» как true или false, true, чтобы разрешить частичное обновление, и false, чтобы не разрешить то же самое.
Вы не можете получить список успешных и неудачных записей. Вы можете получить список успешных и неудачных записей, как мы видели в примере.
Пример — вставить listName Пример — Database.insert (listName, False), где false указывает, что частичное обновление не разрешено.

Операция вставки

Вставка новых записей с помощью методов базы данных также довольно проста и гибка. Давайте рассмотрим предыдущий сценарий, в котором мы вставили новые записи, используя операторы DML. Мы будем вставлять то же самое, используя методы базы данных.

пример

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

Операция обновления

Давайте теперь рассмотрим наш пример бизнес-кейса с использованием методов базы данных. Предположим, нам нужно обновить поле состояния объекта Invoice, но в то же время нам также необходима такая информация, как состояние записей, идентификаторы неудачных записей, количество успешных операций и т. Д. Это невозможно при использовании операторов DML, поэтому мы должны использовать методы базы данных. чтобы получить статус нашей операции.

пример

Мы будем обновлять поле «Статус» счета-фактуры, если оно находится в состоянии «Ожидание» и дата создания — сегодня.

Приведенный ниже код поможет обновить записи счетов-фактур с помощью метода Database.update. Кроме того, создайте запись Invoice перед выполнением этого кода.

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

В этом руководстве мы рассмотрим только операции вставки и обновления. Другие операции очень похожи на эти операции и то, что мы делали в предыдущей главе.