什么是 Apex 方法? Salesforce Apex 如何工作?

已发表: 2022-05-31

Apex 是第一种按需的多租户编程语言,对需要构建下一代业务应用程序的开发人员很有帮助。 开发人员遵循构建按需应用程序的方法,Apex 对其进行了转换。

在 Salesforce 中,开发人员可以使用 Apex 开发 CRM 应用程序,这些应用程序提供客户端-服务器接口和 Salesforce 数据库访问,以制作第 3 方 SaaS 应用程序。 此外,使用 Apex,您可以根据复杂业务的需求自定义预构建的应用程序。

在这篇文章中,我们将学习有关 Apex 的基础知识、语法、主要功能、核心概念、工作、使用等。

目录

什么是顶点?

Salesforce 开发了一种强类型和面向对象的编程语言,即 Apex,用于制作客户关系管理 (CRM) 和软件即服务 (SaaS)。

通过提供客户端-服务器接口和后端数据库支持,开发人员可以选择 Apex 来构建第 3 方 SaaS 应用程序并将业务逻辑附加到系统事件中,例如 Visualforce 页面和按钮点击。

此外,Apex 有助于开发人员执行事务和流控制语句以及对 Force.com 平台服务器上的 Force.com API 的调用。

另请阅读:如何从 Apex 调用流?

Apex 基于 Java,具有类似 Java 的语法; 然而,除了编程风格之外,一些类和语法具有不同的性质,因为它更类似于 Web 开发而不是独立应用程序开发。 Apex 执行类似于数据库存储过程,并且 Apex 代码从对象和 Web 服务请求的触发器启动。

您可以在 Salesforce Unlimited Edition、Performance Edition、Developer Edition 和 Enterprise Edition 中找到 Apex。

Apex 语法——正确的分析

通常,Apex 代码包含来自我们可能已经知道的其他编程语言的各种内容。

1. 变量声明

如上所述,Apex 是一种强类型语言; 你需要用这种语言声明一个数据类型的变量。

举个例子:

 contact con = new contact();

这里,

变量 con 被声明为带有联系的数据类型。

2. SOQL 查询

它代表 Salesforce 对象查询语言 (SOQL),用于从 Salesforce 数据库中获取对象记录。

再次,让我们举个例子

Account acc = [select id, name from Account Limit 1];

此查询从 Salesforce 数据库中获取客户记录。

3.循环语句

在列表中,循环语句有助于对记录进行迭代。 迭代次数等于列表中的记录数。

例如:

 list<Account>listOfAccounts = [select id, name from account limit 100]; // iteration over the list of accounts for(Account acc : listOfAccounts){ //your logic }

在这段代码中,listOfAccounts 是一个列表数据类型的变量。

4.流量控制语句

当您根据某些条件执行几行代码时,流控制语句非常适合。

例如:

 list<Account>listOfAccounts = [select id, name from account limit 100]; // execute the logic if the size of the account list is greater than zero if(listOfAccounts.size() >0){ //your logic }

此片段代码正在从数据库中查询帐户记录并检查列表大小。

5. DML 声明

代表数据操作语言,DML 语句用于 Salesforce 数据库中的数据操作。

例如:

 Account acc = new Account(Name = ' Test Account'); Insert acc; //DML statement to create account record.

Apex 作为一种语言的特点 – 主要亮点

现在,让我们讨论 Apex 作为一种语言的特性:

1. 简单的测试

Apex 为单元测试的创建和执行提供内置支持,包括测试结果,这些结果揭示了代码覆盖率的详细信息,并让我们了解可以很好地组织的代码部分。

2. 多租户环境

Apex 在多租户环境中运行,因此 Apex 运行时引擎旨在保护其免受失控代码的影响,并防止其主导共享资源。 任何违反限制的代码都会失败并显示简单的错误消息。

3. 强类型

如上所述,Apex 是一种强类型语言,它使用对模式对象的直接引用,例如 sObject。 如果任何无效的引用属于错误的数据类型或被删除,它会立即失败。

4. 与数据强集成

Apex 以数据为中心,旨在一起执行各种查询和 DML 语句。 在数据库上,它提供了多个事务语句。

5. 类Java语法,易于使用

由于 Apex 使用类似 Java 的语法,因此易于使用。 例如,循环语法、变量声明和条件语句。

6.自动升级

Apex 作为 Salesforce 的一部分自动升级。 因此,无需手动升级它。

7.综合

Apex 拥有对 DML 操作的内置支持,例如 UPDATE、INSERT、DELETE 和 DML 异常处理。 它支持内联 SOQL 和 SOSL 查询处理,它们与 sObjects 记录集一起返回。

