Trailhead - Apex Basics & Database

了解Apex编程语言的特点,包括服务器端编译、面向对象、强类型等。掌握Apex的数据类型、DML语句、查询语法及事务处理,学习如何进行高效的数据操作和管理。

https://trailhead.salesforce.com/content/learn/modules/apex_database/apex_database_intro?trailmix_creator_id=strailhead&trailmix_slug=prepare-for-your-salesforce-platform-developer-i-credential

apex 特点

1. 编译在服务器端

2. 面向对象

3.强类型

4. 多租户意识,密切避免超limit

5. 与数据课密切集成,直接操作数据。

6. Data focused 提供数据库操作transaction允许rollback

7.易用

8.易测试

9. 版本 code可以保存为某个指定版本。

 

与其他语言不同的是,apex还提供:

1.云开发

2. Trigger

3. 直接查询 和直接保存

4. transaction 和roll back

5. global关键字允许跨命名空间/app的访问

6. 代码版本

大小写不敏感。

 

数据类型概览

基本类型

sObject

集合类型

Enum

自定义class

系统提供的class 

array 和list在apex中是一回事

Api name与label可以不一致。

API name 以__c / __r结尾, 不能包含空格

 

当不知道具体类型的时候,可以用sObject。

可以用括号+类型做强制类型转换。转成具体类型后就可以使用点号来获取字段值了。

泛类型的sObject不能用new 来新建实例,只能用newSobject来创建实例。

 

DML 语句

insert之类的,特别是还有merge 

merge可以merge最多3个同类型record, 保留一个删掉其他, 如果有关联record会做re-parenting.

 

在insert的时候,会生成Id,并更新到 record变量上。

建议批量DML 以避免超过limit. 

upsert时可指定用哪个字段作为键值,默认用Id 。注意:如果是custom object这里只能用一个external Id类型的字段, 如果是standard object, 则可以使用任意“idLookup=true”的字段。

例如: upsert sObjectList Account.Fields.MyExternalId;  如果外键在系统中不唯一,会报错并且不会保存。

 

delete操作: 不会立即删除,而是放在recycle bin里面。

如果DML失败,会抛DMLException类型的异常。

 

Database的方法, 与insert之类不同的是,它们还支持allOrNone参数, 而且会有返回的result.

当allOrNone = false的时候,支持部分成功保存,此时不抛异常。

当allOrNone = true的时候,如果有部分出错,会抛异常。

当需要立即报错抛异常的时候,应该用DML statement

当需要允许部分保存,应该用database的方法。

 

关于更新related records:

Contact ctc = [Select Id, Account.Name From Contact Where .... ]

ctc.Phone = 'xxxxx';

update ctc;

update ctc.Account;

如上例,必须分两次DML分别更新record以及它的related record.

 

Delete支持级联删除。

 

Transaction

所有的DML在同一个transaction里运行。在运行后提交数据库。如果有错误发生,整个transaction会回滚。

 

查询:

不支持*号通配查询。如果某个字段没查询,在访问这个字段值时会报错。

Id 不用加在查询字段中。

默认排序是ASC 

排序字段不能是rich text / multi picklist 

查询语句中用:来绑定变量。

可以子查询。

 

for (variable : [soql_query]) { code_block }

for (variable_list : [soql_query]) { code_block }

 

这两种都可以,最好是用第二种。

 

SOSL 是用来跨object/field查询text的。

List<List<SObject>> searchList = [FIND 'SFDC' IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName)];

1.可跨object 

2. 用text 匹配而不是精确匹配

 

SOQL用于查询单个object 

SOSL 用于查询多个object。 可查询同一obj的多个text字段。

语句最好在developer console中测试运行之后再添加到apex中。

在deveoloper console中, 搜索值用花括号的形式 

FIND {Wingo} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName,Department)

但是在apex中,用单引号形式

* 匹配0个或多个字符

?匹配单个字符

查询是大小写不敏感的 case-insensitive。

Search group的可选值是:

  • ALL FIELDS
  • NAME FIELDS
  • EMAIL FIELDS
  • PHONE FIELDS
  • SIDEBAR FIELDS

查询目标有两种

single word, 数据中的字段值里面的空格或标点作为word的分界来匹配目标word. 比如Find 'abc' 则 account name中的'my abc'会被匹配到

phrase 用引号包括起来的字符,里面可能包含了空格。

 

FIND 'The Query' 则数据字段值需同时包含"The"和"Query"

FIND 'Wingo OR Man' 则数据字段值只需包含"The"和"Query"的任意一个

FIND 'wing*' 则数据字段值需以"wing"开头

过滤条件,在WHERE中定义 例如 RETURNING Account(Name, Industry WHERE Industry='Apparel')

排序 例如 RETURNING Account(Name, Industry ORDER BY Name) 

LIMIT 例如 RETURNING Account(Name, Industry LIMIT 10)

完成 Salesforce Trailhead Hands-on Challenge 涉及以下几个关键步骤,以确保能够顺利通过验证并积累积分和徽章: ### 1. 登录 Trailhead 并选择合适的模块 访问 [Trailhead](https://trailhead.salesforce.com/) 网站并使用 Salesforce 开发者账户或 Trailhead 账户登录。浏览模块(Modules)或项目(Projects)部分,选择一个包含 Hands-on Challenge 的模块。这些模块通常会明确标注包含实践挑战。 ### 2. 配置开发者组织(Dev Org) Hands-on Challenge 通常需要连接到一个 Salesforce 开发者组织(Dev Org)。如果没有现成的 Dev Org,可以通过 Trailhead 自动创建一个。在模块的挑战页面中,点击&ldquo;启动 Org&rdquo;按钮,Trailhead 将会为你生成一个临时的 Salesforce 开发环境。 ### 3. 完成模块中的学习内容 在开始 Hands-on Challenge 之前,建议先完成模块中的理论学习部分。这些内容通常包括视频教程、文档阅读和小测验,帮助理解挑战所需的背景知识和配置步骤。 ### 4. 进入 Hands-on Challenge 并执行任务 进入 Hands-on Challenge 页面后,系统会列出具体的任务要求。这些任务可能包括: - 创建自定义对象或字段 - 配置流程或自动化规则 - 设置页面布局或权限 - 编写 Apex 代码或 Lightning 组件 确保严格按照挑战说明进行操作,避免遗漏任何步骤。 ### 5. 验证并提交挑战 完成所有任务后,点击&ldquo;检查挑战&rdquo;(Check Challenge)按钮。系统会自动验证是否满足所有要求。如果验证通过,即可提交挑战并获得相应的积分和徽章。 ### 6. 常见问题与解决方法 如果挑战验证失败,可以检查以下内容: - 确保所有字段、对象或流程的名称与要求完全一致 - 确认权限设置正确,例如用户配置文件(Profile)或权限集(Permission Set)是否已分配 - 检查是否遗漏了某些步骤或未启用特定功能(如 Lightning Experience 或 Einstein 功能) --- ### 示例:完成一个简单的 Hands-on Challenge 的 Apex 代码 假设挑战要求创建一个自定义对象并编写触发器来更新字段值,可以参考以下代码: ```apex trigger UpdateCustomField on Account (before insert, before update) { for (Account acc : Trigger.new) { if (acc.Name != null) { acc.Custom_Field__c = acc.Name.uppercase(); } } } ``` 此代码会在 Account 对象的名称字段更新时,自动将自定义字段 `Custom_Field__c` 设置为名称的大写形式。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值