Exception Handling & Database Result Objects

DEX455 - Apex 中的数据操作:sObject 与 DML 完全指南

📄 第 172 页 🎬 视频课程

课程章节介绍

同学们,咱们今天来看看这个关于TLR操作和结果处理的Slide。 TLR呢,你可以理解为就是那些会修改数据库的操作,比如插入、更新、删除什么的。当你直接写DML语句的时候,万一碰到问题,它会直接抛出一个运行时异常,咱们得用 `try-catch` 块去兜底。 但这么处理有个问题——如果一次操作好几条记录,只要有一条失败,整个异常就抛出来了,你根本不知道具体是哪条记录出的错。所以更推荐用 `Database` 类提供的方法,比如 `Database.insert()`、`Database.update()`,这些方法会返回一个结果对象,里面装着每条记录的详细状态。 根据操作类型不同,返回的结果对象也不一样: - 做插入和更新,返回的是 ,SaveReport,(其实标准叫 SaveResult,你理解成保存报告就好)。 - 做 upsert,返回 ,UpsertReport,,它比 SaveReport 多了一个 `isCreated()` 方法,能帮你判断这条记录是新建的还是被更新的。 - 如果是合并记录,返回 ,MergeReport,。 - 删除返回 ,DeleteReport,,取消删除返回 ,UndeleteReport,。 - 还有线索转换,用的是 ,LeadConvertReport,。 这些“报告”对象都有一套通用的方法: - `isSuccess()` 告诉你这次操作成功还是失败。 - 成功了,可以用 `getId()` 拿到新记录的 ID。 - 如果失败,就调用 `getErrors()` 把具体错误信息取出来。 这里还有一个特别实用的功能——,部分处理,。当你在调用 Database 方法的时候,把第二个参数设为 `true`(其实是 `allOrNone = false`),那就不会因为某一条记录失败而抛出异常了。你可以安安稳稳地遍历结果列表,用 `isSuccess()` 一条一条去检查,该记录的记录,该报错的单独处理。这样整个操作的鲁棒性就好多了。 好,这部分的核心就是:告别粗暴的异常,拥抱结果对象,用巧劲去处理数据库操作。有什么疑问我们接着聊。

关键词

Apex Salesforce Developer Guide