课程章节介绍
今天我们来聊一下Salesforce Apex开发中关于包版本化行为的一些关键点,特别是在你给客户做托管包,或者你自己就是订阅者的时候,怎么稳妥地管理版本。
首先,测试版本化的行为,你可以用 System.runAs 方法,但注意参数里可以传入一个 System.Version 对象,这样就能模拟代码在某个特定包版本的上下文中运行。听起来有点绕,简单说就是:你写了个托管包,有不同版本,你想测试老版本下的行为有没有被新版本破坏,就可以用这个办法模拟出来。
接下来是一些最佳实践。第一,谨慎使用 global 访问修饰符。因为一旦你把一个类或方法声明为 global,它就成了公开的API,删不掉了,不然订阅者的代码就会崩。所以设计合约的时候要非常小心,这些是永久性的,别一拍脑袋就 global 出去。每次变更都要记录版本的变化,这样出了事也好追溯。
还有一个好用的工具叫 @namespaceAccessible 注解(注意你这里可能写成了 @spaceupsible,但实际是 @namespaceAccessible)。对于第二代托管包(2GP),如果你想跨包访问一些资源,就可以用这个注解,而不用非得把东西全部设为 global,这样更安全也更灵活。
再说到 Agentforce 相关,如果你写的可调用方法会被 Agentforce 调用,那一定要做得稳健:能够处理批量请求,并且文档要写充分,让别人或者AI知道怎么用、边界条件是什么。
最后从订阅者的角度看,当你的行为确实会影响到对包中 Apex 类的依赖时,你应该把关键的 Apex 类锁定到某个特定的包版本上。升级之前,必须做完整的测试,避免新版本悄悄改了你不期望的东西。另外,可以用“显示客观性(Show Objectiveness)”这个功能(可能指“显示依赖”或某种引用查看器),来搞清楚你的代码到底引用了包的哪些部分,这样版本变化时一目了然。
总结一下:版本管理靠的是克制和记录,不要随手 global,用了就删不掉;测试要覆盖不同版本上下文;订阅方也要主动锁定版本并测试,不要被动升级。这样整个生态才会更稳定。
关键词
Apex
Salesforce
Developer Guide