在很多企业里,业务流程并不是靠一个报表跑完就结束,而是由一连串角色协作完成:有人提交申请,有人审批,有人补充主数据,有人复核,有人最终执行。把这些步骤串起来的经典方案之一,就是 SAP Business Workflow。
过去在 ECC 时代,大家更熟悉的是 BOR Business Object 的事件触发 Workflow,例如借助 SAP_WAPI_CREATE_EVENT 或相关的事件创建函数来启动流程。到了面向对象更普及的阶段,Workflow 同样可以直接消费 ABAP OO 事件:你的业务对象是一段 ABAP Class,你在 Class 上定义 Event,Workflow 以 ABAP Class 作为对象类别去订阅它,流程就能被事件驱动起来。事件一抛出,流程就启动,或者对运行中的流程做控制动作,整个链路会非常干净。
下面这篇文章会把这件事拆开讲透:怎样在 ABAP Class 上定义可被 Workflow 使用的事件,怎样在 SWDD 里把事件挂成流程启动条件,怎样用 CL_SWF_EVT_EVENT 在代码里抛事件,以及怎样传递事件参数、怎样排查抛事件不生效的典型坑。
你需要准备什么环境
要把示例完整跑通,通常需要满足几件事:
- 系统侧已经启用 Workflow 环境,且版本至少在 SAP NetWeaver 6.20 及以上
- 已经有一个实现了 IF_WORKFLOW 接口的 ABAP Class(示例沿用 ZCL_PLANT)
- 已经创建过一