了解 Apex 核心概念

通常,Apex 代码包含您可能已经知道的其他编程语言的各种内容。

让我们看看 Apex 中的编程元素:

Apex 中的元素
Apex 中的元素

下面,我们将介绍 Apex 的基本功能及其一些核心概念:

1. 使用循环

虽然 if 语句允许您的应用程序根据条件执行操作,但循环有助于您的应用程序重复执行与条件相同的操作。 Apex 支持以下循环类型:

1. While 循环:在开始时,在执行代码之前,它会检查条件。

2. For 循环:它允许您控制与循环一起使用的条件。 此外,Apex 支持使您能够设置条件的旧 For 循环,并且 For 循环使用 SOQL 查询,并且列表是条件的一部分。

3. Do-while 循环:该循环在代码执行后检查条件。

2. 使用版本设置

在 Salesforce UI 中,您可以识别需要保存 Apex 类或触发器的 Salesforce API 版本。 此设置指定要使用的 SOAP API 版本以及 Apex 版本。

  • 保存后可以更改版本。
  • 每个触发器或类名都必须是唯一的。
  • 您无法针对不同的版本保存确切的触发器或类。
  • 此外,您可以使用版本设置将触发器或类与从 AppExchange 安装在您的公司中的受管软件包的特定版本链接。 如果安装了受管软件包的更高版本,则触发器或类可以使用此版本,除非您手动更新版本设置。
  • 如果要将已安装的受管软件包添加到设置中,可以从可用软件包列表中选择一个软件包。 如果您持有尚未与触发器或类关联的已安装包,则可以显示该列表。

3. 使用集合

Apex 附带以下集合类型:

  • 列表(数组)
  • 地图

一个列表

元素的集合,如字符串、整数、对象或更多,即列表,在元素的顺序必不可少时是最好的。 在列表中,您可以复制元素。

在列表中,第一个索引位置始终为 0。

要创建列表,您需要:

  • 使用“新”关键字。
  • 使用“列表”关键字和 <> 字符中包含的元素类型。

您可以使用以下语法创建列表:

 List <datatype> list_name [= new List<datatype>();] | [=new List<datatype>{value [, value2. . .]};] | ;

例如,下面的代码创建一个整数列表并将其分配给变量“My_List”。 由于 Apex 是强类型,您需要将“My_List”的数据类型声明为整数列表:

 List<Integer> My_List = new List<Integer>();

b) 套装

一组无序的唯一元素(即集合)可以包括原始数据类型,如整数、字符串、日期等。 此外,它可以包含更复杂的数据类型,如 sObjects。

要创建一个集合,您需要:

  • 使用“新”关键字。
  • 使用“Set”关键字和 <> 字符中包含的元素类型。

您可以使用以下语法创建集合:

 Set<datatype> set_name [= new Set<datatype>();] | [= new Set<datatype>{value [, value2. . .] };] | ;

例如,下面创建了一组字符串。 花括号 {} 包含您需要传递的集合的值。

 Set<String> My_String = new Set<String>{'a', 'b', 'c'};

c) 地图

在键值对的集合(可以是原始数据类型)中,值可能包含原始数据类型、对象和映射中的其他集合。 当您需要按键查找内容时,您可以使用地图。 在地图中,您可以重复值,但每个键都必须是唯一的。

要创建地图,您需要:

  • 使用“新”关键字。
  • 使用 'Map' 关键字和前面的关键字,它使用以逗号为界并包含在 <> 字符中的键值对。

您可以使用以下语法创建地图:

 Map<key_datatype, value_datatype> map_name [=new map<key_datatype, value_datatype>();] | [=new map<key_datatype, value_datatype> {key1_value => value1_value [, key2_value => value2_value. . .]};] | ;

下面的示例创建了一个映射,其中包含一个字符串作为值和一个整数数据类型作为键。

下面,在创建地图时,地图的值在花括号 {} 之间传递。

 Map<Integer, String> My_Map = new Map<Integer, String>{1 => 'a', 2 => 'b', 3 => 'c'};

4. 使用变量和表达式

作为一种强类型语言,Apex 要求您在第一次引用变量时声明它的数据类型。

Apex 数据类型包含基本类型,如 Date、Integer 和 Boolean,以及更高级的类型,如地图、列表、sObjects 和对象。

您可以使用名称和数据类型声明变量。 此外,当您声明一个变量时,您可以分配一个值。 此外,您可以稍后执行此操作。

您可以在声明变量时使用以下语法:

 datatype variable_name [ = value];

