Skip to main content

Apex 入门教程

学习目标

完成本单元后,您将能够:
  • 描述 Apex 编程语言的主要特性。
  • 保存 Apex 类并使用 Anonymous.Apex 调用类方法。
  • 使用 Developer Console 检查调试日志。
备注

备注

用中文(简体)学习?在此徽章中,Trailhead 实践挑战验证使用英文。括号中提供了译文,用作参考。在您的 Trailhead playground 中,您需确保 (1) 将区域设置切换为美国,(2) 将语言切换为英语,(3) 仅复制粘贴英文值。按此处说明进行。

查看 Trailhead 本地化语言徽章详细了解如何利用 Trailhead 译文。

开始之前

我们很高兴跟您一起探索 Apex。此模块将介绍编程语言的基本信息,也会快速深入。如果这是您首次了解 Apex,我们强烈建议您先完成快速入门:Apex 项目,然后再回来继续此模块,我们会等着您!

Apex 是什么?

Apex 是一种编程语言,它具有类似 Java 的语法,其用法与数据库存储过程类似。Apex 允许开发人员将业务逻辑添加到系统事件中,例如按钮的点击、相关记录的更新以及操作 Visualforce 页面等。

作为一种编程语言,Apex 具有以下特点:

  • 可托管 — Apex 在 Lightning 平台服务器上保存、编译和执行。
  • 面向对象 — Apex 支持类、接口和继承。
  • 强类型 — Apex 会在编译过程中验证对对象的引用。
  • 多租户防范 — 由于 Apex 在多租户平台上运行,因此通过实施限制来严密防范代码失控,防止代码独占共享资源。
  • 与数据库集成 — 直接访问并操作记录。Apex 可直接访问记录和其字段,并提供操作这些记录的语句和查询语言。
  • 数据集中 — Apex 支持数据库的事务性访问,允许回滚操作。
  • 使用简便 — Apex 基于熟悉的 Java 习惯用语。
  • 测试方便 — Apex 为单元测试的创建、执行和代码覆盖提供内置支持。Salesforce 确保所有的自定义 Apex 代码在任何平台升级之前通过执行所有单元测试按照预期来运行。
  • 版本控制 — 针对不同版本的 API 保存自定义 Apex 代码。
Apex 是一种云上编程语言

Apex 语言的亮点

与其他面向对象的编程语言一样,Apex 支持以下语言结构:

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

不同于其他面向对象的编程语言,Apex 支持以下特性:

  • 云开发,即 Apex 在云上存储、编译和执行。
  • 触发器,类似于数据库系统中的触发器。
  • 数据库语句,允许直接调用数据库和查询语言,以查询和搜索数据。
  • 事务和回滚。
  • Global 访问修饰符,比 public 修饰符更加宽松,允许在命名空间和应用程序之间访问。
  • 自定义代码的版本控制。

此外,Apex 语言不区分大小写。

开发工具

您可以使用 Salesforce Extensions for Visual Studio Code 在您的客户端电脑上编写和调试 Apex。请参见 Salesforce Visual Studio Code Extensions(Salesforce Visual Studio 代码扩展)

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

数据类型概览

Apex 支持多种数据类型,包括 Salesforce 独有的数据类型 — sObject 数据类型。

Apex 支持以下数据类型。

  • 基元,例如 Integer、Double、Long、Date、Datetime、String、ID、Boolean 等。
  • sObject,包含泛型 sObject 和特定 sObject,例如客户、联系人或 MyCustomObject__c(您将在后面的单元中了解关于 sObject 的更多信息。)
  • 集合,包括:
    • 基元、sObject、用户自定义对象、从 Apex 类创建的对象或集合的列表(或数组)
    • 一组基元、sObject、用户定义对象、从 Apex 类创建的对象或集合
    • 从基元到基元、sObject 或集合的映射
  • 类型化的值列表,也被称为枚举
  • 用户定义的 Apex 类
  • 系统提供的 Apex 类

Apex 集合:List

List 保存的是有序的对象集合。Apex 中的 List 和数组是同义的,两者可以交换使用。

以下两个声明是等效的。通过 List 语法声明 colors 变量。

List<String> colors = new List<String>();

或者,colors 变量可以声明为一个数组,然后分配给一个 list 而不是一个数组。

String[] colors = new List<String>();

根据需要用 List.add() 方法添加新元素来扩大集合。用方括号数组符号按索引引用集合中的现有元素,但是不能用方括号数组符号添加更多元素。

此示例显示创建列表后,如何向列表添加元素,然后用 add() 方法添加更多元素。 

// Create a list and add elements to it in one step
List<String> colors = new List<String> { 'red', 'green', 'blue' };
// Add elements to a list after it has been created
List<String> moreColors = new List<String>();
moreColors.add('orange');
moreColors.add('purple');

list 中的元素可以通过在一对方括号中指定索引来读取,就像数组的元素一样。同样,您也可以通过 get() 方法来获取 list 元素。此示例基于上一个示例中创建的列表,并展示了如何使用任一方法来读取 list 元素。该示例还展示了如何遍历数组元素。

// Get elements from a list
String color1 = moreColors.get(0);
String color2 = moreColors[0];
System.assertEquals(color1, color2);
// Iterate over a list to read elements
for(Integer i=0;i<colors.size();i++) {
    // Write value to the debug log
    System.debug(colors[i]);
}
备注

进阶学习

Apex 同样支持 Set 和 Map 两种集合类型。有关这些内容的更多信息,请参见 Apex 开发人员指南中的 Collections 部分。

