Salesforce Apex (基础1)入门

学习目标

完成本单元后,您将能够:

  • 描述Apex编程语言的主要特点。
  • 保存Apex类并使用Anonymous.Apex调用方法。
  • 使用开发者控制台检查调试日志。

Apex入门

Apex是一种使用类似Java的语法的编程语言,像数据库存储过程一样行事。 Apex使开发人员能够将业务逻辑添加到系统事件中,如按钮点击,相关记录更新和Visualforce页面。

作为一种语言,Apex是:

  • Hosted-Apex在服务器(Force.com平台)上保存,编译并执行。
  • 面向对象-Apex支持类,接口和继承。
  • 强类型-Apex在编译时验证对对象的引用。
  • 多租户感知 – 因为Apex运行在多租户平台上,所以它通过强制实施限制防止代码独占共享资源,从而防止代码走失。
  • 与数据库集成 – 访问和操作记录非常简单。 Apex提供对记录及其字段的直接访问,并提供语句和查询语言来操作这些记录。
  • 关注数据–Apex提供对数据库的事务访问,允许您回滚操作。
  • 易于使用-Apex基于熟悉的Java成语。
  • 易于测试 – Apex为单元测试创​​建,执行和代码覆盖提供了内置的支持。
  • Salesforce确保所有定制的Apex代码在任何平台升级之前执行所有单元测试,并按预期工作。
  • Versioned-Custom Apex代码可以针对不同版本的API进行保存。
Apex is a cloud-based programming language

Apex 语言亮点

像其他面向对象的编程语言一样,这些是Apex支持的一些语言结构:

  • 类,接口,属性和集合(包括数组)。
  • 对象和数组表示法。
  • 表达式,变量和常量。
  • 条件语句(if-then-else)和控制流语句(for循环和while循环)。

与其他面向对象的编程语言不同,Apex支持:

  • 作为Apex的云开发是在云中存储,编译和执行的。
  • 触发器,类似于数据库系统中的触发器。
  • 数据库语句,允许您直接进行数据库调用和查询语言来查询和搜索数据。
  • 事务和回滚。
  • 全局访问修饰符,它比public修饰符更宽松,并允许跨命名空间和应用程序访问。
  • 自定义代码的版本。

另外,Apex是一个不区分大小写的语言。

开发工具

您可以使用Salesforce用户界面直接在浏览器中编写Apex并访问调试信息。打开您的名字下的开发者控制台或快速访问菜单(设置齿轮图标)。

您也可以使用Eclipse的Force.com IDE插件在客户端上编写Apex。请参阅Salesforce Developer网站上的Force.com IDE。

数据类型概述

Apex支持各种数据类型,包括特定于Salesforce的数据类型(sObject数据类型)。
Apex支持以下数据类型。

  • 诸如Integer,Double,Long,Date,Datetime,String,ID,Boolean等原语。
  • 一个sObject,或者作为一个通用的sObject或者一个特定的sObject,比如一个Account,Contact或者MyCustomObject__c(你将在后面的单元中学到更多关于sObjects的知识)。
  • 收藏品包括:
    • 基元,sObjects,用户定义的对象,从Apex类创建的对象或集合的列表(或数组)
    • 一组原语
    • 从基元到基元,sObject或集合的映射
  • 一个键入的值列表,也被称为枚举
  • 用户定义的Apex类
  • 系统提供的Apex类

Apex收藏:列表

列表包含对象的有序集合。 Apex中的列表与数组同义,两者可以互换使用。

以下两个声明是等价的。 colors变量是使用List语法声明的。

List<String> colors = new List<String>();
另外,颜色变量可以声明为一个数组,但分配给一个列表而不是一个数组。
String[] colors = new List<String>();

通常,创建列表而不是数组会更容易,因为列表不需要提前确定需要分配多少个元素。

您可以在创建列表时将元素添加到列表中,或者通过调用add()方法创建列表后添加元素。这第一个例子显示了向元素添加元素的两种方法。

// 创建一个列表并向其中添加元素
List<String> colors = new List<String> { 'red', 'green', 'blue' };

// 创建元素后,将元素添加到列表中
List<String> moreColors = new List<String>();
moreColors.add('orange');
moreColors.add('purple');
列表元素可以通过指定方括号之间的索引来读取,就像数组元素一样。另外,您可以使用get()方法读取列表元素。这个例子是基于前面例子中创建的列表,并展示了如何使用任一方法读取列表元素。该示例还显示了如何迭代数组元素。
// 从列表中获取元素
String color1 = moreColors.get(0);
String color2 = moreColors[0];
System.assertEquals(color1, color2);

// 遍历列表来读取元素
for(Integer i=0;i<colors.size();i++) {
    // Write value to the debug log
    System.debug(colors[i]);
}

超越基础

Apex支持另外两种集合类型:Set和Map。您可以在“Apex开发人员指南”的“集合”部分了解更多。

Apex 类