#注意:在上例的最后,分号不是可选的; 您应该使用分号结束每个语句。

5. 命名变量、方法和类

在命名方法、变量或类时,您不能使用任何 Apex 保留关键字。 这些包含属于 Apex 和 Lightning 平台的单词,例如“测试”、“列表”或“帐户”以及保留关键字。

6. 使用语句

任何编码指令都是执行操作的语句。

在 Apex 中,语句应以分号结尾,并且可以是以下任何类型:

  • 循环:
    1. 做时
    2. 尽管
    3. 为了
  • 异常处理
  • 有条件的(if-else)
  • 方法调用
  • 赋值,比如给变量赋值
  • 事务控制
  • 锁定
  • 数据操作语言 (DML)

一系列语句,一个块用花括号分组,您可以在任何可能允许单个语句的地方使用它。

例如:

 if (true) { System.debug(1); System.debug(2); } else { System.debug(3); System.debug(4); } In cases where a block includes just one statement, you can avoid using the curly braces. For example: if (true) System.debug(1); else System.debug(2);

7. 使用分支

“if”语句是一种真假测试,可帮助您的应用根据条件执行不同的操作。 基本语法如下:

 if (Condition){ // Do this if the condition is true } else { // Do this if the condition is not true } 

使用 Salesforce 提高您的业务投资回报率

雇用 Salesforce 开发人员

开始使用

Apex 是如何工作的?

所有 apex 都在闪电平台上运行,并且完全按需提供。

一个)。 动作流程

Apex 中存在两种操作序列,一种是开发人员保存代码时,另一种是最终用户执行一些调用 Apex 代码的活动时,如下所示:

当开发人员编写 Apex 代码并保存到平台时,最终用户使用用户界面触发 Apex 代码执行。

Apex 完全在闪电平台上编译、运行和存储。

乙)。 开发者行动

当开发人员编写 Apex 代码并将其保存到平台时,首先,平台应用程序服务器将代码编译成 Apex 运行时解释器可以理解的抽象指令集,然后将这些指令保存为元数据。

C)。 最终用户操作

当最终用户触发 Apex 执行时,可能只是通过单击按钮或访问 Visualforce 页面; 平台应用服务器从元数据中获取编译后的指令。 在返回结果之前,它通过运行时解释器发送它们。 从标准平台请求来看,最终用户注意到执行时间没有差异。

我什么时候应该使用 Apex?

Salesforce 预建应用程序提供强大的 CRM 功能。 此外,Salesforce 提供了自定义预构建应用程序的能力,以最适合您的公司。 虽然,您的公司可能拥有现有功能可能不支持的复杂业务流程。

在这种情况下,Lightning 平台为高级管理员和开发人员提供了许多方法来制作自定义功能。

一个)。 顶尖

您可以使用 Apex 来:

  • 创建电子邮件服务。
  • 制作网络服务。
  • 对各种对象进行复杂的验证。
  • 构建自定义事务逻辑(出现在整个事务中的逻辑,而不仅仅是单个对象或记录)。
  • 开发工作流不支持的复杂业务流程。
  • 将自定义逻辑附加到不同的操作,例如保存记录,以便它出现在每个操作执行中,无论它是从 SOAP API 还是在用户界面(Visualforce 页面)中发生。

乙)。 SOAP API

假设您需要将功能附加到一次只处理一种记录类型并且不需要任何事务控制(如回滚更改或保存点)的复合应用程序。 在这种情况下,您可以使用标准 SOAP API。

C)。 闪电组件

要自定义 Lightning Experience,您需要开发 Lightning 组件。 此外,您可以使用特殊组件来加快开发速度。

从 Spring '19(API 版本 45.0)开始,您可以使用两种编程模型开发 Lightning 组件:原始 Aura 组件模型和 Lightning Web 组件模型。 闪电网络组件是使用 HTML 和最新 JavaScript 开发的自定义 HTML 元素。

Aura 组件和 Lightning Web 组件可以在页面上互操作和共存。

您需要配置 Aura 和 Lightning Web 组件以在体验生成器和 Lightning 应用程序生成器中执行。 最终用户和管理员不知道用于构建组件的编程模型,他们就像 Lightning 组件一样获取它们。

d)。 视觉力量

Visualforce 包含一种基于标签的标记语言,它为开发人员提供了一种构建应用程序和自定义 Salesforce 用户界面的可靠方法。 使用 Visualforce,您可以:

  • 开发向导和其他多步骤流程。
  • 定义特定于数据的规则和导航模式,以实现高效、最佳的应用程序交互。
  • 通过应用程序制作您的自定义流量控制。

