一张销售订单刚从总部传到海外子公司,订单本身已经保存成功,后续的交货创建却反复失败。排查时,我不会只盯着报错的那一次调用。更要紧的是弄清楚,失败有没有给订单留下持续生效的业务状态,重试是否又把相同的问题带回总部。这种目标受影响、发起方也承受代价的过程,才接近《仙剑奇侠传 1》中缠魂丝的味道。
**ABAP 没有名为缠魂丝的内置语句或标准道具。**从业务程序设计的角度,可以实现与它相似的机制,但类比前需要认清道具效果。资料将缠魂丝列为毒物,描述为敌方中毒丝,使用后我方也中毒丝。它不是单纯把敌人定住的绳索。名字里的「缠」容易让人想到锁对象,可是锁只能解释一部分表面现象,解释不了毒性状态持续存在,更解释不了施用者反噬。
把游戏行为拆开,会看到一次施用涉及三个对象。施用者要付出使用道具的代价,目标获得毒丝状态,施用者也可能获得同类状态。毒丝状态与当下那一下攻击不是同一件事,它会在后续回合继续产生影响。放进企业系统,便是一次业务操作同时改变目标对象和发起对象,并让某种状态跨越当前调用,影响后面的处理。
这里还有一个容易混淆的边界。游戏里的毒丝有自己的回合效果,企业业务没有统一的「每回合掉血」规则。订单被标为异常后,是禁止交货、要求人工复核,还是仅发出提醒,要由具体业务决定。不能因为借用了毒丝的名字,就让程序在每次读取订单时扣减金额或库存。类比帮助我们识别机制,业务规则仍须独立定义。
以一家同时运行总部和海外子公司系统的企业为例,总部向子公司发送一笔订单。子公司校验出贸易合规资料缺失,于是将接收订单置为待核查,并回传处理结果。总部接到回执后,也把原订单的跨公司履约状态置为待核查。目标方暂时无法推进交货,发起方暂时无法继续确认本次跨公司流程。这是一个贴近缠魂丝的业务设计实例,两个对象都带上了持续状态。这个场景用于说明设