子流程含义是在某个流程流转过程中可以创建一个新的流程并执行,结束后可以在此返回父流程。
关于子流程
子流程
子流程是BPMN构件,是在一个流程中的复合的活动。子流程可以分解为一系列更精细的活动。子流程通过父流程实例化。
子流程可以设计成交易的一部分,下面列出三种可能的交易结果:
- 成功完成(Successful completion):流程按顺序执行,并且交易执行成功;
- 取消(Cancel):交易内的活动回滚,并且补充特定活动;
- 异常(Exception):出现异常活动不需要回滚,将从错误事件继续流转。
嵌入子流程
嵌入子流程是BPMN组构件,用于分组属于特定环境的活动。这有助于通过折叠一个嵌入的子流程来隐藏活动的复杂性。它也有助于链接超时异常和补偿,这是常见的嵌入子流程的所有活动。
注:
当超时事件附上嵌入子流程,所有未完成任务从消息箱移除。
如果在流程执行期间遇到“终止活动(terminate actively)”,那么所有未完成任务从收件消息箱中移除,并且活动置成“废弃(Obsolete)”。这种状态从流程实例活动视图中可见。终止表示嵌入子流程终止,并且流程流转从下一个活动继续流转(在嵌入子流程之后)。嵌入子流程图例如下图所示。
图1-1
子流程与嵌入子流程对比
嵌入子流程不是一个独立流程,没有起始事件(Start event)和结束事件(End event),只是流程中的局部,为了表示简单才采用嵌入子流程方法。
子流程是一个独立完成的流程,可供其他正常流程调用,有起始事件(Start event)和结束事件(End event)。
子流程建模及使用
第一步:新建流程
在Workspace Documents中新建Business Process Model,如下图2-1所示空白流程,包括两个活动环节,流程命名为sub_processA。
图2-1
对流程进行如下配置,效果如下图2-2所示。
图2-2
(1)流程挂接表单
拖拽表单(名称为TestForEach)到流程活动环节上,如上图2-2所示,Activity分别命名为“子流程活动1”、“子流程活动2”。
(2)消息配置(Message map)
图2-3
创建消息(Message)名称为sub_msg,内包含两个元素(Element)sub_msg_name、sub_msg_data。
(3)消息绑定到表单
在每个活动环节上,使用“Pre Assignments”绑定输入消息元素到表单中Input上,如上图2-3所示,使用“Post Assignments”绑定表单输入Input到消息元素上。
(4)配置流程启动事件(Start Event)
此处配置是为流程接收父流程传入参数而设置输入消息接口,设置Start属性(Properties),其中Trigger Type为“Message”,Input Message设置为“bpm:sub_msg”(通过XPath表达式获得)。
图2-4
(5)配置流程结束事件(End Event)
此处配置是为流程结束时返回消息给父流程而设置的输出消息接口,设置End属性,其中End Type为“Message”,Output Message为“bpm:sub_msg”。
注:此处的Message是在Message Map中配置过的内容。
图2-5
(6)发布流程
发布流程,可做为其他流程的子流程来使用。
第二步:新建流程使用子流程
本段第二步内容是讲述流程使用子流程方法,以及父子关系的设置。
(1)新建流程
新建流程做为父流程使用,准备使用前面所建的流程。在Business Process Model界面左侧,切换选项页面到Workspace,按下图2-6所示,拖拽上面新建流程“sub_processA”到图中。
图2-6
拖拽到位后,所拖拽图示变成类似活动环节,再画上连接线即可,如下图2-7所示。把后续活动节点命名为主流程活动2,并绑定表单。命名流程为TestSubProcess1。
图2-7
(2)新建主(父)流程消息(Message Map)
创建消息(Message)名称为main_msg,内包含两个元素(Element)main_msg_name、main_msg_data。
图2-8
(3)配置子流程活动环节
子流程活动(sub_processA)属性定义如下:
General内容如下图2-9所示,基本保存默认状态。
图2-9
Message没人如下图2-10所示,基本保持默认值即可。
图2-10
(4)消息绑定到子流程
这里所说的子流程就是上面拖拽进入流程中“sub_process”流程,按流程活动环节方式配置,使用“Pre Assignments”绑定输入消息元素到子流程中Message上,做为子流程的输入,如上图2-8所示,main_msg_name对应sub_msg_name、main_msg_data对应main_msg_data。使用“Post
Assignments”绑定子流程结束事件消息输出主流程消息元素上。
(5)配置流程启动事件(Start Event)
此处配置是为流程接收外部传入参数而设置输入消息接口,设置Start属性(Properties),其中Trigger Type为“Message”,Input Message设置为“bpm:main_msg”(通过XPath表达式获得)。
(6)其他配置
略。
(7)发布流程
第三步、测试流程
(1)先测试子流程
(2)测试主流程
在Debug测试主流程过程中,将会出现子流程Debug界面,在子流程Debug完成后,再回到主流程界面。
在子流程活动环节上使用For Each循环
第一步:新建流程
同“子流程建模及使用”章节的第一步,在此略。
第二步:新建流程使用子流程和For Each循环
(1)新建流程
新建流程命名为TestSubProcess2,其中“子流程在主流程1”是名称为sub_processA流程。按For Each循环方法把子流程活动配置成For Each循环组构件。
图3-1
(2)新建主(父)流程消息(Message Map)
创建消息(Message)名称为main_msg,先建迭代元素,命名为main_elem,内包含两个元素(Element)main_elem_name、main_elem_data。此main_msg消息承载迭代参数到子流程。
再创建消息名称为main_ret_msg,做为接收子流程返回消息使用,接着在其内部建两个元素(Element)main_ret_msg_name、main_ret_msg_data。
图3-2
(3)配置For Each属性
设置迭代变量Iterator Name为iterator subprocess,选择条件值Select Condition为bpm:main_msg/bpm:main_elem。(注,此值是通过XPath选择器获得)
图3-3
(4)消息绑定到子流程
这里所说的子流程就是上面拖拽进入流程中“sub_process”流程,按流程活动环节方式配置,使用“Pre Assignments”绑定输入消息元素到子流程中Message上,做为子流程的输入,如上图3-2所示,main_elem_name对应sub_msg_name、main_elem_data对应main_msg_data。
注:输入消息是迭代数据,所以main_elem_name实际对应XPath表达式是instance:iterator_subprocess/bpm:main_elem_name/text(),如下图3-4所示。
图3-4
(5)绑定子流程返回消息到主流程
使用“Post Assignments”绑定子流程结束事件消息输出主流程消息元素上,sub_msg_name对应main_ret_msg_name、sub_msg_data对应main_ret_msg_data,如下图3-5所示。
图3-5
(7)发布流程
第三步:测试流程
略。
由于作者水平有限,欢迎反馈讨论。
参考:
Cordys BOP 4平台开发入门实战演练——For Each流程建模开发 肖永威 2015.4
Cordys BOP 4平台开发入门实战演练——流程建模开发(BPM) 肖永威 2015.4