Apex Callouts in Read-Only Mode

DEX455 - Apex 集成与工具完全指南:Callouts、命名凭据、WSDL2Apex、Mock 测试

📄 第 401 页 🎬 视频课程

课程章节介绍

同学们,今天咱们来聊聊 Salesforce 里一个非常容易踩坑的细节: ,在只读模式下调用外部服务,。 你看啊,当 Salesforce 组织进入只读模式的时候,系统其实并不会阻止 Apex 向外部服务发请求。这个 callout 会正常执行,你也能正常收到响应,比如接收到一个第三方系统的状态更新。 问题就出在得到响应之后——咱们通常会在同一个事务里,紧接着执行一些写操作,像更新记录、创建日志等等。但因为这时候 Salesforce 正处于,只读模式,,所有的 DML 写操作都会被系统直接拦下来,报错回滚。 这就造成了典型的不一致:,外部调用做完了,响应也拿到了,但后续保存结果的步骤却失败了,——程序流程一下就断了,轻则数据对不上,重则业务流程整个卡住。 那怎么避免这种不正确的程序行为呢? 很简单,咱们在对外部服务发起调用之前,可以先检查一下当前是否处于只读模式。用到一个系统方法: `System.getApplicationReadWriteMode()` 它会返回一个枚举值,告诉我们当前是读写模式还是只读模式。 如果返回值等于 `ApplicationReadWriteMode.READ_ONLY`,那说明当前环境不允许写操作,咱们就应该,直接跳过这次 callout,,等维护结束之后再说。这样就不会出现“调成功了却存不上”的尴尬局面,整个程序流程就安全了。 你可能会问,好端端的怎么突然就只读模式了? 其实 Salesforce 在计划内的维护活动期间就会自动切到只读模式,比如,计划的站点切换,、,实例刷新,这类操作。这些维护通常发生在凌晨或者提前通知的窗口,咱们应用里加上这个检查,就能在这些时段自动保护业务逻辑,避免莫名其妙的错误。 所以记住啦: 在 Apex 里做外部 callout 时,花一行代码调用 `System.getApplicationReadWriteMode()`,如果读到的状态是只读,就礼貌地绕过这次调用,不要硬来。这样写出来的程序才足够健壮,不会因为维护窗口而“翻车”。 好,这点就讲完了,大家在实际开发的时候可以对照着试一下,有问题随时讨论。

关键词

Apex Salesforce Developer Guide