Apex 编程类和编码示例

2025 年 1 月 7 日 | 阅读 14 分钟

什么是Salesforce中的Apex?

Apex是一种在Salesforce平台上开发自定义应用程序的编程语言。它类似于Java,并且对于熟悉面向对象编程的开发人员来说,其语法易于学习。

通过Apex,开发人员可以创建自定义业务逻辑,并在Salesforce平台内对数据执行复杂操作。Apex代码在Salesforce服务器上运行,具有高度安全性和可扩展性。它可用于自动化业务流程、与外部系统集成以及构建自定义用户界面。

Apex可用于创建触发器,这些触发器是当记录被创建、更新或删除等特定事件发生时自动运行的代码片段。它还可以用于创建自定义控制器,以控制自定义用户界面的行为,并创建自定义类,这些类是可在多个应用程序中重用的代码片段。

Apex编程语言的特点

Apex是一种功能强大的编程语言,用于在Salesforce平台上开发自定义应用程序。以下是其一些主要特点:

  1. 高度安全:Apex代码在Salesforce服务器上运行,提供高级别的安全性。Salesforce还提供内置的安全功能,例如共享规则,可以控制数据访问。
  2. Web服务:Apex可用于创建可供外部系统访问的Web服务。这使得与第三方系统和应用程序的集成变得容易。
  3. 批处理:Apex提供批处理功能,允许批量处理大量数据。这可用于数据清理和迁移等任务。
  4. 面向对象:Apex是一种面向对象的编程语言,它使用类和对象来创建可重用的代码,这些代码易于维护和更新。
  5. 与Salesforce平台集成:Apex与Salesforce平台集成,这意味着它可以与Salesforce数据和元数据交互。这使得构建与Salesforce平台无缝协作的自定义应用程序变得容易。
  6. 触发器:Apex可用于创建触发器,这些触发器是当记录被创建、更新或删除等特定事件发生时自动运行的代码片段。这使得业务流程的自动化变得容易。
  7. 测试框架:Apex提供了一个内置的测试框架,允许开发人员为其代码编写单元测试。这有助于确保代码正常运行并易于维护。

何时开发人员应选择Apex

开发人员在Salesforce平台上构建自定义应用程序时应选择Apex。由于Salesforce是一个基于云的CRM平台,它提供了广泛的开箱即用功能,这些功能可以使用声明性工具(如工作流规则、流程生成器和流)进行定制。

开发人员选择使用Apex的一些场景包括:

  1. 需要实现复杂业务逻辑时,例如复杂的验证规则、条件逻辑或计算。
  2. 需要与外部系统或应用程序构建自定义集成时。
  3. 需要对大量数据执行批处理时。
  4. 需要在单个事务中更新多个对象,或需要转换或清理数据时。
  5. 需要构建自定义用户界面时,例如无法通过声明性工具获得的自定义页面或组件。

Apex的工作结构

以下是Apex操作结构的关键要素:

  1. 对象:在Apex中,对象是类的实例,表示Salesforce平台中的数据。对象可以是标准对象(如客户和联系人)或自定义对象(由开发人员定义)。
  2. 方法:Apex支持多种方法,包括构造函数、getter和setter以及操作方法。方法可用于执行计算、操作数据和执行其他任务。
  3. 调控器限制:Apex有一组调控器限制,用于限制一段代码可以使用的资源数量。这些限制是为了确保Salesforce平台的稳定性和性能。
  4. 类:Apex围绕类构建,类是变量和方法的集合,用于定义对象的行为。类可用于定义自定义对象、控制器和其他组件。
  5. 变量:Apex支持各种数据类型,包括基本类型(整数和布尔值)和对象。变量可以使用标准语法声明和初始化。
  6. 触发器:Apex触发器是响应Salesforce平台事件(例如创建或更新记录)而自动执行的代码片段。
  7. 调试和测试:Apex提供各种用于调试和测试代码的工具,包括日志、Apex调试器和Apex测试框架。

Apex语法

1. 变量声明

变量声明是在程序中创建变量并指定其数据类型和名称。在Apex中,变量使用以下语法声明:

其中data_type是变量的数据类型,variable_name是变量的名称。

Apex支持各种数据类型,包括:

  • 基本数据类型:Integer、Long、Double、Decimal、Boolean、Date、Datetime和String。
  • 集合:List、Set和Map。
  • SObject数据类型:任何标准或自定义对象。

2. SOQL查询

在Apex中,SOQL查询可以使用Database.query()方法或直接在代码中使用SOQL查询字符串执行。在Apex中编写SOQL查询的基本语法如下:

其中SObject是被查询对象的名称,field1, field2等是要检索的字段,condition是一个可选的表达式,用于过滤结果。

