Apex - Veritabanı Yöntemleri

Veritabanı sınıfı yöntemleri, ekleme, güncelleme vb. Gibi DML İfadelerinden daha esnek olan DML ifadeleriyle çalışmanın başka bir yoludur.

Veritabanı Yöntemleri ve DML İfadeleri arasındaki farklar

DML İfadeleri Veritabanı Yöntemleri
Kısmi Güncellemeye izin verilmiyor. Örneğin, listede 20 kaydınız varsa, tüm kayıtlar güncellenecek veya hiçbiri güncellenmeyecektir. Kısmi güncellemeye izin verilir. Veritabanındaki Parametre yöntemini, kısmi güncellemeye izin vermek için doğru veya yanlış, doğru ve buna izin vermemek için yanlış olarak belirtebilirsiniz.
Başarılı ve başarısız kayıtların listesini alamazsınız. Örnekte gördüğümüz gibi başarı ve başarısız kayıtların listesini alabilirsiniz.
Example - listName ekle Example - Database.insert (listName, False), burada false, kısmi güncellemeye izin verilmediğini gösterir.

İşlem Ekle

Veritabanı yöntemleriyle yeni kayıt eklemek de oldukça basit ve esnektir. DML ifadelerini kullanarak yeni kayıtlar eklediğimiz önceki senaryoyu ele alalım. Veritabanı yöntemlerini kullanarak aynısını ekleyeceğiz.

Misal

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

Güncelleme İşlemi

Şimdi veritabanı yöntemlerini kullanarak iş durumu örneğimizi ele alalım. Fatura nesnesinin durum alanını güncellememiz gerektiğini varsayalım, ancak aynı zamanda kayıtların durumu, başarısız kayıt kimlikleri, başarı sayısı gibi bilgilere de ihtiyacımız var. DML İfadeleri kullanarak bu mümkün değildir, dolayısıyla Veritabanı yöntemlerini kullanmalıyız operasyonumuzun durumunu öğrenmek için.

Misal

Faturanın "Durum" alanını, "Beklemede" durumundaysa ve oluşturma tarihi bugünse güncelleyeceğiz.

Aşağıda verilen kod, Database.update yöntemi kullanılarak Fatura kayıtlarının güncellenmesine yardımcı olacaktır. Ayrıca, bu kodu çalıştırmadan önce bir Fatura kaydı oluşturun.

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

Bu eğiticide yalnızca Ekleme ve Güncelleme işlemlerine bakacağız. Diğer operasyonlar bu operasyonlara ve son bölümde yaptıklarımıza oldukça benziyor.