Apex 开发环境

让我们深入挖掘 Apex 开发环境以变得更好。

您可以在沙盒中开发 Apex 代码,也可以在 Salesforce 中开发开发人员版本。

开发代码的最佳实践是在沙盒环境中,然后将其部署到生产环境中。

Apex 开发环境

Apex 代码开发工具

以下是用于在每个 Salesforce 版本中开发 Apex 代码的三个工具。

  • Force.com IDE
  • Force.com 开发者控制台
  • Salesforce 用户界面中的代码编辑器

1. Apex 中的批处理类

在 Salesforce 中,Batch 类有助于处理许多正常处理时可能超出 Apex 调控器限制的记录。 它异步执行代码。

批处理类的优点

  • 批处理类以块的形式处理数据,如果一个块处理失败,其余成功处理的块不会回滚。
  • 在批处理类中,每条数据都使用一组新的调控器限制进行处理,以确保代码在调控器执行限制的范围内执行。
  • Apex 类需要实现可用作批处理类的 Database.Batchable 接口。 它提供了批处理类应该实现的三种模式。

Database.Batchable 接口提供以下三种方法:

一个)。 开始()

此方法生成接口方法处理的对象或记录的范围。 在批处理执行期间,它只被调用一次。 此方法返回 Iterable 或 Database.QueryLocator 对象。

SQL 查询使用 Database.QueryLocator 对象检索的记录数约为 5000 万条记录,但使用 iterable,SQL 查询只能检索到总记录数的 50000 条记录。

对于批处理类,可迭代,生成复杂范围。

启动方法的语法:

 global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
乙)。 执行()

此方法有助于处理每个数据块。 对于每一块记录,调用执行方法。 对于执行,默认批量大小为 200 条记录。 Execute 方法需要两个参数:

  • 对 Database.BatchableContext 对象的引用,
  • sObject 列表,如参数化类型列表或 List<sObject>,

执行方法()的语法:

 global void execute(Database.BatchableContext BC, list<P>){}
C)。 结束()

在批处理类的执行过程中,finish 方法只被调用一次。 在finish方法中,可以进行后处理操作。

例如:发送确认邮件。

处理完所有批次后,调用此方法。

Finish方法的语法:

 global void finish(Database.BatchableContext BC){}

2. Database.BatchableContext 对象

Database.BatchableContext 接口的所有方法都包含对 Database.BatchableContext 对象的引用。

您可以使用此对象来跟踪批处理作业的进度。

以下是 BatchableContext 提供的实例方法:

一个)。 getChildJobId()

它返回当前正在处理的批处理作业的 ID。

乙)。 获取工作 ID()

它返回批处理作业的 ID。

批处理类的语法:

 global class MyBatchClass implements Database.Batchable<sObject> { global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) { // collect the batches of records or objects to be passed to execute } global void execute(Database.BatchableContextbc, List<P> records){ // process each batch of records } global void finish(Database.BatchableContextbc){ // execute any post-processing operations } }

3. Database.executeBatch 方法

它用于批处理类执行。

这个方法有两个参数:

  • 我们需要处理的批处理类的实例,
  • 指定批量大小的选项参数(如果不指定,则采用默认大小 200)

Database.executeBatch 的语法:

 Database.executeBatch(myBatchObject,scope) Executing a batch class; class name = MyBatchClass MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);

4. 数据库.stateful

Apex 批次的每一块(无论是一个还是 200 个)都附带其执行上下文和用于处理系统中增加的记录的刷新限制。

有时您可能希望存储从业务流程或已处理记录中产生的信息。 如果每次执行都带有一个新的状态和一个新的上下文,你怎么能保持这个状态呢?

到了Database.Stateful.

当 execute 方法更改或更改用于完成方法或跨各种执行方法的类变量时,它是有状态的。

默认情况下,Batch 类是无状态的。 每当调用 execute 方法时,您将收到一个对象的新副本,并且该类的每个变量都被初始化。

要使批处理类有状态,您需要实现 Database.stateful。

在您的批处理类实现 Database.stateful 接口后,所有实例变量将保留其值,但静态变量在事务之间重置。

维护状态对于在处理记录时汇总或计数记录至关重要。

好吧,使用 Database.Stateful 是可选的。 但是,它在计算和计算正在处理的记录时很有用。

关于数据库的一项重要内容。 有状态的是它会降低性能,因为在所有执行方法结束时,类将被消毒以保持其状态。 这样,您的 BatchApex 的处理时间就会增加,因此您需要明智地使用它。

Apex 中的数据类型

