【Salesforce Apex 教程】4.数据库操作与SOQL③ DML操作
2023年09月17日
文章浏览:248

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());
        }
    }
}

详细用法参考:Database Class Method Result Objects

关注 收藏