此外,Apex在SOQL查询中支持其他一些功能,例如:

  • 聚合函数:COUNT()、SUM()、AVG()、MIN()、MAX()
  • 关系查询:SELECT field1, field2, ... FROM parentObject WHERE Id IN (SELECT parentId FROM childObject WHERE condition)
  • 排序:ORDER BY field ASC|DESC
  • 分组:GROUP BY field1, field2
  • 限制:LIMIT n
  • 偏移:OFFSET n

3. 循环语句

在Apex中,循环语句用于重复执行一段代码,直到满足特定条件。Apex中有四种类型的循环语句:

  1. for循环:for循环用于迭代列表、集合或映射中的元素。for循环的语法是:
  1. while循环:while循环只要特定条件为真,就重复执行一段代码。while循环的语法是:
  1. do-while循环:do-while循环类似于while循环,只是代码块至少执行一次,然后才检查条件。do-while循环的语法是:
  1. foreach循环:foreach循环用于迭代SOQL查询返回的SObject记录列表。foreach循环的语法是:

4. 流程控制语句

在Apex中,流程控制语句用于控制程序的执行流程。Apex中有三种类型的流程控制语句:

i. 条件语句

条件语句用于根据特定条件的值执行不同的代码块。Apex中有两种类型的条件语句:

  • If语句:if语句在特定条件为真时执行一段代码。if语句的语法是:
  • If-else语句:if-else语句在特定条件为真时执行一段代码,在条件为假时执行另一段代码。if-else语句的语法是:

ii. 循环语句

循环语句用于重复执行一段代码,直到满足特定条件。Apex中有四种类型的循环语句:

  • for循环:for循环用于迭代列表、集合或映射中的元素。
  • while循环:while循环只要特定条件为真,就重复执行一段代码。
  • do-while循环:do-while循环类似于while循环,只是代码块至少执行一次,然后才检查条件。
  • foreach循环:foreach循环用于迭代SOQL查询返回的SObject记录列表。

iii. 转移语句

转移语句用于将控制权转移到程序的另一部分。Apex中有三种类型的转移语句:

  • Break语句:break语句用于提前退出循环。
  • Continue语句:continue语句用于跳过当前循环迭代并继续下一个迭代。
  • Return语句:return语句用于提前退出方法并将值返回给调用代码。

iv. DML语句

Apex中的DML(数据操纵语言)语句用于操纵数据库中的数据。Apex支持多种DML语句,包括:

  • Insert:insert语句用于向数据库插入新记录。
  • Update:update语句用于更新数据库中现有记录。
  • Delete:delete语句用于从数据库中删除现有记录。
  • Upsert:upsert语句用于根据指定外部ID字段在数据库中插入或更新记录。
  • Undelete:undelete语句用于从回收站中恢复已删除的记录。

Apex字符串

在Apex中,字符串是括在单引号或双引号中的字符序列。字符串用于存储和操作文本数据。

以下是Apex中字符串变量的一些示例:

String类在Salesforce中提供了几种内置方法。以下是几个常用函数:

1. maxWidth

"maxWidth"通常指字符串在被截断或缩写之前的最大宽度或长度。

示例

输出:-

Apex Programming Class & Coding Examples

2. capitalize()

在Apex中,capitalize()方法是一个标准的字符串方法,用于将字符串的第一个字符大写。此方法不修改原始字符串,而是返回一个新字符串,其第一个字符已大写。

以下是Apex中如何使用capitalize()方法的示例:

输出

Apex Programming Class & Coding Examples

在此示例中,我们声明了一个名为myString的字符串变量并将其赋值为'hello, world!'。然后我们使用capitalize()方法创建一个名为capitalizedString的新字符串,其第一个字符已大写。最后,我们将capitalizedString的值输出到调试日志,它应该打印'Hello, world!'。

3. contains(substring)

在Apex中,contains()方法是一个标准的字符串方法,用于检查字符串是否包含指定的子字符串。该方法返回一个布尔值,指示是否在字符串中找到子字符串。

以下是Apex中如何使用contains()方法的示例:

输出

Apex Programming Class & Coding Examples

在此示例中,我们声明了一个名为myString的字符串变量并将其赋值为'The quick brown fox jumps over the lazy dog'。然后我们使用contains()方法检查字符串是否包含子字符串'brown',并将结果赋值给一个名为containsSubstring的布尔变量。最后,我们将containsSubstring的值输出到调试日志,它应该打印true,表示字符串确实包含子字符串'brown'。

4. equals(stringOrId)

在Apex中,equals()方法是一个标准方法,用于将字符串与另一个字符串或ID值进行比较。该方法返回一个布尔值,指示两个值是否相等。

以下是Apex中如何使用equals()方法的示例:

输出

Apex Programming Class & Coding Examples

在此示例中,我们声明了一个名为myString的字符串变量并将其赋值为'hello'。然后我们使用equals()方法将myString的值与字符串'hello'进行比较,并将结果赋值给一个名为stringEquals的布尔变量。最后,我们将stringEquals的值输出到调试日志,它应该打印true,表示两个字符串相等。

