Учебники

Апекс — DML

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

DML заявления

DML — это действия, которые выполняются для вставки, обновления, удаления, удаления, восстановления записей, объединения записей или операции преобразования отведений.

DML является одной из наиболее важных частей в Apex, так как почти каждый бизнес-пример включает в себя изменения и модификации базы данных.

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

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

В этой главе мы рассмотрим первый подход с использованием операторов DML. Мы рассмотрим методы базы данных в следующей главе.

DML заявления

Давайте теперь снова рассмотрим пример химической компании-поставщика. В наших записях по счетам есть поля «Статус», «Выплаченная сумма», «Оставшаяся сумма», «Дата следующей оплаты» и «Номер счета». Счета, которые были созданы сегодня и имеют статус «Ожидание», должны быть обновлены до «Оплачено».

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

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

пример

Мы можем создавать новые записи в объекте APEX_Invoice__c, так как новые счета генерируются для новых заказов клиентов каждый день. Сначала мы создадим запись клиента, а затем мы можем создать запись счета-фактуры для этой новой записи клиента.

// fetch the invoices created today, Note, you must have at least one invoice 
// created today

List<apex_invoice__c> invoiceList = [SELECT id, Name, APEX_Status__c,
   createdDate FROM APEX_Invoice__c WHERE createdDate = today];

// create List to hold the updated invoice records
List<apex_invoice__c> updatedInvoiceList = new List<apex_invoice__c>();
APEX_Customer__c objCust = new APEX_Customer__C();
objCust.Name = 'Test ABC';

//DML for Inserting the new Customer Records
insert objCust;
for (APEX_Invoice__c objInvoice: invoiceList) {
   if (objInvoice.APEX_Status__c == 'Pending') {
      objInvoice.APEX_Status__c = 'Paid';
      updatedInvoiceList.add(objInvoice);
   }
}

// DML Statement to update the invoice status
update updatedInvoiceList;

// Prints the value of updated invoices
System.debug('List has been updated and updated values are' + updatedInvoiceList);

// Inserting the New Records using insert DML statement
APEX_Invoice__c objNewInvoice = new APEX_Invoice__c();
objNewInvoice.APEX_Status__c = 'Pending';
objNewInvoice.APEX_Amount_Paid__c = 1000;
objNewInvoice.APEX_Customer__c = objCust.id;

// DML which is creating the new Invoice record which will be linked with newly
// created Customer record
insert objNewInvoice;
System.debug('New Invoice Id is '+objNewInvoice.id+' and the Invoice Number is'
   + objNewInvoice.Name);

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

Операция обновления заключается в обновлении существующих записей. В этом примере мы будем обновлять поле «Статус» существующей записи счета-фактуры до «Оплачено».

пример

// Update Statement Example for updating the invoice status. You have to create
and Invoice records before executing this code. This program is updating the
record which is at index 0th position of the List.

// First, fetch the invoice created today
List<apex_invoice__c> invoiceList = [SELECT id, Name, APEX_Status__c,
createdDate FROM APEX_Invoice__c];
List<apex_invoice__c> updatedInvoiceList = new List<apex_invoice__c>();

// Update the first record in the List
invoiceList[0].APEX_Status__c = 'Pending';
updatedInvoiceList.add(invoiceList[0]);

// DML Statement to update the invoice status
update updatedInvoiceList;

// Prints the value of updated invoices
System.debug('List has been updated and updated values of records are' 
   + updatedInvoiceList[0]);

Операция Upsert

Операция Upsert используется для выполнения операции обновления, и если обновляемые записи отсутствуют в базе данных, то также создайте новые записи.

пример

Предположим, что записи клиента в объекте Customer должны быть обновлены. Мы обновим существующую запись о клиенте, если она уже существует, иначе создадим новую. Это будет основано на значении поля APEX_External_Id__c. Это поле будет нашим полем для определения, если записи уже присутствуют или нет.

Примечание. Перед выполнением этого кода создайте запись в объекте Customer со значением поля внешнего идентификатора как «12341», а затем выполните приведенный ниже код —

// Example for upserting the Customer records
List<apex_customer__c> CustomerList = new List<apex_customer__c>();
for (Integer i = 0; i < 10; i++) {
   apex_customer__c objcust=new apex_customer__c(name = 'Test' +i,
   apex_external_id__c='1234' +i);
   customerlist.add(objcust);
} //Upserting the Customer Records

upsert CustomerList;

System.debug('Code iterated for 10 times and created 9 records as one record with 
   External Id 12341 is already present');

for (APEX_Customer_c objCustomer: CustomerList) {
   if (objCustomer.APEX_External_Id_c == '12341') {
      system.debug('The Record which is already present is '+objCustomer);
   }
}

Удалить операцию

Вы можете выполнить операцию удаления, используя Delete DML.

пример

В этом случае мы удалим счета, которые были созданы для целей тестирования, то есть те, которые содержат название «Тест».

Вы также можете выполнить этот фрагмент из консоли разработчика, не создавая класс.

// fetch the invoice created today
List<apex_invoice__c> invoiceList = [SELECT id, Name, APEX_Status__c,
createdDate FROM APEX_Invoice__c WHERE createdDate = today];
List<apex_invoice__c> updatedInvoiceList = new List<apex_invoice__c>();
APEX_Customer__c objCust = new APEX_Customer__C();
objCust.Name = 'Test';

// Inserting the Customer Records
insert objCust;
for (APEX_Invoice__c objInvoice: invoiceList) {
   if (objInvoice.APEX_Status__c == 'Pending') {
      objInvoice.APEX_Status__c = 'Paid';
      updatedInvoiceList.add(objInvoice);
   }
}

// DML Statement to update the invoice status
update updatedInvoiceList;

// Prints the value of updated invoices
System.debug('List has been updated and updated values are' + updatedInvoiceList);

// Inserting the New Records using insert DML statement
APEX_Invoice__c objNewInvoice = new APEX_Invoice__c();
objNewInvoice.APEX_Status__c = 'Pending';
objNewInvoice.APEX_Amount_Paid__c = 1000;
objNewInvoice.APEX_Customer__c = objCust.id;

// DML which is creating the new record
insert objNewInvoice;
System.debug('New Invoice Id is' + objNewInvoice.id);

// Deleting the Test invoices from Database
// fetch the invoices which are created for Testing, Select name which Customer Name
// is Test.
List<apex_invoice__c> invoiceListToDelete = [SELECT id FROM APEX_Invoice__c
   WHERE APEX_Customer__r.Name = 'Test'];

// DML Statement to delete the Invoices
delete invoiceListToDelete;
System.debug('Success, '+invoiceListToDelete.size()+' Records has been deleted');

Восстановить операцию

Вы можете восстановить запись, которая была удалена и находится в Корзине. Все отношения, которые имеет удаленная запись, также будут восстановлены.

пример

Предположим, что записи, удаленные в предыдущем примере, необходимо восстановить. Это может быть достигнуто с помощью следующего примера. Код в предыдущем примере был изменен для этого примера.