Apex类的好处之一是代码重用。类方法可以被触发器和其他类调用。以下教程将引导您保存组织中的示例类,使用此类发送电子邮件以及检查调试日志。

保存一个Apex类

将EmailManager类保存在您的组织中:

  1. 打开您的名字下的开发者控制台或快速访问菜单(设置齿轮图标Setup gear icon)。
  2. 在开发者控制台中,点击 File | New | Apex Class ,然后输入EmailManager作为类名称,然后单击OK。
  3. 用EmailManager类的例子替换默认的类体。

    EmailManager类具有公共方法(sendMail()),用于发送电子邮件并使用Apex类库的内置消息处理方法。另外,这个类有一个私有的帮助方法(inspectResults()),它不能被外部调用,因为它是私有的,但只在类中使用。这个帮助方法检查电子邮件发送调用的结果,并由sendMail()调用。

    public class EmailManager {
    
        // 公共方法
        public void sendMail(String address, String subject, String body) {
            // 创建一个电子邮件对象
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
            String[] toAddresses = new String[] {address};
            mail.setToAddresses(toAddresses);
            mail.setSubject(subject);
            mail.setPlainTextBody(body);
            // 将此电子邮件传递给内置的sendEmail方法
            // 消息类的
            Messaging.SendEmailResult[] results = Messaging.sendEmail(
                                     new Messaging.SingleEmailMessage[] { mail });
            
            // 调用一个帮助器方法来检查返回的结果
            inspectResults(results);
        }
        
        // 辅助方法
        private static Boolean inspectResults(Messaging.SendEmailResult[] results) {
            Boolean sendResult = true;
            
            // sendEmail返回一个结果对象数组。
            // 遍历列表来检查结果。
            // 在这个类中,方法只发送一封邮件,
            // 所以我们应该只有一个结果。
            for (Messaging.SendEmailResult res : results) {
                if (res.isSuccess()) {
                    System.debug('Email sent successfully');
                }
                else {
                    sendResult = false;
                    System.debug('发生以下错误:' + res.getErrors());                 
                }
            }
            
            return sendResult;
        }
    
    }
  4. 点击Ctrl + S保存你的课程。

    超越基础

    刚刚保存的类使用面向对象编程(OOP)。该类封装了与管理电子邮件有关的方法。为了成为OOP的一个完美的例子,类还将包含成员变量(属性)和访问器方法来访问这些属性,但为了简单起见,我们的类没有这些。

    Salesforce在您保存时编译您的类。

调用方法发送电子邮件

我们来调用公共方法。我们将使用匿名的Apex执行来执行此操作。匿名Apex允许您即时运行代码行,并且是调用Apex的一种便捷方式,尤其是测试功能。与任何其他Apex执行一样,也会生成调试日志结果。

注意

还有其他方法可以通过触发器来调用Apex。您将在另一个模块中了解有关触发器的更多信息。

  1. 在开发者控制台中,点击 Debug | Open Execute Anonymous Window.
  2. 在打开的窗口中,输入以下内容。用您的电子邮件地址替换“您的电子邮件地址”。
    EmailManager em = new EmailManager();
    em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
    
  3. 点击 Execute.

    现在这个方法已经执行了,你应该在收件箱里收到一封电子邮件。查看你的电子邮件!

检查调试日志

调试日志对于调试代码很有用。当Apex方法执行时,调用会记录在调试日志中。而且,您可以将自己的调试消息写入日志,这有助于在出现错误时调试代码。由sendMail()调用的inspectResults()辅助方法使用System.debug()方法将消息写入日志,以指示电子邮件发送操作是成功还是有错误。您可以在执行该方法时生成的调试日志中查找这些消息。

  1. 在开发者控制台中,点击日志标签,然后双击列表中最近的日志。
  2. 选择 Debug Only 来过滤日志,以便仅显示System.debug()语句的日志行。
    Filter the debug log in the Developer Console to view debug messages

    注意

    另外,您可以通过在“筛选”字段中搜索任何关键字来筛选调试日志,或者通过选择任何其他选项来筛选调试日志。有关更多信息,请参阅日志检查器帮助。

    在过滤的日志视图中,您会看到以下消息,假设电子邮件发送没有错误。

    DEBUG|Email sent successfully

调用静态方法

因为我们类中的sendMail()方法不能访问类成员变量,所以它不需要是一个实例方法。让我们通过添加静态关键字到它的声明来将其更改为静态方法。静态方法比实例方法更容易调用,因为它们不需要在类的实例上调用,而是直接在类名上调用。

  1. 在开发人员控制台中,找到EmailManager类的打开选项卡,并将sendMail()方法定义的第一行修改为以下内容(唯一的变化是添加的static关键字)。
    public static void sendMail(String address, String subject, String body) {
  2. 按Ctrl + S保存该类。
  3. 修改“执行匿名”窗口中的语句以调用类名称上的静态方法。
    EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
    
  4. 点击 Execute.

    现在这个方法已经执行了,你可以像在前面的步骤一样检查你的电子邮件,以及可选的调试日志。