让我们看看 Apex 支持哪些数据类型。

1.原始

Integer、Long、Date、Double、Date-Time、Boolean、ID 和 String 是 Apex 中的原始数据类型。 所有这些都不是通过引用传递的; 它们是按值传递的。

2. 收藏

在 Apex 中,有三种类型的集合:

  • 集合:唯一基元的无序集合构成一个集合。
  • 列表: sObject、基元、Apex 对象或基于索引的集合的有序集合构成一个列表。
  • Map:原始的唯一键的集合,映射到可以是集合、sObject、原始或 Apex 对象的单个值。

3. 枚举

一种抽象数据类型,其值严格采用您指定的有限标识符集合之一,即 Enum。

4. 对象

在 Salesforce 中,一种特殊的数据类型是 sObject,它类似于 SQL 表,包含类似于 SQL 中的列的字段。

5. 课程

就像在 Java 中一样,您也可以在 Apex 中创建类。 类是创建对象的蓝图或模板。

6. 对象

它是 Apex 支持的任何数据类型。 对象是类的一个实例。

接口

这就像一个没有实现方法的类; 你只会找到方法签名。 每个方法的主体都是空的。 您需要通过为接口包含的所有方法提供主体来实现另一个类以使用接口。

顶点触发器

它允许您在执行 DML 操作之前和之后执行自定义顶点。

Apex 支持两种类型的触发器:

  • 触发器之前:当您需要在将记录保存到数据库之前验证和更新字段的值时,可以使用这些触发器。
  • After Triggers:这些触发器最好在一条记录提交到数据库后访问系统设置的字段。 您可以使用这样的字段值来修改其他记录,并且记录是只读的,触发后触发。

您可以编写可以同时处理单个和多个记录的庞大触发器。

