Skip to main content

Apex 入门教程

学习目标

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

  • 描述 Apex 编程语言的主要特性。
  • 保存 Apex 类并使用 Anonymous.Apex 调用类方法。
  • 使用 Developer Console 检查调试日志。
备注

备注

用中文(简体)学习?在中文(简体)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 扩展轻松开发

您还可以直接在浏览器中使用 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 语法声明 colors 变量。

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

或者,可以使用数组符号来声明 colors 变量。

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');

可以通过在方括号之间指定索引来读取列表元素,这称为数组符号。同样,您也可以通过 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
System.debug('Print out the colors in moreColors:');
for(String color : moreColors) {
    // Write value to the debug log
    System.debug(color);
}







备注

进阶学习

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 a list 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. 单击 Execute(执行)
    您现在应该会在收件箱中收到一封电子邮件。查看电子邮件!

查看调试日志

调试日志对调试代码很有帮助。当执行 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. 单击执行。现在已经执行了此方法,您可以像前面的步骤一样检查您的电子邮件,也可以查看调试日志。

资源

在 Salesforce 帮助中分享 Trailhead 反馈

我们很想听听您使用 Trailhead 的经验——您现在可以随时从 Salesforce 帮助网站访问新的反馈表单。

了解更多 继续分享反馈