jBPM-4.4:主流程(process)与子流程(sub-process)之间交换数据

来源:互联网 发布:python语言程序设计pdf 编辑:程序博客网 时间:2024/06/06 16:46

现在假设存在这样一个流程:

首先需要进行复杂的鉴权,而且可能随着需求的变化而变化,这导致鉴权的流程也是时刻可能变化的。而只有当鉴权成功以后,才能执行实际的交易操作,例如向外部系统发送请求报文获取某些交易的数据。

这时,可以考虑将鉴权流程独立做成一个子流程,然后将其嵌入到主流程中去,适应局部流程变化而无需修改全局流程的问题,在子流程与主流程之间实际要做的就是约定数据的交换协议,即确定数据在子流程与主流程之间的流入与流出。

下面通过一个实际例子来说明并实践。

首先,定义主流程。

主流程包含鉴权的子流程,鉴权通过之后,收集鉴权过程中获取到的交易必需的数据,组装请求报文,流程定义如图所示:

对应的流程定义文件main-process.jpdl.xml,如下所示:

 

上面,sub-process-key="SubCheckProcess"表示一个嵌入主流程中的鉴权子流程。通过流程定义文件内容,可以看到,在主流程与子流程之间交换数据,是通过变量myRequest来实现的:

<parameter-in>元素表示从主流程MainProcess中流入到子流程SubCheckProcess中变量为myRequest,而var="myRequest"表示在主流程中变量名称,而subvar="myRequest"表示在子流程中可以通过获取到myRequest变量从而得到数据。同理,<parameter-out>元素表示从子流程SubCheckProcess中流出到MainProcess中,将数据又传回主流程中,继续后续流程的操作。

另外,主流程在执行完子流程后,又执行了ExternalRequest结点,对应的处理类为com.umpay.workflow.jbpm.handler.ExternalRequestHandler,如下所示:

然后,实现子流程。

子流程定义,如图所示:

对应的流程定义文件sub-check-process.jpdl.xml,内容如下所示:

上面对应了6个处理类,实现分别如下所示:

在执行子流程的过程中,在每一个节点处处理,都模拟了“获取到一些额外的必需数据”。

最后,测试用例。

测试用例,如下所示:

上述程序,开始要需要部署流程,主流程和子流程需要单独部署,实际是在这个具体的例子中,存在两个流程,它们在执行自己的实例的时候是独立的。在流程启动之前,需要根据流程执行需要,输入在流程中能够获取到的数据(Key+Value的形式)。接着就可以运行了,可以看到,最终可以看到流程数据的集合 :

Main process variables: {goodsId=030, mobileId=13800138000, userId=20110001674, merId=001, goodsCount=2000, mbr=mbr_001_CMPAY010, gbr=gbr_030_CMPAY010, bankId=CMPAY010}

这里,数据集合{userId=20110001674, goodsCount=2000, mbr=mbr_001_CMPAY010, gbr=gbr_030_CMPAY010}都是在执行处理的时候获取到的交易操作所需要的数据。

原创粉丝点击