Apex - Arayüzler

Arayüz, yöntemlerden hiçbirinin uygulanmadığı bir Apex sınıfı gibidir. Yalnızca yöntem imzalarını içerir, ancak her yöntemin gövdesi boştur. Bir arabirimi kullanmak için, başka bir sınıfın arabirimde bulunan tüm yöntemler için bir gövde sağlayarak onu uygulaması gerekir.

Arayüzler esas olarak kodunuz için soyutlama katmanı sağlamak için kullanılır. Uygulamayı yöntemin bildiriminden ayırırlar.

Kimya Şirketimizden bir örnek alalım. Premium ve Sıradan müşterilere indirim sağlamamız gerektiğini ve her ikisi için indirimlerin farklı olacağını varsayalım.

Adlı bir Arayüz oluşturacağız. DiscountProcessor.

// Interface
public interface DiscountProcessor {
   Double percentageDiscountTobeApplied(); // method signature only
}

// Premium Customer Class
public class PremiumCustomer implements DiscountProcessor {
   
   //Method Call
   public Double percentageDiscountTobeApplied () {
      
      // For Premium customer, discount should be 30%
      return 0.30;
   }
}

// Normal Customer Class
public class NormalCustomer implements DiscountProcessor {
   
   // Method Call
   public Double percentageDiscountTobeApplied () {
      
      // For Premium customer, discount should be 10%
      return 0.10;
   }
}

Arayüzü uyguladığınızda, o Arayüzün yöntemini uygulamak zorunludur. Arayüz yöntemlerini uygulamazsanız, bir hata atar. Yöntem uygulamasını geliştirici için zorunlu kılmak istediğinizde Arabirimleri kullanmalısınız.

Batch Apex için Standart Salesforce Arayüzü

SFDC'nin Database.Batchable, Schedulable, vb. Gibi standart arabirimleri vardır. Örneğin, Database.Batchable Arabirimini uygularsanız, Arabirimde tanımlanan üç yöntemi - Başlat, Yürüt ve Bitir - uygulamalısınız.

Aşağıda, Toplu İş Durumuyla kullanıcılara e-posta gönderen, Standart Salesforce tarafından sağlanan Database.Batchable Arayüzü için bir örnek bulunmaktadır. Bu arayüzün 3 yöntemi vardır: Başlat, Çalıştır ve Bitir. Bu arayüzü kullanarak, Batchable işlevselliğini uygulayabiliriz ve aynı zamanda, yürütmekte olan Batch hakkında daha fazla bilgi almak ve diğer işlevleri gerçekleştirmek için kullanabileceğimiz BatchableContext değişkenini de sağlar.

global class CustomerProessingBatch implements Database.Batchable<sobject7>,
Schedulable {
   // Add here your email address
   global String [] email = new String[] {'[email protected]'};

   // Start Method
   global Database.Querylocator start (Database.BatchableContext BC) {
      
      // This is the Query which will determine the scope of Records and fetching the same
      return Database.getQueryLocator('Select id, Name, APEX_Customer_Status__c,
         APEX_Customer_Decscription__c From APEX_Customer__c WHERE createdDate = today
         && APEX_Active__c = true');
   }

   // Execute method
   global void execute (Database.BatchableContext BC, List<sobject> scope) {
      List<apex_customer__c> customerList = new List<apex_customer__c>();
      List<apex_customer__c> updtaedCustomerList = new List<apex_customer__c>();
      
      for (sObject objScope: scope) {
         // type casting from generic sOject to APEX_Customer__c
         APEX_Customer__c newObjScope = (APEX_Customer__c)objScope ;
         newObjScope.APEX_Customer_Decscription__c = 'Updated Via Batch Job';
         newObjScope.APEX_Customer_Status__c = 'Processed';
         
         // Add records to the List
         updtaedCustomerList.add(newObjScope);
      }

      // Check if List is empty or not
      if (updtaedCustomerList != null && updtaedCustomerList.size()>0) {
         
         // Update the Records
         Database.update(updtaedCustomerList); System.debug('List Size
            '+updtaedCustomerList.size());
      }
   }

   // Finish Method
   global void finish(Database.BatchableContext BC) {
      Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
      
      // get the job Id
      AsyncApexJob a = [Select a.TotalJobItems, a.Status, a.NumberOfErrors,
      a.JobType, a.JobItemsProcessed, a.ExtendedStatus, a.CreatedById,
      a.CompletedDate From AsyncApexJob a WHERE id = :BC.getJobId()];
      System.debug('$$$ Jobid is'+BC.getJobId());
      
      // below code will send an email to User about the status
      mail.setToAddresses(email);
     
      // Add here your email address
      mail.setReplyTo('[email protected]');
      mail.setSenderDisplayName('Apex Batch Processing Module');
      mail.setSubject('Batch Processing '+a.Status);
      mail.setPlainTextBody('The Batch Apex job processed
         '+a.TotalJobItems+'batches with '+a.NumberOfErrors+'failures'+'Job Item
         processed are'+a.JobItemsProcessed);
      Messaging.sendEmail(new Messaging.Singleemailmessage [] {mail});
   }

   // Scheduler Method to scedule the class
   global void execute(SchedulableContext sc) {
      CustomerProessingBatch conInstance = new CustomerProessingBatch();
      database.executebatch(conInstance,100);
   }
}

Bu sınıfı yürütmek için aşağıdaki kodu Developer Console'da çalıştırmanız gerekir.

CustomerProessingBatch objBatch = new CustomerProessingBatch ();
Database.executeBatch(objBatch);