4.3 DML操作(参考Data Manipulation Language)
在Salesforce中,除了使用SOQL查询数据外,您还需要对数据进行诸如插入、更新和删除等操作。这些操作通常称为DML (Data Manipulation Language) 操作。
4.3.1 插入、更新和删除记录
插入记录:
首先,您需要创建一个sObject的实例,然后为它的字段分配值。以下是一个简单的示例,显示如何插入一个新的帐户:
Account myAcc = new Account(Name='Salesforcegogogo', AnnualRevenue=1000000);
insert myAcc;
更新记录:
首先,您需要查询或以其他方式获得要更新的记录的实例,然后更改其字段的值。以下示例显示了如何更新帐户的年收入:
Account myAcc = [SELECT Id, AnnualRevenue FROM Account WHERE Name='Salesforcegogogo' LIMIT 1];
myAcc.AnnualRevenue = 2000000;
update myAcc;
删除记录:
您可以使用delete关键字删除记录。以下示例显示了如何删除帐户:
Account myAcc = [SELECT Id FROM Account WHERE Name='Salesforcegogogo' LIMIT 1];
delete myAcc;
4.3.2 处理DML操作的异常
当进行DML操作时,可能会出现各种错误,例如字段验证失败、尝试插入重复的记录等。为了处理这些错误,您应该使用try-catch块。
try {
insert myAcc;
} catch (DmlException e) {
System.debug('An error occurred: ' + e.getMessage());
}
此代码段将捕获并记录任何DML异常,使您可以查看错误消息并相应地处理异常。
4.3.3 使用Database类进行高级DML操作
在某些情况下,您可能需要进行更复杂的DML操作,如批量插入或只插入有效的记录等。为此,Salesforce提供了Database类。
批量插入:
如果您有多个记录需要插入,可以使用Database.insert方法。
Account acc1 = new Account(Name='Salesforcegogogo 1');
Account acc2 = new Account(Name='Salesforcegogogo 2');
List<Account> accList = new List<Account>{acc1, acc2};
Database.SaveResult[] srList = Database.insert(accList, false);
false参数表示如果其中一个记录插入失败,其他的还可以继续插入。
通过SaveResult列表,您可以检查每个记录的插入状态,看看是否有错误。
例如,当使用Database.insert()与设置了allOrNone参数为false时,即使列表中的某些记录失败,其余的记录仍然可以成功插入。
每个Database.SaveResult对象都包含一个布尔值,指示操作是否成功,以及一个getErrors()方法,返回导致失败的任何错误。
示例:
Account acc1 = new Account(Name='Salesforcegogogo 1');
Account acc2 = new Account(Name='Salesforcegogogo 2');
List<Account> accList = new List<Account>{acc1, acc2};
Database.SaveResult[] srList = Database.insert(accList, false);
for(Database.SaveResult sr : srList) {
if (sr.isSuccess()) {
System.debug('Successfully inserted account.');
} else {
for(Database.Error err : sr.getErrors()) {
System.debug('The following error has occurred: ' + err.getStatusCode() + ': ' + err.getMessage());
}
}
}