Trailhead - Apex Basics & Database

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值