顶点触发器的语法:

 Syntax of an apex trigger: trigger TriggerName on ObjectName (trigger_events) { //Code_block }

这里,

TriggerName = 触发器的名称,

ObjectName = 将写入触发器的对象的名称,

trigger_events = 逗号分隔的事件列表。

以下是 Apex 触发器支持的事件:

  • 插入前
  • 更新前
  • 删除前
  • 插入后
  • 更新后
  • 删除后
  • 取消删除后

在 Apex 触发器中,您不能使用静态关键字,而只能使用适用于内部类的关键字。

每个触发器都定义了一个返回运行时上下文的隐式变量,这些变量是在系统中定义的。

触发器类:您可以使用诸如上下文变量之类的变量来访问触发器中的运行时上下文信息。

Apex 访问说明符

Apex 有助于在定义变量或方法时使用私有、公共、受保护和全局访问说明符。

默认情况下,变量或方法仅对定义类中的 Apex 代码可见。

您需要将变量指定为公共变量,以使其可用于同一应用程序命名空间中的类。

您还可以使用以下访问修饰符(一个新的官方术语,而不是访问说明符)来更改可见性级别:

1.公开

它提供对 Apex 在命名空间中使用的方法、类或变量的访问。

2.私人

此访问说明符提供对本地或定义它的代码段内的方法、类和变量的访问。 默认情况下,所有变量或技术都有私有访问说明符,没有任何访问说明符。

3. 受保护

此访问说明符提供对任何内部类在定义 Apex 类中使用的变量或方法的访问。

4. 全球

它提供对 Apex 在命名空间内外使用的方法、类或变量的访问。 最佳做法是在需要之前不要使用全局关键字。

顶点类

顶点类是创建对象的模板或蓝图。 类的实例是一个对象。

您可以在 Salesforce 中按照以下三种方式中的任何一种创建 Apex 类:

  • Apex 课程详细信息页面
  • Force.com IDE
  • 开发者控制台

请参阅此处以了解添加 apex 类

在 Apex 中,您可以定义顶级类,也称为外部类,也可以在外部类中定义类,称为内部类。

必须使用访问修饰符,例如 public 或 global,因为它在外部类声明中是强制性的。

但是,在内部类声明中使用访问修饰符并不是强制性的。

  • 类关键字:要定义 Apex 类,您可以使用类关键字后跟类的名称。
  • 扩展关键字:您可以使用扩展关键字通过顶点类扩展现有类。
  • 实现关键字:它用于由顶点类实现接口。
  • 新关键字:您可以使用它来创建 Apex 类的实例。
 myApexClass obj = new myApexClass();

Salesforce Apex 不支持多重继承,但可以实现多个接口。 您可以使用一个顶点类来扩展一个现有的顶点类。

Apex 类可以包含用户定义的构造函数,如果用户定义的构造函数不可用,您可以使用默认构造函数。

在构造函数中,代码在创建类的实例时执行。

Apex 类示例的语法:

 public class myApexClass{ // variable declaration //constructor public myApexClass{ } //methods declaration }

另请阅读:如何在 Process Builder 中调用 Apex 类

Apex 吸气剂和二传手

Apex 属性就像一个顶点变量。 对于 Apex 属性,Getter 和 Setter 是必不可少的,可用于在修改或访问属性值之前执行代码。

在 get 访问器中读取属性值时,代码将执行。

在 set 访问器中修改属性值时,代码将运行。

  • 只读 - 当属性具有 get 访问器时。
  • 只写 – 当一个属性有一个 set 访问器时。
  • 读写 – 当属性同时具有 get 和 set 访问器时。

Apex 属性的语法:

 public class myApexClass { // Property declaration access_modifierreturn_typeproperty_name { get { //code } set{ //code } }

这里,

access_modifier = 属性的访问修饰符。

return_type = 属性的数据类型。

property-name = 属性的名称。

具有 get 和 set 访问器的 Apex 属性示例:

 public class myApex{ public String name{ get{ return name;} set{ name = 'Test';} } }

这里:

name = 属性名称,即公共属性,返回字符串数据类型。

在 get 和 set 块中不必有相同的代码,因此您可以将它们留空以定义自动属性。

例如:

 public double MyReadWriteProp{ get; set; }

您可以使用其访问修饰符定义 get 和 set。 如果这样做,它将覆盖属性的访问修饰符。

例如:

 public String name{private get; set;}// name is private to read, and the public to write.

Apex 中的关键字

Apex 关键字,也称为保留关键字,是充当代码键的特定关键字。 Apex 已将这些关键字定义为预定义词,因此您不能根据需要将它们用作对象名称或变量。

1.带分享关键字

它强制实施适用于当前用户的组织共享规则。 它通常也称为用户模式。

2.不共享关键字

它确保组织的共享规则不适用于当前用户,通常称为系统模式。

3.类

它用于声明或定义一个类。

4.虚拟

它声明或定义允许覆盖和扩展的方法或类。 使用 override 关键字,我们不能覆盖方法,除非您将方法或类定义为虚拟,这意味着如果一个类是虚拟的,那么它可以允许扩展。 如果方法是虚拟的,它将在子类中启用覆盖。

5. 摘要

这个关键字有助于定义或声明一个抽象类,它包含抽象和非抽象方法。

6.接口

它用于声明一个接口,并且可以只有抽象方法。 一个类可以一致地实现一个接口,一个接口总是可以扩展另一个接口。

7. 扩展

这个关键字定义了一个类扩展另一个类,这意味着一个子类具有使用extend关键字扩展父类的能力。

8. 工具

implement 关键字用于实现接口。

9. 这个

它表示构造函数链接中类的当前实例。

10. 静态

它定义了一个仅在类级别初始化一次并与外部类关联的变量或方法。 另外,我们可以通过类名直接调用静态方法或变量; 无需创建类的实例。

11. 决赛

它用于定义您不能在子类中覆盖的方法和常量。

12.超级

它调用超类的构造函数。

13.瞬态

它声明了不能保存的实例变量,也不应该作为扩​​展和 visualforce 控制器中视图状态的一部分传输。

14. 返回

它从方法返回一个值。

15. 空

此关键字定义一个空常量,您可以将其分配给任何变量以删除垃圾值。

16. 全球

它是一个访问修饰符,用于指示在任何地方都可以访问该项目,这表明在 Salesforce 内部或外部。 它在 Apex 的所有修改器中拥有最广泛的范围。

17. 公众

它是一个访问修饰符,用于指示该项目可在 Salesforce 环境中的任何位置访问。

Apex 调速器限制

Apex 运行时引擎强制执行的限制是为了确保任何 Runway Apex 代码和进程不违反处理并且不控制多租户环境中其他用户的共享资源,这些限制是 Apex 调控器限制。

此类限制根据顶级交易进行身份验证。

Salesforce 为每个顶点交易定义了各种调控器限制,例如

  • 限制 100 – 适用于可以在同步事务中完成的 SOQL 查询。
  • 限制 200 - 对于可以在异步事务等中完成的 SOQL 查询。

顶点字符串

一组没有字符限制的字符称为字符串。

例如:

 String name = 'Test';

在 Salesforce 中,String 类提供了各种内置方法。

让我们回顾一些最常用和最少使用的功能:

1.缩写(最大宽度)

如果当前字符串长于指定长度,则返回指定长度的字符串的缩写版本,并附加省略号; 否则,它返回没有省略号的原始字符串。

2.缩写(最大宽度,偏移量)

它返回指定长度的字符串的缩写版本,从指定的字符偏移量开始。 如果在这些点上删除了字符,则返回的字符串在开头和结尾带有附加的省略号。

3. 中心(大小)

它返回指定大小的当前字符串的版本以及左右两侧的空格,以便它看起来在中心。 如果指定的大小小于当前字符串大小,则返回整个字符串,不添加任何空格。

4.大写()

它返回当前字符串,第一个字母更改为标题大小写。

5. 中心(大小,填充字符串)

它返回指定大小的当前字符串的版本,并在左右两侧填充指定的字符串,使其看起来在中心。 如果指定的大小小于当前字符串大小,则返回整个字符串而不进行填充。

6. 包含(子字符串)

如果调用该方法的字符串包含指定的子字符串,则返回 TRUE。

 String name1 = 'test1'; String name2 = 'test2'; Boolean flag = name.contains(name2); System.debug('flag::',+flag); //true

7.escapeSingleQuotes(stringToEscape)

在任何单引号之前,此方法附加一个转义字符 (\) 并以字符串形式返回。 此外,在创建动态 SOQL 查询时,它避免了 SOQL 注入。 它确保每个引号都用作封闭字符串,而不是数据库命令。

例如:

 String s = 'Hello Tom'; system.debug(s); // Outputs 'Hello Tom' String escapedStr = String.escapeSingleQuotes(s); // Outputs \'Hello Tom\'

8. 子串(startIndex)

它返回一个从 startindex 处的字符开始的子字符串,并将其扩展到字符串的最后一个。

例如:

 String s1 = 'hamburger'; String s2 = s1.substring(3); System.debug('s2'+s2); //burger

9. 删除(子字符串)

它从调用方法并返回输出的 String 中删除所有提到的子字符串。

例如:

 String s1 = 'Salesforce and force.com'; String s2 = s1.remove('force'); System.debug( 's2'+ s2);// 'Sales and .com'

10. 反向()

它反转字符串的每个字符并返回它。

例如:

 String s = 'Hello'; String s2 = s.reverse(); System.debug('s2::::'+s2);// olleH // Hello

11.修剪()

它通过从字符串中删除每个前导空格来返回一个字符串。

12. valueOf(toConvert)

它返回传入对象的字符串表示形式。

要了解更多信息:顶点中的字符串方法

开发人员何时应该选择 Apex?

当我们即使使用现有的和预先构建的特殊功能也无法实现复杂的业务功能时,我们会寻求 Apex 的帮助。

以下是我们需要 Apex over Salesforce 配置的一些情况。

Apex 的应用

我们可以在需要时使用 Apex:

  • 为电子邮件设置和电子邮件爆炸创建电子邮件服务。
  • 通过集成其他系统来创建 Web 服务。
  • 创建现有工作流功能或流程不支持的复杂业务流程。
  • 同时对各种对象进行复杂的验证以及自定义验证实现。
  • 当记录修改相关对象的记录或在某些事件导致触发器触发时被修改时执行任何逻辑。
  • 创建自定义事务逻辑(发生在整个事务中,而不仅仅是单个对象或记录),例如使用数据库方法更新记录。

在云端开发代码

在云端,多租户平台,Apex 编程语言被保存并运行。 在平台上,Apex 针对数据操作和访问进行了修改,它方便您将自定义业务逻辑附加到系统事件中。

虽然 Apex 为平台上的业务流程自动化提供了各种好处,但它并不是一种通用编程语言。

您不能使用 Apex 执行以下操作:

  • 在 UI 中呈现除错误消息之外的元素。
  • 创建临时文件。
  • 更改标准功能,因为 Apex 可以阻止该功能执行或添加附加功能。
  • 产生线程

#提示:每个 Apex 代码都在 Lightning 平台上运行,这是所有其他组织使用的共享资源。 为了确保一致的可扩展性和性能,Apex 执行受到调控器限制的限制,以确保 Apex 执行不会影响 Salesforce 的整个服务。 它指出每个 Apex 代码都受其可以在单个进程中执行的操作数量(如 SOQL 或 DML)的限制。

每个 Apex 请求都会返回一个包含 1 到 50,000 条记录的批次。 您不能假设您的代码一次只在一条记录上执行。 这就是为什么您需要实现选择批量处理的编程模式。 如果你不这样做,你可能会遇到州长的限制。

Apex 开发过程

您需要获得一个 Developer Edition 帐户来开发 Apex、编写和测试您的代码并提前部署它。

通常推荐以下 Apex 开发流程:

  • 第一步:获取开发者版账号。
  • 第 2 步:了解有关 Apex 的更多信息。
  • 第 3 步:编写您的 Apex。
  • 第 4 步:在编写 Apex 时,您还需要编写测试。
  • 第 5 步:作为一个选项,您可以将 Apex 部署到沙盒组织并执行最终单元测试。
  • 第 6 步:将 Apex 部署到 Salesforce 生产组织。

部署 Apex 后,在编写和测试它之后,您还可以将触发器和类附加到 AppExchange 应用程序包。

我们该怎样帮助你?

我们拥有一支由最优秀的 Salesforce 开发人员组成的团队,他们拥有完成下一个 Salesforce 开发项目所需的技能。 我们拥有所需的能力,将帮助您使用 CRM 平台工具与您的客户建立更好的关系。

此外,我们的 Salesforce 开发专家可以帮助您对 Salesforce 服务器进行 API 调用,以将 CRM 功能附加到您的站点。

关于 Salesforce 中 Apex 方法的常见问题

1. Apex 数据类型是什么?

Apex 数据类型让我们知道可以存储什么类型的数据以及范围。
以下是 Apex 预定义且 Salesforce 支持的数据类型:
1.原始数据类型
2.收藏
3.sObjects
4.枚举

2.什么是类变量?

在使用类的面向对象编程中,类变量是使用 static 修饰符声明的任何变量,其存在单个副本,无论存在多少类实例。
类变量在定义时需要指定以下属性:
1.可选:修饰符,如 public 或 final 和 static。
2.可选:变量的值。
3.必填: 变量的数据类型,如布尔值或字符串。
4.可选: 变量的名称。

3. Apex 类方法是什么?

在 Apex 中,对于 Class 方法,有两个修饰符:
1.公开的,或
2.受保护
对于方法,返回类型是强制性的,如果它不返回任何内容,则需要提及 void 作为返回类型。 而且,对于方法,身体也是必要的。
要定义方法,您需要指定以下内容:
1.可选:方法返回值的数据类型为Integer或String。 如果它不返回值,则需要使用 void。
一个方法只能保存 32 个输入参数。
2 、必填:方法的输入参数列表,用逗号分隔; 每个都以它的数据类型开头,并用括号 () 括起来。 如果没有参数,可以使用一组空括号。
3.必需:方法的主体用大括号 {} 括起来。 所有代码和任何局部变量声明都是该方法的包含基础。

4. 什么是 Apex 对象?

一个类的实例是一个对象。 这适用于状态和行为。 数据成员的内存仅在您创建对象时分配。
语法
类名 objectname = new Classname();
例如:
类示例 {
\\代码
}
示例 e = new Example();

5. Apex中如何调用方法?

让我们调用一个带参数的 Apex 方法:
在对象中,将参数的值传递给 Apex 方法,其属性与 Apex 方法的参数相同。
例如,
如果 Apex 方法采用 String 参数,则无需直接传递字符串。
相反,您可以传递一个对象,该对象包含一个将 String 作为其值的属性。

6、Apex中有main方法吗?

在 Java 中,没有“主要”或“否”之类的东西,但是您可以使用很多方法来运行依赖于开发人员意图的 Apex 代码。

7. Apex 容易学吗?

嗯,学习 Apex 并不容易,但你可以做到。
这是一段让你更聪明、在就业市场上更受欢迎的旅程。

8. Apex 语言是什么?

Apex 是一种面向对象和强类型的编程语言,可帮助开发人员执行流和事务控制语句以及调用闪电平台上的闪电平台 API。

9. 学习 Apex Code 需要多长时间?

学习 Salesforce Apex 大约需要四个星期。

10. 如何找到salesforce apex 开发人员?

您可以根据您的业务需求找到 Salesforce Apex 开发人员。 您可以租用:
1.全职 Salesforce 开发人员
2.基于项目的 Salesforce 开发人员
您可以与 Salesforce 开发公司联系,该公司以其成功的成果而广为人知。 在敲定一家 Salesforce 公司之前,您可以询问其投资组合以了解其绩效。 此外,考虑查看其评论和评级,如果可能,尝试与过去的客户建立联系。
这样,您就可以为您的 Salesforce 项目赶上最优秀、最完美的 Salesforce 开发人员。

您可能还想阅读
  • 如何避免 Apex 代码中的递归触发器
  • 未来方法与可排队 Apex
  • 如何在 Lightning Web 组件中调用 Apex 方法
  • 如何从另一个批次 Apex 调用批次 Apex