当前位置:K88软件开发文章中心编程语言非主流编程语言Apex → 文章内容

Apex - 接口

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-15 16:30:50

由 kaikai0220 创建,youj 最后一次修改 2016-12-12 什么是接口? 接口就像一个Apex类,其中没有一个方法被实现。 它只包含方法签名,但每个方法的主体是空的。 要使用接口,另一个类必须通过为接口中包含的所有方法提供一个体来实现它。 接口主要用于为代码提供抽象层。 它们将实现与方法的声明分开。 让我们举一个化学公司的例子。 假设我们需要向高级和普通客户提供折扣,两者的折扣将不同。 我们将创建一个接口,称为discountprocessor。 //Interfacepublic interface DiscountProcessor{Double percentageDiscountTobeApplied();//method signature only}//Premium Customer Classpublic class PremiumCustomer implements DiscountProcessor{//Method Callpublic Double percentageDiscountTobeApplied () {//For Premium customer, discount should be 30%return 0.30;}}//Normal Customer Classpublic class NormalCustomer implements DiscountProcessor{//Method Callpublic 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<sobject>, Schedulable{//Add here your email addressglobal String [] email = new String[] {'test@test.com'};  //Start Methodglobal 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 methodglobal 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 Methodglobal 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 classglobal void execute(SchedulableContext sc){    CustomerProessingBatch conInstance = new CustomerProessingBatch();    database.executebatch(conInstance,100);}}要执行这个类,你必须在开发者控制台中运行下面的代码。CustomerProessingBatch objBatch = new CustomerProessingBatch ();Database.executeBatch(objBatch);

Apex - 接口