一张销售订单已经进入保存流程,库存检查也通过了,外部接口却在返回结果前超时。负责处理这张订单的程序还在运行,重试次数却快用完了。此时我们很容易想到《仙剑奇侠传 1》里的雪莲子,角色服用后真气得到补充,原本施展不了的法术又能施展。放到企业系统里,我们也希望有一种办法,给受限的处理过程补充资源,让业务继续走下去。
这个联想有用,但需要把雪莲子的效果说准。游戏里的雪莲子侧重恢复单个角色的真气,也就是施展法术所依赖的资源。它不是让角色永久学会新法术,也不是无条件恢复全部状态。不同版本或改编资料对具体恢复数值的记载可能不同,因此这里抓住稳定的机制,消耗品、指定对象、恢复真气、受角色状态约束。
ABAP 没有一个系统自带、调用一次便能给程序补满算力的雪莲子。程序运行时消耗的是工作进程时间、内存、数据库连接、锁资源,以及外部服务允许的请求额度。这些资源由不同层管理,不存在统一的真气槽。不过,业务应用经常自行定义一类可以消耗、也可以恢复的额度,例如接口重试次数、审批补办次数、批处理预算、用户可用积分,或某项操作的剩余执行机会。对于这类资源,雪莲子是一个相当贴切的设计类比。
我们可以把角色视为一项业务任务,把当前真气视为剩余额度,把真气上限视为制度允许的最大额度,把服用雪莲子视为一次经过授权的额度恢复。法术仍然要满足自身的条件,恢复额度只解决资源不足的问题。销售订单即使获得一次额外重试机会,库存不足、价格错误、客户被冻结等业务错误仍会使处理失败。这个边界很重要,否则系统会把应当由业务人员解决的错误,伪装成可以靠不断重试解决的暂时故障。
SAP ABAP 项目中,最接近雪莲子的东西往往不是某条语句,而是我们设计的一次受控补额操作。它通常需要检查当前状态、计算