Apex开发基础知识
DML学习
通过DML操作记录
使用DML在Salesforce中创建和修改记录。DML提供简单语句用于插入、更新、合并、删除和修复记录。方便你以简单的方式来管理记录
Apex是一种以数据为中心的语言,并且保存在Lighting平台上。便于您直接访问Salesforce中的数据,不同于需要额外设置才能连接到数据库的编程语言。使用Apex DML可以轻松管理记录。通过调用DML语句可以快速对Salesforce记录执行操作。
此例将Acme添加到Salesforce
Account acct = new Account(Name = 'Acme',Phone = '(415)555-1212, NumberOfEmployees = 100);
insert acct;
DML语句
以下是可用的DML语句:
-
insert
-
update
-
upsert
-
delete
-
undelete
-
merge
每个DML语句接受单个sObject或者单个sObject列表。对sObject列表进行操作是处理记录更有效的方法
upsert和merge是Salesforce特有的,使用非常方便。
通过upsert操作在单个语句中创建新纪录并更新之前的记录。使用指定字段来确定对象的存在。如果没有指定字段,则使用id字段
merge语句将最多三个相同sObject类型的记录合并到一个记录中。同时删除其他记录并重新设置关联记录的父级
自动分配给新纪录的id字段
插入记录时系统会为每条记录分配一个id。除了将id值保留在数据库外,Id值还会自动填充您在DML调用中用作参数的sObject变量上
此例展示如何获取与插入客户对应的sObject上的id
Account acct = new Account(Name='Acme',Phone = '(415)555-1212,NumberOfEmployees = 100);
insert acct;
ID acctID = acct.Id
system.debug('ID = '+acctID);
注意:从数据库中检索记录以获取其字段不能使用DML来完成,需要使用SOQL来编写查询语句
批量DML
可以对单个sObject或者批量sObject列表进行DML操作.推荐使用批量DML的方法。有助于避免达到控制器限制。例如每个Apex有150条DML的限制。设置此限制的目的是确保公平访问Lighting平台中的共享资源。对sObject列表执行DML操作算一个DML语句
本示例通过在一次调用中插入联系人列表的方式,达到批量插入联系人的目的。然后,样本也会批量更新这些联系人
- 使用匿名Apex在Console中执行以下代码块
List<Contact> contactList = new List<Contact>{
new Contact(FirstName = 'joe',LastName = 'Smith',Department = 'Finance'),
new Contact(FirstName = 'Kathy',LastName = 'Smith',Department= 'Technology'),
new Contact(FirstName = 'Caroline',LastName = 'Roth',Department= 'Finance'),
new Contact(FirstName = 'Kim',LastName = 'Shain',Department= 'Education')
};
insert contactList;
List<Contact> listToUpdate = new List<Contact>();
for(Contact con : contactList){
if(con.Department == 'Finance'){
con.Title = 'Finance analyst';
listToUpdate.add(con);
}
}
update listToUpdate;
- 检查最近在组织中创建的联系人。财务部门的两个联系人的职务应该是 Financial analyst
更新插入记录
如果列表中同时包含新纪录和已有记录,可以使用upsert语句处理列表中所有记录的插入和更新操作。upsert语句可以避免创建重复记录。不需要判断哪些是已有记录从而节省时间
upsert语句通过比较某个字段的值,将sObject与现有记录进行匹配。如果调用此语句时没有指定字段.则upsert语句会使用sObject ID来匹配现有记录。或者可以指定一个现有对象的字段。
upsert语法
upsert sObject | sObject[];
upsert sObject | sObject[] field;
可选字段是字段令牌,例如指定MyExternalID 字段的语句是
upsert sObjectList Account.Fields.MyExternalID ;
upsert使用sObject记录的主键id、或者外部id来确定是创建记录还是更新记录
- 如果主键不匹配,则创建记录
- 如果主键匹配一次,则更新记录
- 如果主键匹配多次,则报错。并且既不插入也不更新
此示例展示了如何通过 upsert 更新已有联系人记录并在单次调用中插入新联系人。调用 upsert 更新了已有联系人 Josh,并插入了新联系人 Kathy。
Contact josh = new Contact(FirstName = 'Josh',LastName = 'Kaplan',Department = 'Finance');
insert josh;
josh.Description = '