Apex 类

Apex 类的优点之一就是代码的复用性。类中的方法能被触发器或其他类调用。以下教程将为您演示如何在组织中保存示例类、使用类发送电子邮件以及检查调试日志。


保存 Apex 类

在组织中保存 EmailManager 类:

  1. 在您的名字或快速访问菜单 (设置齿轮图标) 下打开 Developer Console。
  2. 在 Developer Console 中,单击 File(文件)| New(新建)| Apex Class(Apex 类),并输入 EmailManager 类名,然后单击确定
  3. EmailManager 类示例替换默认类正文。

    EmailManager 类有一个公共方法 (sendMail()),用于发送电子邮件并使用 Apex 类库的内置消息传递方法。此外,这个类还有一种私有辅助方法 (inspectResults()),由于私有的性质,仅允许在类中使用,不支持外部调用。此辅助方法用于检查电子邮件发送调用的结果,并通过 sendMail() 发起调用。
    public class EmailManager {
        // Public method
        public void sendMail(String address, String subject, String body) {
            // Create an email message object
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
            String[] toAddresses = new String[] {address};
            mail.setToAddresses(toAddresses);
            mail.setSubject(subject);
            mail.setPlainTextBody(body);
            // Pass this email message to the built-in sendEmail method 
            // of the Messaging class
            Messaging.SendEmailResult[] results = Messaging.sendEmail(
                                     new Messaging.SingleEmailMessage[] { mail });
            // Call a helper method to inspect the returned results
            inspectResults(results);
        }
        // Helper method
        private static Boolean inspectResults(Messaging.SendEmailResult[] results) {
            Boolean sendResult = true;
            // sendEmail returns an array of result objects.
            // Iterate through the list to inspect results. 
            // In this class, the methods send only one email, 
            // so we should have only one result.
            for (Messaging.SendEmailResult res : results) {
                if (res.isSuccess()) {
                    System.debug('Email sent successfully');
                }
                else {
                    sendResult = false;
                    System.debug('The following errors occurred: ' + res.getErrors());                 
                }
            }
            return sendResult;
        }
    }
  4. 单击 File(文件)| Save(保存)保存您的类。

    注意:如果代码的语法不正确,则“问题”选项卡中会显示错误。您可以使用错误详细信息来更正代码。
备注
进阶学习 
您刚刚保存的类使用了面向对象编程 (OOP)。该类封装了与电子邮件管理相关的方法。OOP 完美示例中的类还将包含用于访问这些属性的成员变量(属性)和访问器方法,但为了简单起见,我们的类没有这些属性。

保存时,Salesforce 会编译您的类。

调用方法发送电子邮件

让我们调用公共方法吧。我们将使用匿名 Apex 来执行此操作。匿名 Apex 允许您动态运行代码行,是调用 Apex 的一种简便方法,尤其适用于功能测试。与其他 Apex 执行一样,也会生成调试日志结果。

备注

备注

还可以使用其他方法调用 Apex,例如,通过触发器。您会在另一个模块中了解关于触发器的更多信息。

  1. 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)
  2. 在打开的窗口中,输入以下内容。将 'Your email address’ 替换为自己的电子邮件地址。
    EmailManager em = new EmailManager();
    em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
  3. 单击执行
    您现在收件箱会收到一封电子邮件。查看电子邮件!

查看调试日志

调试日志对调试代码很有帮助。当执行 Apex 方法时,所有调用情况都会记录在调试日志中。当然您也可以在日志中写入自己的调试消息,帮助您调试代码以确定是否包含错误信息。inspectResults() 辅助方法由 sendMail() 调用,通过使用 System.debug() 方法将消息写入日志,以指示电子邮件发送操作是成功还是包含错误。您可以在执行该方法时生成的调试日志中查找这些消息。

  1. 在 Developer Console 中,单击 Logs(日志)选项卡,然后双击列表中最近的日志。
  2. 选择 Debug Only(仅调试)筛选日志,只显示 System.debug() 语句的日志行。在 Developer Console 中筛选调试日志,查看调试消息

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

DEBUG|Email sent successfully(电子邮件已成功发送)

备注
备注

当然,您也可以在 Filter(筛选)字段中搜索关键字,或选择其他选项来筛选调试日志。有关更多信息,请参见日志检查器帮助

调用静态方法

由于类中的 sendMail() 方法没有访问类中的成员变量,因此不需要使用实例方法。现在我们将这个方法改成静态方法,即在方法声明中添加 static 关键字。静态方法的调用比实例方法更简便,它不需要在类的实例上调用,而是直接通过类名来调用。

  1. 在 Developer Console 中,找到 EmailManager 类的打开选项卡,将 sendMail() 方法定义的第一行修改为以下内容(唯一的变化是添加了 static 关键字。)
    public static void sendMail(String address, String subject, String body) {
  2. 单击 File(文件)| Save(保存)保存您的类。
  3. 修改 Execute Anonymous(执行匿名) 窗口中的语句以调用类名上的静态方法。
    EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
  4. 单击执行。现在已经执行了此方法,您可以像前面的步骤一样检查您的电子邮件,也可以查看调试日志。
继续免费学习!
注册帐户以继续。
有什么适合您的内容?
  • 为您的职业目标获取个性化推荐
  • 通过实践挑战和测验练习您的技能
  • 跟踪并与雇主分享您的进度
  • 与人联系以获取指导和就业机会