5. escapeSingleQuotes(stringToEscape)

在Apex中,escapeSingleQuotes()方法是一个标准方法,用于转义字符串中的单引号。此方法将字符串中的每个单引号字符(')替换为两个单引号('')。这通常用于安全地将单引号包含在SOQL查询或括在单引号中的其他字符串中。

以下是Apex中如何使用escapeSingleQuotes()方法的示例:

输出

Apex Programming Class & Coding Examples

在此示例中,我们声明了一个名为myString的字符串变量并将其赋值为'She said, "I don't like pizza"'。请注意,字符串包含双引号内的单引号,如果字符串在SOQL查询或其他字符串括在单引号的上下文中使用,这可能会导致问题。然后我们使用escapeSingleQuotes()方法将单引号替换为两个单引号,并将结果赋值给一个名为escapedString的新字符串变量。最后,我们将escapedString的值输出到调试日志,它应该打印'She said, "I don't like pizza,"',单引号已正确转义。

6. remove(substring)

在Apex中,remove()方法是一个标准的字符串方法,用于从字符串中删除指定子字符串的所有出现。该方法返回一个新字符串,其中已删除指定的子字符串。

以下是Apex中如何使用remove()方法的示例:

输出

Apex Programming Class & Coding Examples

在此示例中,我们声明了一个名为myString的字符串变量并将其赋值为'The quick brown fox jumps over the lazy dog'。然后我们使用remove()方法从字符串中删除子字符串'brown',并将结果赋值给一个名为removedString的新字符串变量。最后,我们将removedString的值输出到调试日志,它应该打印'The quick fox jumps over the lazy dog',其中子字符串'brown'已删除。

7. substring(startIndex)

在Apex中,substring()方法是一个标准方法,用于从字符串中提取一部分,从指定索引开始并继续到末尾。该方法返回一个新字符串,其中包含原始字符串的指定部分。

以下是Apex中如何使用substring()方法的示例:

输出

Apex Programming Class & Coding Examples

在此示例中,我们声明了一个名为myString的字符串变量并将其赋值为'The quick brown fox jumps over the lazy dog'。然后我们使用substring()方法从索引10(对应于单词'brown'中的字母'b')开始提取字符串的一部分,并将结果赋值给一个名为subString的新字符串变量。最后,我们将subString的值输出到调试日志,它应该打印'brown fox jumps over the lazy dog',即原始字符串中从索引10开始并持续到字符串末尾的部分。

8. reverse()

在Apex中,reverse()方法是一个标准方法,用于反转字符串中字符的顺序。该方法返回一个新字符串,其中字符顺序相反。

以下是Apex中如何使用reverse()方法的示例:

输出

Apex Programming Class & Coding Examples

在此示例中,我们声明了一个名为myString的字符串变量并将其赋值为'The quick brown fox'。然后我们使用reverse()方法反转字符串中字符的顺序,并将结果赋值给一个名为reversedString的新字符串变量。最后,我们将reversedString的值输出到调试日志,它应该打印'xof nworb kciuq ehT,',即原始字符串中字符顺序相反的字符串。

9. valueOf(toConvert)

在Apex中,valueOf()方法是一个标准方法,用于将各种数据类型转换为字符串表示形式。该方法接受一个参数,即要转换的值,并返回该值的字符串表示形式。

以下是Apex中如何使用valueOf()方法的示例:

输出

Apex Programming Class & Coding Examples

在此示例中,我们声明了一个名为myInt的整数变量并将其赋值为42。然后我们使用valueOf()方法将整数值转换为字符串表示形式,并将结果赋值给一个名为myString的新字符串变量。最后,我们将myString的值输出到调试日志,它应该打印'42',即原始整数值的字符串表示形式。

Apex类

在Apex中,类是创建对象的蓝图,定义了这些对象的行为和属性。一个类包含变量、方法、构造函数和其他功能,这些功能定义了从该类创建的对象的行为。

例如:

输出

Apex Programming Class & Coding Examples

在此示例中,我们定义了一个名为MyClass的类,它有两个变量(myString和myInt)、一个设置这些变量值的构造函数以及一个将变量值输出到调试日志的方法(myMethod)。

Apex触发器

在Apex中,触发器是在Salesforce中发生特定数据操作事件(例如插入、更新、删除或取消删除记录)之前或之后执行的代码片段。触发器可用于自动化业务流程、强制执行数据验证规则以及执行自定义计算或其他操作。

以下是一个简单的Apex触发器示例:

输出

无输出

在此示例中,我们定义了一个名为CreateContact的触发器,它在插入新的Account记录后运行。该触发器创建了一个新的Contact记录列表,并用一些默认值填充它们,包括新Account记录的Account Id。最后,触发器将新的Contact记录插入数据库。