SAP SRM RFx Response 状态变更实战,真正要驱动的是业务 Activity,而不是直接修改 Status 在 SAP SRM 里处理RFx Response状态时,有一个很容易走偏的地方。我们在数据库里看到的是各种状态,在CRM_JEST之类的状态数据里也能找到对应记录,于是很自然地会产生一种想法,既然目标是把一个RFx Response从当前状态改成 Accepted,能不能直接把 Accepted 对应的状态写进去。这条路通常不是 SAP SRM 希望应用层采用的方式。SAP 的通用 Status Management 并不是简单的状态字段维护器。SAP 官方对这套机制的描述很明确,一个业务对象当前可以同时具有多个状态,而状态既记录对象已经处于什么处理阶段,也决定哪些后续业务事务允许执行。更关键的一点是,当一个 business transaction 被执行时,系统可以由此设置或者撤销一个或多个 status。所以在BBP_PROCDOC_STATUS_CHANGE里,真正需要传入的核心信息并不是目标 Status,而是一个 Activity。也就是告诉 SAP某个业务动作发生了。至于这个动作会导致哪些 system status 被设置、哪些 status 被取消、当前状态组合是否允许执行这个动作,则交给 SAP Status Management 自己判断。这也是理解BBP_PROCDOC_STATUS_CHANGE最重要的一把钥匙。SAP Datasheet 对这个 Function Module 的描述就是Change the Object Status