一张销售订单卡在审批节点时,我们很容易冒出一个念头,能不能给这张单据喂一只金蚕王,让它直接升到可交付状态。这个念头很有《仙剑奇侠传 1》的味道,却也恰好暴露了企业系统和游戏角色的差别。游戏允许道具改变角色的成长数值,订单的状态却牵连信用检查、库存、价格、审批和审计记录,不能只改一个等级字段就算完成。
金蚕王这个比喻需要先认准。它主要让角色快速提升等级与属性,某些版本中,角色达到通常的等级上限后,继续使用它仍可能提升属性。不同版本的表现以及围绕等级上限流传的技巧并不完全一致,因此这里取它最稳妥的特征,也就是消耗一种稀缺资源,跳过常规积累过程,直接获得一次成长。它与金蚕蛊并非同一件物品,讨论 ABAP 时也不该把提升等级误写成施加毒性效果。
ABAP 语言和 SAP 标准系统里没有名为金蚕王的通用指令、事务码或函数模块。若问是否存在相近的设计,答案则是有。我们可以为自己拥有的业务对象设计一次性升级操作,也可以用一组质量工具加速程序能力的提升。不过,这两层类比要分开看。前者改变业务数据,能够做出真正的消耗一次、等级增加一次。后者改善代码质量或团队开发能力,不能凭一次调用让程序自动掌握新的业务规则。
先把游戏机制翻译成业务语言。一只金蚕王对应一份有数量约束的升级权益,角色对应一个业务对象,等级对应由企业定义的能力档位,使用道具对应一次带授权的状态变更。真正难的地方不在于把等级加一,而在于同一份权益只能用一次,两个并发请求不能各自拿到一次收益,失败时不能只扣库存不加等级,越过等级门槛后也不能绕开必需的审核。这些约束决定了它应当是业务操作,而不只是一个算术表达式。
我们可以看一个具体的企业场景。一家跨区域销售公司按经销商履约表现设置铜、银、金三级。等级影响可申请的信用额度范围和某些促销资格。日常升级要等待订单履约、回