×
Apex 编程教程Apex 环境Apex 示例Apex 数据类型Apex 变量Apex 字符串Apex 数组Apex 常量Apex 决策Apex 循环Apex 集合Apex 类Apex 类方法Apex 对象Apex 接口Apex DMLApex 数据库方法Apex SOSLApex SOQLApex 安全性Apex 调用Apex 触发器Apex 触发设计模式Governer Limits调节器限制Apex 批量处理Apex 调试Apex 测试Apex 部署Apex 字符串Apex 数组

Apex 接口


什么是接口?

接口就像一个Apex类,其中没有一个方法被实现。 它只包含方法签名,但每个方法的主体是空的。 要使用接口,另一个类必须通过为接口中包含的所有方法提供一个体来实现它。


接口主要用于为代码提供抽象层。 它们将实现与方法的声明分开。


让我们举一个化学公司的例子。 假设我们需要向高级和普通客户提供折扣,两者的折扣将不同。


我们将创建一个接口,称为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;
	}
}

当你实现接口,那么强制实现该接口的方法。 如果你不实现Interface方法,它会抛出一个错误。 当您想要让开发人员强制实施方法时,您应该使用Interfaces。


批处理的标准Salesforce接口

SFDC有标准接口,如Database.Batchable,Schedulable等。例如,如果实现Database.Batchable接口,那么必须实现接口中定义的三个方法:开始,执行和完成。


以下是标准Salesforce提供的Database.Batchable接口的示例,该接口向具有批处理状态的用户发送电子邮件。 此界面有3种方法,“开始”,“执行”和“完成”。 使用这个接口,我们可以实现Batchable功能,它提供了BatchableContext变量,我们可以使用它来获取有关正在执行的Batch的更多信息,并执行其他功能。

global class CustomerProessingBatch implements Database.Batchable, Schedulable{
//Add here your email address
global String [] email = new String[] {'test@test.com'};
  
//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 scope) {
    List customerList = new List();
    List updtaedCustomerList = new List();
    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('test@test.com');
    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);
}
}


要执行这个类,你必须在开发者控制台中运行下面的代码。

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

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)