Apex - Metode Database

Metode kelas database adalah cara lain untuk bekerja dengan pernyataan DML yang lebih fleksibel daripada Pernyataan DML seperti penyisipan, pembaruan, dll.

Perbedaan antara Metode Database dan Pernyataan DML

Pernyataan DML Metode Database
Pembaruan Parsial tidak diperbolehkan. Misalnya, jika Anda memiliki 20 catatan dalam daftar, maka semua catatan akan diperbarui atau tidak sama sekali. Pembaruan sebagian diperbolehkan. Anda dapat menentukan Parameter dalam metode Database sebagai benar atau salah, benar untuk mengizinkan pembaruan parsial dan salah untuk tidak mengizinkan hal yang sama.
Anda tidak bisa mendapatkan daftar catatan sukses dan gagal. Anda bisa mendapatkan daftar rekor sukses dan gagal seperti yang telah kita lihat di contoh.
Example - masukkan listName Example - Database.insert (listName, False), di mana salah menunjukkan bahwa update parsial tidak diperbolehkan.

Sisipkan Operasi

Memasukkan record baru melalui metode database juga cukup sederhana dan fleksibel. Mari kita pertimbangkan skenario sebelumnya dimana, kita telah memasukkan record baru menggunakan pernyataan DML. Kami akan memasukkan yang sama menggunakan metode Database.

Contoh

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

Perbarui Operasi

Sekarang mari kita pertimbangkan contoh kasus bisnis kita menggunakan metode database. Misalkan kita perlu mengupdate field status objek Invoice tetapi pada saat yang sama, kita juga membutuhkan informasi seperti status record, ID record yang gagal, hitungan sukses, dll. Hal ini tidak mungkin dilakukan dengan menggunakan DML Statements, oleh karena itu kita harus menggunakan metode Database untuk mendapatkan status operasi kami.

Contoh

Kami akan memperbarui bidang 'Status' Faktur jika berstatus 'Tertunda' dan tanggal pembuatannya hari ini.

Kode yang diberikan di bawah ini akan membantu dalam memperbarui catatan Faktur menggunakan metode Database.update. Juga, buat catatan Faktur sebelum menjalankan kode ini.

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

Kami hanya akan melihat operasi Sisipkan dan Perbarui dalam tutorial ini. Operasi lainnya sangat mirip dengan operasi ini dan apa yang kami lakukan di bab sebelumnya.